├── CODE_OF_CONDUCT.md ├── Complete_Data_.csv ├── Indian_pines_knnc.py ├── Indian_pines_knnc_after_pca.py ├── LICENSE.md ├── PaviaUniversity_HSI ├── Pavia_University.ipynb └── README.md ├── README.md ├── assets ├── Indian_pines_accuracy_after_pca.JPG ├── Indian_pines_accuracy_before_pca.JPG ├── Indian_pines_classification_before_pca.JPG ├── Indian_pines_varianve_ratio.JPG └── indian_pines_after_pca_with_2PC.JPG ├── indian_pines_after_pca.csv ├── indian_pines_after_pca.dat └── indian_pines_pca.py /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at syamkakarla1126@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /Indian_pines_knnc.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | import pandas as pd 4 | 5 | 6 | from sklearn import decomposition 7 | from sklearn import datasets 8 | 9 | # load dataset into Pandas DataFrame 10 | df = pd.read_csv("D:\Python_programs\ML\Complete_Data_.csv") 11 | 12 | from sklearn.preprocessing import StandardScaler 13 | n=[] 14 | ind=[] 15 | for i in range(200): 16 | n.append(i+1) 17 | for i in range(200): 18 | ind.append('px'+str(n[i])) 19 | 20 | features = ind 21 | X = df.loc[:, features].values 22 | # Separating out the target 23 | Y = df.loc[:,['target']].values 24 | from sklearn.model_selection import train_test_split 25 | 26 | X_train, X_test, y_train, y_test = train_test_split( 27 | X, Y, test_size = 0.3, random_state = 100) 28 | y_train=y_train.ravel() 29 | y_test=y_test.ravel() 30 | #classifier.fit(X_train, y_train.squeeze()) 31 | 32 | from sklearn.neighbors import KNeighborsClassifier # FOR K=13 ,IT HAS ACCURACY AROUND 72.7488902980 33 | from sklearn import metrics 34 | import time 35 | #model = KNeighborsClassifier() 36 | model=KNeighborsClassifier(n_neighbors =13, weights='uniform', algorithm='auto') 37 | model.fit(X_train, y_train) 38 | start = time.time() 39 | Yhat = model.predict(X_test) 40 | end = time.time() 41 | print('Time Taken For Classification is :',(end - start)) 42 | print("Accuracy :",metrics.accuracy_score(Yhat, y_test)*100) 43 | print('\n','*'*11,'Accuracy of INDIAN-PINES Dataset Before PCA','*'*11) 44 | print('*'*11,' Classifier : K-NEAREST NEIGHBOUR ','*'*11) 45 | for K in range(25): 46 | K_value = K+1 47 | neigh = KNeighborsClassifier(n_neighbors = K_value, weights='uniform', algorithm='auto') 48 | neigh.fit(X_train, y_train) 49 | y_pred = neigh.predict(X_test) 50 | print ("Accuracy is :%1.10f"%(metrics.accuracy_score(y_test,y_pred)*100),"% ","for K-Value: %4d"%(K_value)) 51 | 52 | -------------------------------------------------------------------------------- /Indian_pines_knnc_after_pca.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | import pandas as pd 4 | 5 | 6 | from sklearn import decomposition 7 | from sklearn import datasets 8 | 9 | # load dataset into Pandas DataFrame 10 | df = pd.read_csv("D:\Python_programs\ML\indian_pines_after_pca.csv") 11 | 12 | from sklearn.preprocessing import StandardScaler 13 | n=[] 14 | ind=[] 15 | for i in range(2): 16 | ind.append('PC-'+str(i+1)) 17 | 18 | features = ind 19 | X = df.loc[:, features].values 20 | # Separating out the target 21 | Y = df.loc[:,['target']].values 22 | from sklearn.model_selection import train_test_split 23 | 24 | X_train, X_test, y_train, y_test = train_test_split( 25 | X, Y, test_size = 0.3, random_state = 100) 26 | y_train=y_train.ravel() 27 | y_test=y_test.ravel() 28 | #classifier.fit(X_train, y_train.squeeze()) 29 | 30 | from sklearn.neighbors import KNeighborsClassifier # FOR K=13 ,IT HAS ACCURACY AROUND 72.7488902980 31 | from sklearn import metrics 32 | import time 33 | #model = KNeighborsClassifier() 34 | model=KNeighborsClassifier(n_neighbors =13, weights='uniform', algorithm='auto') 35 | model.fit(X_train, y_train) 36 | start = time.time() 37 | Yhat = model.predict(X_test) 38 | end = time.time() 39 | print('Time Taken For Classification is :',(end - start)) 40 | print("Accuracy :",metrics.accuracy_score(Yhat, y_test)*100) 41 | print('\n','*'*11,'Accuracy of INDIAN-PINES Dataset After PCA','*'*11) 42 | print('*'*11,' Classifier : K-NEAREST NEIGHBOUR ','*'*11) 43 | for K in range(25): 44 | K_value = K+1 45 | neigh = KNeighborsClassifier(n_neighbors = K_value, weights='uniform', algorithm='auto') 46 | neigh.fit(X_train, y_train) 47 | #start = time.time() 48 | y_pred = neigh.predict(X_test) 49 | #end = time.time() 50 | #print('Time Taken For Classification is :',(end - start)) 51 | print ("Accuracy is :%1.10f"%(metrics.accuracy_score(y_test,y_pred)*100),"% ","for K-Value: %4d"%(K_value)) 52 | 53 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Syam kakarla 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PaviaUniversity_HSI/Pavia_University.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "import pandas as pd\n", 12 | "from sklearn import decomposition\n", 13 | "from sklearn.preprocessing import MinMaxScaler\n", 14 | "from sklearn.decomposition import PCA\n", 15 | "import seaborn as sns" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 4, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "data": { 25 | "text/html": [ 26 | "
\n", 27 | "\n", 40 | "\n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | "
pix1pix2pix3pix4pix5pix6pix7pix8pix9pix10...pix95pix96pix97pix98pix99pix100pix101pix102pix103class
0255255255255255255255255255255...2552552552552552552552552550
1255255255255255255255255255255...2552552552552552552552552550
2255255255255255255255255255255...2552552552552552552552552550
3255255255255255255178198193224...2552552552552552552552552550
4255255255255255255255208231255...2552552552552552552552552550
\n", 190 | "

5 rows × 104 columns

\n", 191 | "
" 192 | ], 193 | "text/plain": [ 194 | " pix1 pix2 pix3 pix4 pix5 pix6 pix7 pix8 pix9 pix10 ... pix95 \\\n", 195 | "0 255 255 255 255 255 255 255 255 255 255 ... 255 \n", 196 | "1 255 255 255 255 255 255 255 255 255 255 ... 255 \n", 197 | "2 255 255 255 255 255 255 255 255 255 255 ... 255 \n", 198 | "3 255 255 255 255 255 255 178 198 193 224 ... 255 \n", 199 | "4 255 255 255 255 255 255 255 208 231 255 ... 255 \n", 200 | "\n", 201 | " pix96 pix97 pix98 pix99 pix100 pix101 pix102 pix103 class \n", 202 | "0 255 255 255 255 255 255 255 255 0 \n", 203 | "1 255 255 255 255 255 255 255 255 0 \n", 204 | "2 255 255 255 255 255 255 255 255 0 \n", 205 | "3 255 255 255 255 255 255 255 255 0 \n", 206 | "4 255 255 255 255 255 255 255 255 0 \n", 207 | "\n", 208 | "[5 rows x 104 columns]" 209 | ] 210 | }, 211 | "execution_count": 4, 212 | "metadata": {}, 213 | "output_type": "execute_result" 214 | } 215 | ], 216 | "source": [ 217 | "df = pd.read_csv(\"paviaU_CompleteData.csv\")\n", 218 | "df.head()" 219 | ] 220 | }, 221 | { 222 | "cell_type": "code", 223 | "execution_count": 5, 224 | "metadata": {}, 225 | "outputs": [], 226 | "source": [ 227 | "X = df.loc[:, ['pix'+str(i) for i in range(1,104)]].values\n", 228 | "# Separating out the target\n", 229 | "y = df.loc[:,['class']].values" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 6, 235 | "metadata": {}, 236 | "outputs": [], 237 | "source": [ 238 | "scaler_model = MinMaxScaler()\n", 239 | "scaler_model.fit(X.astype(float))\n", 240 | "x=scaler_model.transform(X)" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 7, 246 | "metadata": {}, 247 | "outputs": [], 248 | "source": [ 249 | "from sklearn.neighbors import KNeighborsClassifier \n", 250 | "from sklearn import metrics\n", 251 | "def perform_knnc(X_train, X_test, y_train, y_test, w = 'uniform'):\n", 252 | " # try K=1 through K=40 and record testing accuracy\n", 253 | " k_range = range(1, 41)\n", 254 | "\n", 255 | " # We can create Python list using [] or llist()\n", 256 | " scores = []\n", 257 | "\n", 258 | " # We use a loop through the range 1 to 40\n", 259 | " # We append the scores in a list\n", 260 | " for k in k_range:\n", 261 | " knn = KNeighborsClassifier(n_neighbors=k, weights=w, algorithm='auto')\n", 262 | " knn.fit(X_train, y_train)\n", 263 | " y_pred = knn.predict(X_test)\n", 264 | " scores.append(metrics.accuracy_score(y_test, y_pred))\n", 265 | " scores=[i*100 for i in scores]\n", 266 | " return scores\n", 267 | "\n", 268 | "def plot_acc(scores):\n", 269 | " plt.figure(figsize=(12, 6))\n", 270 | " plt.plot(scores, color='blue', linestyle='dashed', marker='o', \n", 271 | " markerfacecolor='#ff6347', markersize=10)\n", 272 | " plt.title('Accuracy scores for K-values(1-40)') \n", 273 | " plt.xlabel('K Value')\n", 274 | " plt.xticks=[i for i in range(1, 41)]\n", 275 | " plt.ylabel('Accuracy')\n", 276 | " plt.show()" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": {}, 282 | "source": [ 283 | "## PCA" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 8, 289 | "metadata": {}, 290 | "outputs": [ 291 | { 292 | "data": { 293 | "text/plain": [ 294 | "0.9996941215372042" 295 | ] 296 | }, 297 | "execution_count": 8, 298 | "metadata": {}, 299 | "output_type": "execute_result" 300 | } 301 | ], 302 | "source": [ 303 | "from sklearn.model_selection import train_test_split\n", 304 | "\n", 305 | "pca = PCA(n_components=70)\n", 306 | "principalComponents = pca.fit_transform(X)\n", 307 | "sum(pca.explained_variance_ratio_)" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": 10, 313 | "metadata": {}, 314 | "outputs": [], 315 | "source": [ 316 | "principalDf = pd.DataFrame(data = principalComponents, columns = ['PC-'+str(i) for i in range(1, 71)])\n", 317 | "# Adding lables\n", 318 | "finalDf = pd.concat([principalDf, df[['class']]], axis = 1)\n", 319 | "finalDf.to_csv('PaviaU_pca_70.csv')" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": null, 325 | "metadata": {}, 326 | "outputs": [], 327 | "source": [ 328 | "X_train, X_test, y_train, y_test = train_test_split(principalComponents, y.ravel(), test_size = 0.3, random_state = 100)\n", 329 | "acc_scores=[]\n", 330 | "acc_scores = perform_knnc(X_train, X_test, y_train, y_test, w = 'uniform')\n", 331 | "print('Maximum Accuracy:',max(acc_scores),' at k-value',acc_scores.index(max(acc_scores))+1)" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "execution_count": null, 337 | "metadata": {}, 338 | "outputs": [], 339 | "source": [ 340 | "acc_scores = perform_knnc(X_train, X_test, y_train, y_test, w = 'distance')\n", 341 | "print('Maximum Accuracy:',max(acc_scores),' at k-value',acc_scores.index(max(acc_scores))+1)\n", 342 | "for i in range(len(acc_scores)):\n", 343 | " print(\"Accuracy : %2.10f at k-value %2d\"%(acc_scores[i], i+1))" 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "execution_count": null, 349 | "metadata": {}, 350 | "outputs": [], 351 | "source": [ 352 | "print(' Accuracy:',acc_scores[6],' at k-value',7)" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": {}, 358 | "source": [ 359 | "## Accuracies:\n", 360 | "## PCA + KNNC = 86.78804855275443\n", 361 | "## PCA + WKNNC = 87.58169934640523" 362 | ] 363 | }, 364 | { 365 | "cell_type": "markdown", 366 | "metadata": {}, 367 | "source": [ 368 | "### -------------------------------------------------------------------------------------------------------------------------------------------------------" 369 | ] 370 | }, 371 | { 372 | "cell_type": "markdown", 373 | "metadata": {}, 374 | "source": [ 375 | "# KPCA" 376 | ] 377 | }, 378 | { 379 | "cell_type": "code", 380 | "execution_count": 43, 381 | "metadata": {}, 382 | "outputs": [], 383 | "source": [ 384 | "from sklearn.model_selection import train_test_split\n", 385 | "from sklearn.decomposition import KernelPCA\n", 386 | "\n", 387 | "kpca = kpca = KernelPCA(n_components=70, kernel='poly')\n", 388 | "principalComponents = kpca.fit_transform(X)\n", 389 | "# Adding lables\n", 390 | "principalDf = pd.DataFrame(data = principalComponents, columns = ['PC-'+str(i) for i in range(1, 71)])\n", 391 | "# Adding lables\n", 392 | "finalDf = pd.concat([principalDf, df[['class']]], axis = 1)\n", 393 | "finalDf.to_csv('salinas_kpca_70.csv')\n" 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": 44, 399 | "metadata": {}, 400 | "outputs": [ 401 | { 402 | "name": "stdout", 403 | "output_type": "stream", 404 | "text": [ 405 | "Maximum Accuracy: 85.80765639589168 at k-value 9\n", 406 | "Maximum Accuracy: 85.52754435107376 at k-value 7\n" 407 | ] 408 | } 409 | ], 410 | "source": [ 411 | "X_train, X_test, y_train, y_test = train_test_split(principalComponents, y.ravel(), test_size = 0.3, random_state = 100)\n", 412 | "acc_scores=[]\n", 413 | "acc_scores = perform_knnc(X_train, X_test, y_train, y_test, w = 'uniform')\n", 414 | "print('Maximum Accuracy:',max(acc_scores),' at k-value',acc_scores.index(max(acc_scores))+1)\n", 415 | "print('Maximum Accuracy:',acc_scores[6],' at k-value',7)" 416 | ] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "execution_count": 45, 421 | "metadata": {}, 422 | "outputs": [ 423 | { 424 | "name": "stdout", 425 | "output_type": "stream", 426 | "text": [ 427 | "Maximum Accuracy: 87.06816059757236 at k-value 6\n", 428 | "Maximum Accuracy: 86.60130718954248 at k-value 7\n" 429 | ] 430 | } 431 | ], 432 | "source": [ 433 | "acc_scores = perform_knnc(X_train, X_test, y_train, y_test, w = 'distance')\n", 434 | "print('Maximum Accuracy:',max(acc_scores),' at k-value',acc_scores.index(max(acc_scores))+1)\n", 435 | "print('Maximum Accuracy:',acc_scores[6],' at k-value',7)" 436 | ] 437 | }, 438 | { 439 | "cell_type": "markdown", 440 | "metadata": {}, 441 | "source": [ 442 | "## Accuracies:\n", 443 | "## PCA + KNNC = 86.78804855275443\n", 444 | "## PCA + WKNNC = 87.58169934640523\n", 445 | "## KPCA + KNNC = 85.52754435107376\n", 446 | "## KPCA + WKNNC = 86.60130718954248" 447 | ] 448 | }, 449 | { 450 | "cell_type": "code", 451 | "execution_count": 49, 452 | "metadata": {}, 453 | "outputs": [], 454 | "source": [ 455 | "def plot_gt(X, Y, k_value, w='uniform', q='plot'):\n", 456 | " neigh = KNeighborsClassifier(n_neighbors = k_value, weights= w, algorithm='auto')\n", 457 | " neigh.fit(X, Y.ravel())\n", 458 | " pred = neigh.predict(X)\n", 459 | " gt = pred\n", 460 | " gt.resize((86, 83))\n", 461 | " fig = plt.figure(figsize=(6, 6))\n", 462 | " plt.title(\"Clasification Map(salinas): \"+q)\n", 463 | " plt.imshow(gt, cmap='jet')\n", 464 | " q = q+'.png'\n", 465 | " fig.savefig(q, dpi=fig.dpi, bbox_inches=\"tight\")\n", 466 | " plt.colorbar()\n", 467 | " plt.show()" 468 | ] 469 | }, 470 | { 471 | "cell_type": "code", 472 | "execution_count": 51, 473 | "metadata": {}, 474 | "outputs": [ 475 | { 476 | "data": { 477 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWIAAAFeCAYAAAC/5BWsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xm8JGV97/HPNzMgjizD7gyLYERQCaCeSySgIWJkkQiJkuA6EuKYe6OikghuF4gmL0zigonLnReo4xVBHDHg7lwUlySiZ2AABRUlCgPDMuxEDQz+7h9VB2qaXqqrqqu66nzfr1e/zunuWp7u0+fpp771PE8pIjAzs+b8VtMFMDOb71wRm5k1zBWxmVnDXBGbmTXMFbGZWcNcEZuZNcwVsZlZQZI+Kuk2ST/o89xfSwpJO4zajitiM7PiPg4c0fugpN2APwRuyLMRV8RmZgVFxLeAO/s89T7gzUCuEXOuiM3MKiTphcBNEXFl3nUWTrA8ZmaNeZIUvyy5jfXwQ+DXmYdWRMSKQctLWgS8DXj+OPtxRWxmnfQr4K9KbuPt8OuImBljld8G9gSulASwK3C5pAMj4pZBK7kiNjOrSERcDew0d1/Sz4GZiNgwbD1nxGbWSQI2K3kbuQ/pPOA/gL0lrZN0YpGyukVsZp0kJl/BRcRLRjy/R57tuCI2s06aaxG3gaMJM7OGuUVsZp1URzRRlbaU08xsLI4mGiLpdEmfLLmNZ0v6ceb+3pKukHSfpNdL+oikd5Qv7aP2+1ZJZ1e93TpJOk/SsSW38fDfUNLuku6XtKCaEvbd336S/n1S27fmzLWIy9zq0rqKWNJLJc2m/6DrJX1Z0iFVbT8ivh0Re2ceejNwaURsFREfiIi/jIh3ltmHpEMlrevZ799HxF+U2e6Afb0qnQHqvT2PH5s+/vGK9rMfsD9wURXbA4iIGyJiy4h4qKpt9tnHVcDdkv4o7zqSLpX06/QzuEHShZKWZJ4/UNKXJN0t6U5J35N0Qs829pT0G0kfqvDlZLe/yWdM0uZpOf9N0tbpF15IOi6zzML0sT3S+x9P7x+YWeZJkqJnX4dL+lbaWLld0jfTYb6NqqP7WlVaVRFLehPwfuDvgZ2B3YEPAcdMcLdPIBnm2GY/A/5MUvZL/pXATyrcx2uAc6OdlwU/l6T843htRGwJPBlYTDLJC5IOAr4OfBN4ErA98D+BI3vWfyVwF3C8pMfk3Wn6JXDoOAVNt39hWs7nR8S96VN3An874ojjTuBdQ7b9YuAzwCdIRpHtDPxvIPcXm7WoIpa0DfC3wF9FxIUR8V8R8WBEfD4i/mbAOp+RdIuke9Jv7KdlnjtK0jXpt/hNkv46ffzhloSkrwN/APxL2vp5ctpKeFdmO8dIWivpXkk/k3RE+vgJkq5Nt3+9pNekjz8O+DKwNN3m/ZKW9sYqkl4o6Ydpq+pSSU/JPPdzJXOdXpW+tk9L2mLI23cLcDVweLr+dsDvAReP8X59XEksszp9Td+U9ITM6keSVD5zyz8pXeaetNX46cxzZ0m6MX3P1kh69oC/3x5pi2xhev9SSe9MW3X3SfqaMnO9Fvl7py4FDhunQpwTEXcCnwX2TR/6R2BlRLw7IjZEYk1E/GnPqq8E3g48yAQrLSVzH3yepIH3goj4r8zTXwEeAF4+ZBMrgf0k/X6fbQt4L/DOiDg7Iu6JiN9ExDcj4tXVvYpiHE1MxkHAFsDnxljny8BeJEMOLydp+cw5B3hNRGxF8k/09d6VI+K5wLdJWz8RsUkLMj1k+wTwNyStjecAP0+fvg04GtgaOAF4n6RnpP8IRwI3p9vcMiJu7tnuk4HzgDcAOwJfAj4vafPMYn9KMg/qnsB+wKtGvBefIPnnBzieJEL4755lhr1fAC8D3gnsAKydez79ctkT+HFm2XcCXwO2JWkp/XPmue8DBwDbAZ8CPjPiiyTrpSTv507A5kC2Qi30946Im0gqxL3T1/NSSVflKUz6RfAi4Iq00jsIWDVinWeTvCfnAxfwyN+lao8heU9+DbwwIn7V83wA7wBOkzToSPyXJEegf9fnub2B3RjxepviaGIytgc2RMTGvCtExEcj4r6I+G/gdGD/tGUNyT/eUyVtHRF3RcTlBcp0IvDRiFidtgRuiogfpfv+YkT8LG0RfZOkUurb8uvjz4Avptt9EPgn4LEkrdg5H4iIm9MW2edJKrZhPgccmr7+V5JUzJsY8X6Rlulb6fNvAw5SMgH24vT5+zLLPkgS6yyNiF9HxHcy+/lkRNwRERsj4j0kFUY2lx/mYxHxk7RSuSD7ukv+ve+bex0R8amI2G9EOT4g6W7gSmA98CaSL53fSu8Pswz4ckTcRfJFdKSknUasU8RWJF8MK9P35FEi4mLgdmDY+Yn/A+wuqTde2T79Oer1NsIV8WTcAezQk3MOJGmBpDPTuOBeHmmpzh3Kvgg4CvhFegh9UIEy7UaSv/bb/5GSvqvkZM3d6b5GXjIltRT4xdydiPgNcCOwS2aZ7ExOvwS2HLbBtOL6Isnh8A4R8W895R31fpGWYW5795Pkh0uBu9OHt8os+2aS/4XvpRHLn2f2dXIa29yTvjfbkP+96fu6K/h7b5V5HXm8PiIWR8QuEfGyiLidJPP9DbBk0EqSHgscR9paj4j/ILmKw0uHrHP33A04BPhC5rFTh5RxA8nRz0pJhw9Z7u0kX6x9j0rSSvyd6U2Zp+5Ifw58vU1zNFG9/yA5xMrbPeqlJCfxnkfyj75H+rgAIuL7EXEMyWHsv5K0rsZ1I8m0d5tIs8bPkrRkd46IxSTxwtyHeNQJrZtJWpNz2xNJpX9TgTJmfQI4Gfi/fZ4b+n6ldsuUaUuSaOHmNG75GcmJKwAi4paIeHVELCU5EfahNDd+NnAKSbSybfre3NOznyIK/70lLSWJObLRytgi4pckn9MXDVnsj0niqg+lefYtJF+wA+OJtMJfnL5X3wGOzjx25ogyXQi8Glgl6Q8GLLMa+Cnwv4Zs6mMk7+sfZx77Mcn/wLDXazm0piKOiHtIzsZ+UEnXq0WSNktbnv/QZ5WtSDLQO4BFJDkX8HBXnpdJ2iY99L8XKNJF6hzgBEmHSfotSbtI2ofkn/oxJId8G9NDuuxE0bcC2/cc9mddALwg3e5mJJXnfwNl+7t+k+Q6Wv/c57mB71fGUZIOSbPqdwKXRcRcK/lLwMMndCQdJ2nX9O5dJF8+D6X72Ujy3iyU9L9JKqayyvy9DwW+PujwfUxvBl4l6W8kbZ/uf39J56fPLwM+CvwOSaxyAHAwcICk36lg/48SEecBrwUuknTwgMXelpZ90DY2ksQ9p2QeC5JI5h1KTk5vnf4fHCJp4OTpdXE0MSER8V6SP/zbSf6RbyT5gP1rn8U/QXJ4fxNwDfDdnudfAfw8PYz9S4afOR5Unu+RnogjadV9E3hCRNwHvJ6kQr2LpLV2cWa9H5GcjLs+Pbxc2rPdH6fl+WeSw8s/Av4oIh4Yt4w9242IuCTNlXuNer8gyTNPI4kknkly8m7OCuBlaesd4H8Al0m6n+S1nxQR/wl8leQE0k/S/f2aTORRQpm/98uAj8zdSSvtQl0WI+Lfgeemt+sl3Uny3nxJ0i7AYcD70yOGudsakh4My4rsM2e5VpJ8oX9RmX7Bmef/DfjeiM2cR08eHBGrSM5p/DnJkdytJN3dKutPXlSbek0oWtnt0+qmZODHuoh4+5BlPgVcEBH9vhinUtoKXRERRc4R2BTbR4pzSm7jEFgT412hoxDPNWGViYiBJ5ymVSRXVHAlbI1yRWxmnTRvZl9TMorsLGABcPaoM7jWXhHxqqbLYDaONs2+VrgiVjI+/YMkZ+HXAd+XdHFEXFNV4czMipovLeIDgZ9GxPUAafecY0jOWPclbRtJ/3+bfndlft92wOPVeuZjBwzQqqJzW0etuTXfWIqB7+0UW/MrNkTEjkXXnxctYpJO6NluR+uA3x2+ylKSHjA2/S7M/P4nAx6v1uzeZ/R/4rCJ7bL19J7luZYb+N5OMa19ZHRp15WpiPuNhHpUXzhJy4HlALtvBr942v6jN7z2yhLFsuoNqnyrraC19rT+T6x95Nc4uX0VStX0ngHvU971M+9zHNDd93O+RBPryAx5JZlN6ubehSJiBUmHdmYWyZ2WzawW8yWa+D6wl6Q9SUYzHc+QiUvMzOrUpoq41Mg6SUeRXDFjAcl0kP3mLH3YzCLFbN7JDkft2/HFFMgbR9STMWc5wigfYTQdW2htuVFt+0vxtZJleHwbRtZFxJdIJnsxM7OC2pJlm5mNRcBmZWu43JehKMcVsZl1kgQLXRFPVhwwuhscOEueDvXkwlnZfLRrefGg11Z1JjywO+GQdaaJBJsNuz71FGnVfMRmZl3U2haxmdkwlUQTNal1Yvgqu69VzRHGJNUfTRThCCOfbByRJ77oXSevst3XZhYqZhePXm5oGe5oQfc1M7OpJZIRDi3gitjMuqlFk004mhiD44tJc4RRt2G9S5oemVc6mthcMVt4Es20DDc7mjAzK65FLeKWFNPMrICW1HCOJibAEUYV6p+YfpAuRRHDlI0i8sobWZSOJrZQzO5edO20DNfVE014QIeZddNcNFHmNmoX0kcl3SbpB5nH/lHSjyRdJelzkkZ2onNFbGZW3MeBI3oeWw3sGxH7AT8B3jJqI66IzaybamgRR8S3gDt7HvtaRMxNF/RdkqsXDS+qM+LmOEuugrPkutWVJcMZ5TLiCuqb9AKmGzIPrUgv//bIMtIewBciYt9HrS99Hvh0RHxy2H5ack7RzGxM1XRf21D0y0DS20gm0jx31LKuiM3MKiZpGXA0cFjkiB1cETcoz5zKji9G+ZMcjw+KL3qfKyfvIXvbI4y85a8vwhhUABqp4SQdAZwC/H5E/DLPOq6Izay7Jjzpj6TzgEOBHSStA04j6SXxGGC1JIDvRsRfDtuOK2Iz66YaWsQR8ZI+D58z7nZqrYjX/GoJWrt85HLTfPmVuvmSUOMYFkH0W8aqNqk5kIsVhtY0Nd2P2MysYSMr4gFD+LaTtFrSdenPbSdbTDOzMdUwoKOyoo7qWSHpOcD9wCfmOixL+gfgzog4U9KpwLYRccrInWlpwOhoIssxRbU2jTDy9iYYdJjfRr3RRLODQAZpe88KqCKOKDmgYxvF7CHlSqAvTcmkP/2G8AHHACvT31cCx1ZcLjOzclrUIi66q50jYj1ARKyXtFOFZTIzK69FJ+smXkxJy3k4j9hm0rszM2udohXxrZKWpK3hJcBtgxZMJ8hYAXMZ8WjOhSdncHe4nuuV5bxMejsUycLzrXNa5n07g8m9Z8OuLTetGh+B16KrOBftvnYxsCz9fRlwUTXFMTOrSJcy4gFD+M4ELpB0InADcNwkC2lmVkhXMuIBQ/gADqu4LA/Lc1js+GLT96nq92PT7fXfdjtH8xXpvjZ4new7U2VM0Xu4PmiUWltiChuuJd8XZmZjalFG7IrYzLqpRd3Xar1U0qCRdb2HV4POomYPl3vjC0cV02uyEcakRgDWM4fxJLU9ttB7yo1qm9lJMfuikmX4SD0j61ryfWFmVkBLajjPvmZm1rB6r+L8eMXsy9MdD+nEXXYeU8cU7bRp3NSWiYam5yrSRUxzfFE6mthZMTuoz1feMpzlaMLMrLgWnaxrSTHNzMbkiricsnHEJAc62ORs+jd85PErMwMl9meaB5FMVxwxzbFDbVrSj9gn68zMGjaVLWIzs9IcTZiZNcwV8WhVz1U6aKKgYXmxs+T2uZJN51Pef+DkOpPs/lY2C66/m9u8nCioRRWxM2Izs4a15PvCzKyAlvSaaG1FPOzwalCc0a3L/3TboKjoqrV9H+6j/yH/lT1zKxfrDpcn9hgWOeSJI8pPNDTw/2DQpFpdiyxaFE20pJhmZmNyRWxmNgUcTVSjc4dLVsp+B2x6Pxg8R3U/j+5lMTrCeHR8kWcO5Ly9NvJenmny8vZQ8v9k9aa+IjYzK8TRhJlZw1wRN6vIYBFfObq7No0Z8h1+Z5frHUSyqSITEg2KHcoN9Hh0j5Dqegm1Mo5o0cVDPaDDzKxhnWwRm5m1KZoY2SKWtJukb0i6VtIPJZ2UPr6dpNWSrkt/bjv54pqZjWFhyVuNxRxlI3ByRFwuaStgjaTVwKuASyLiTEmnAqcCp0yuqMUMm+xk3Gvj9ebIzozbZ5I56vAsObvPspPb98+Sq3wtvVo5Gq9LLeKIWB8Rl6e/3wdcC+wCHAOsTBdbCRw7qUKamY1t7mRdmduoXUgflXSbpB9kHhs7LRjrZJ2kPYCnA5cBO0fEekgqa2CnAesslzQrafb2X46zNzOzqfdx4Iiex04lSQv2Ai5J7w+Vu+EuaUvgs8AbIuJeSbnWi4gVwAqAmccr8u6vDkWujbfJ+p7PeKrk+RsM66bYG1vMyXvIP2j9Ry83OsLIH18MG8E3+dF5Uz0ar4ZoIiK+lTZQs44BDk1/XwlcyojYNlcxJW1GUgmfGxFzf91bJS2JiPWSlgC35Sq5mVldmsmIN0kLJPVNC7Ly9JoQcA5wbUS8N/PUxcCy9PdlwEXjl9fMbEKqyYh3mItW09vySRQ1z/fFwcArgKulhy9y/lbgTOACSScCNwDHTaKAZQ07JBq314S1U94Iqex81ZuOxit3KF5fD4zJabxHRTXRxIaImBlznbHTgpHFjIjvkLykfg4bs4BmZl03lxacSc60oCW97MzMxlTDyTpJ55GcmNtB0jrgNAqkBYqoryPDzOMVsy+vbXeVqyK+cO+KZtV1uayy0UTV8vT8GHaV87KKxBR6D2sKxAIPm9lHMXtO0bXTMhxSrgx5uUVsZt3UpZF1ZmY2WS35vjAzG1OLWsTOiCtSJD92Xjy95mOWnHcEYfZzW/X7tGmX0pIZ8dMUs58qVx4d4IzYzKycllyhwxWxmXVTi6KJlhSzXkUmMvEoPStybbxpkjcmqSu2mU9cEZtZN7lFbGY2BVqSEdfaa0JaGpBMXtT4hCAVyBNBDHududZ3z4rGzcceFHkNi2Diq5nXk5mNN+8lx7S2ZK+J/RSzXyy6dlqG3d1rwsysuBZFEx5ZZ2bWMA/omIBhV44et0eFo4n2cIQxWLEIo2Q0cYBidnXRtdMy7ORowsyslGjJyTpXxGbWSSF4qCU1nDNiM7OG1fp9sebWJeg9afe1Ydlnyy/A1IWueWZVGjbqUIcPyo9L/h+1qEXckmKamY0nBBsXlD3o/00lZRnFFbGZdVJIPLSwbBX3QCVlGaW5irjl8UNReWKLbBe3vF2i3M2teUXm6S0yUVB2uTZ2ZavTQwva0W3CJ+vMzBo2skUsaQvgW8Bj0uVXRcRpkvYEzge2Ay4HXhER9bTjzcxGCMRDLZn1Z+TIOkkCHhcR90vaDPgOcBLwJuDCiDhf0keAKyPiw8O39cikP3nN9x4IvgRTt00ywhi0/jTb9LWdUWpU2/4zC+Ors1uWKs8S3VPLyLqR0UQk7k/vbpbeAngusCp9fCVw7ERKaGZW0EMsLHWrS649SVoArAGeBHwQ+Blwd0RsTBdZB+wyYN3lPNwM3qZcac3McmpTNJGrIo6Ih4ADJC0GPgc8pd9iA9ZdAayAuWgicVrOQ6XT35NrMU4/Od9y80He+V6tGWUnB2r7JZmG2fS1zR9jtb0j4m5JlwLPAhZLWpi2incFbp5A+czMCmlTi3hkRixpx7QljKTHAs8DrgW+Abw4XWwZcNGkCmlmVsRDLCh1q0ueFvESYGWaE/8WcEFEfEHSNcD5kt4FXAGcM86Oz8h5SFVlhNHG+CJvr5FhvSvyHAo7vrCuCcTGlrSIR1bEEXEV8PQ+j18PHDiJQpmZzSeea8LMOinJiNtRxbWjlGZmBbTlZN3UV8RVZsnuCrcp58L5VN0dMM/6vfvM001t2Oi5suu3UZt6TUx9RWxmVkRAa07WefY1M7OGjZz0p0pPk+K8HMtNarRQ3q5webUxwsg7iZBji8GysUFd71OeLoh5o4W8/19NRxX7U+5S9k+ZWRQfm927VBkO0tpaJv1xNGFmneSM2MxsCrgiHkPvoVKVk5pUHUdkTetoviJzGD9qGx6NN9C4vR6qeJ/ybOOqteX20XQUUbU6WsSS3gj8Bcm5wauBEyLi1+NuxyfrzMwKkLQL8HpgJiL2BRYAxxfZ1lS0iM3MqlbTXBMLgcdKehBYRMFZKKey10TWJOdbzRNbZAeUTDTmqCnC8KWXuqvIZZeGGfS/V1eEUbbXxJNntooPzJbr8HCkLv0FsCHz0Ip0jnUAJJ0E/B3wK+BrEfGyIvtxi9jMOqmijHjDoC8DSdsCxwB7AncDn5H08oj45Lg7cUZsZlbM84D/jIjbI+JB4ELg94psyC1iM+ukGnpN3AA8S9IikmjiMGC2yIamviKuerRQVp4JhfLmwmWz5LomJCoy0by7snVL09lvnSZ5si4iLpO0Crgc2EhygYwVw9fqb+orYjOzIuqYjzgiToPyPQpcEZtZJ3mIc8tlo4W8kcMku7ZlVTmaLxs/DIssss/l7f42KM5whDE5ed/bQX+bSXYVteFcEZtZZ7lFbGbWoE5dxbktqpwoKKuuyKFKeXtgFOlBMXCZnKO6rHnZCGPY5ETZ54r0Xmq6F4YvHmpmNgXaEk3kHlknaYGkKyR9Ib2/p6TLJF0n6dOSNp9cMc3MumucFvFJwLXA1un9dwPvi4jzJX0EOBH4cMXlK6TsIJAqrxw9zbIRxrDXPCjCqGLeY2tW3p4WRSKHvANHJhVntKn7Wq4WsaRdgRcAZ6f3BTwXWJUushI4dhIFNDMrYq4iLnOrS94W8fuBNwNbpfe3B+6OiI3p/XXALhWXzcyslLb0mhjZIpZ0NHBbRKzJPtxn0b4TG0taLmlW0uxdBQtpZtZleVrEBwMvlHQUsAVJRvx+YLGkhWmreFcGzEyfTqK8ApKJ4Ssp9ZSoa9L4Ogwrf94sOY9h3dw86q4dqh6BN6lubm3qvjayRRwRb4mIXSNiD5LrMX09nYX+G8CL08WWARdNrJRmZmNqU0ZcZmL4U4A3SfopSWZ8TjVFMjOrRlsq4rHa7RFxKXBp+vv1wIHVF2lypmFSkzbGGYPiiPjq4PLrcE/603ZF/lZ5Rljm/z8s91lp0xBnXyrJzKxh7UiyzczG1KaTde0oZUWavuwS5Isjpi2+GFSG0w9/5PehI/MGRBi98cUmy52Sv3xWrzZN8NSWkXXzqiI2s/mjTUOcXRGbWWe1pSJWRH1jLKSlAcuB5ucqzWuSPS2mIXaYlCI9LQbJRhiPWt8RxtQqH2GcsSYiZoquvWRmaSybfU2pErxbp5cqQ15uEZtZJ7Wp+5orYjPrJPea6JCqL8FUZRxRZe+KuuZgHjTQo1c2ghgaZ7y7/7bb0gNj2KWK2m7Q6xkWWWz6/1ZeWzJiD+gwM2uYW8Rm1knuvmZm1rA2naxrrPtaXm3p5pZVNkuuultbnix5WEZcV/5cede2MZYBpjpL7rLBmXG57ms7zuwex8yW+6Oeo9e6+5qZWVFtiiZ8ss7MrGG1toifynrOSw9z8x6+570kd5dUHRPkWSfvdgeVbdj6ebedp2tbb7RQJM4YuP+1jjC6pE0tYkcTZtZZrojNzBrUpl4TtVbE17CE/cfsNdEW2Qil6tF406TpiYqGzWE8qHdE3vgid8zx7v4Pb7L/jo2Sm6TBI/BqLkiD3CI2s07yXBNmZlOgLRlxrQM6ZhYpZvdOdzzBy61MU48Kz2dcTN5BIINU2ZtiotwDYyCtpdRgisUzvx3PmT2zVBk+rz/1gA4zs6LadLIu14AOST+XdLWktZJm08e2k7Ra0nXpz20nW1Qzs+kiabGkVZJ+JOlaSQcV2c44I+v+ICIOyDTTTwUuiYi9gEvS+2ZmU+MhFpa65XAW8JWI2IdkCuVri5QzV0Ys6efATERsyDz2Y+DQiFgvaQlwaUTsPWw72Yx46P5quly3s+TpVTYjHqQ12XGveZgll82It57ZKw6cfX+pMlyioweWQdLWwJXAE6Pkyba8LeIAviZpjaS5jsA7R8R6gPTnTmUKYmZWpbkhzmVuwA6SZjO37ECIJwK3Ax+TdIWksyU9rkhZ856sOzgibpa0E7Ba0o/y7iAt+HKA3TcrUEIzs4IqOFm3YUirfCHwDOB1EXGZpLNIItp3jLuTXBVxRNyc/rxN0ueAA4FbJS3JRBO3DVh3BbACkmhi3AKWNWyU26DRcE0YtP9pG5lX5XXyhik7CdEgRa6ZNxUGjObbxDyMLxq2DlgXEZel91dR8FzZyGhC0uMkbTX3O/B84AfAxcCydLFlwEVFCmBmNglzI+smdbIuIm4BbpQ0d+brMOCaImXN0yLeGficpLnlPxURX5H0feACSScCNwDHFSmAmdkk1DQN5uuAcyVtDlwPnFBkIyMr4oi4nj5Xto6IO0i+ARrReyg/6BB+2KF903FEXaqME7Lr1xVTDDOoPHUZFHU0Em3kiS9gXkUYk66II2ItUHrkna/QYWbWMA9xNrNO8hU6Sho8P+kjh4G9kUOeOYDnSxQxLCYoGydMQxwxSNmYIs9VoHuXK33l6Jwq3d48iTCCSrqv1WIqK2Izs/I8H7GZWaPaFE34ZJ2ZWcNa1SLOfR2wnNe6akOWnLcs2dfSRDeuaVNlt7YimWzV3demtjvclOfIbWkRt6oiNjPLq00Tw7siNrNOatPFQxu7Zt0kZbu5ZeOM3nmOy060M00RxjBFJg4q2zVtmru5DTIowuiNBarumjYvFIgwys5HvPnM78QOsxcXXR2A9XpiLdes88k6M7OGtaPdbmY2pjZ1X+tkNJE17LJLeUbjDVp+2gybW7nKOY3LTvozrAfDNEUYZUfmOb4oKBNhlI0mFs7sH4u/96VSxbljwa61RBNuEZtZNwVs3NiOFrEzYjOzhnU+msjKe3XovJHFNEcVg5SNKSY5H/G09rSY5AAZxxaD6fBy0cSCZxwQi77z/0qV4f7H7ehowsysqAjxUEuiCVfEZtZNgSvivnal//j1CY5XzxtHZOU9fJ+mq0DnNW5PkV7TGh9MUu/rzBNVDOpBkdewOZAtnwix8cF2VMQ+WWdm1jBHE2bWUeI3D7WjimvdQLBaAAANrklEQVRHKc3MxhWAM+IRhuXCg+ZBLZAl553DuEiWnNXGiYKKzHWclbdbV94suUuZc95c2CPwJijkitjMrFEBbFTTpcgl18k6SYslrZL0I0nXSjpI0naSVku6Lv257aQLa2bWRblG1klaCXw7Is6WtDmwCHgrcGdEnCnpVGDbiBgaHsw8WTH7L32239tVZ8AcwpvEDMMu41KyO1zZmKLIIf80RRbDVDmBUK9B0USXJwoaxDFF+ZF12ncmuGC2XCGepukYWSdpa+A5wKsAIuIB4AFJxwCHpoutBC5l6q9gZWbzRgAbmy5EPnky4icCtwMfk7Q/sAY4Cdg5ItYDRMR6STv1W1nScmA5wO59lzAzm4AWVcQjowlJM8B3gYMj4jJJZwH3Aq+LiMWZ5e6KiKE58aBo4lH7HHDGOU4ecrj2/NHbfZQc7feqY4px44jeKKBshFE2DhkUTRQZfTZNsUJRk4oj8o6sm2Svi6Z7dJSOJp46E3yyZDTxzHqiiTwn69YB6yLisvT+KuAZwK2SlgCkP2+bTBHNzAoI4MGSt5qMrIgj4hbgRklzE1geBlwDXAwsSx9bBlw0kRKamRURwEMlbzXJ22viAOBsYHPgeuAEkkr8AmB34AbguIi4c9h28kYTU2VIfDEothh2yN+WnhJ1RBhVDwiZJmUjiyJRwCQnCmoipigdTewzE6woGU38/pT0mgCIiLVAv8IcVm1xzMwq0qKTdZ59zcysYR7ibGbd1KIWcb3XrGtjRpxTkcm/85jmHHmYIiPwJnk9vH7brXrbRTSdJU9zl7fSGfFeM8FZJTPiF0xRRmxm1jotahG7Ijaz7qqhIpa0AJgFboqIowttw9FEvbKHboNihyKH9dMcYZSNKbKmLVqYlCKRRdcmCiodTTxpJviHktHEi0ZHE5LeRNKrbOuiFbF7TZhZN9Uwsk7SrsALSMZZFOZowsy6aW5k3WS9H3gzsFWZjbgirlmew8crD5/eQ8wiI+6qjGC6GkVUIW/Pna5FGANVc7JuB0nZfGNFRKwAkHQ0cFtErJF0aJmduCI2Mxtsw5CM+GDghZKOArYAtpb0yYh4+bg7cUZsZt001yIucxu2+Yi3RMSuEbEHcDzw9SKVMLhFPJX2+2q+5a46vP/jVc9hPKltDTNoQEfeXhOTGhBSlyLzOw+TJ46Y5KRBjXA/YjOzKVBTRRwRl5JcLq4QV8Rm1k0tahE7IzYza5hH1s0DebLkaRuZV+TaeG3MgotoYqKgJpQeWbfbTPDGkiPrTvakP2Zmxc2NrGsBV8Rm1k31jKyrhKMJAwbHF9Nu3GvjzZf4AtofYZSOJnaZCV5TMpo4rZ5owifrzMwa5mjCzLqpRd3XXBEbUH40XxXq6MUx7HB9PsUWeRS57NEkL8M0NlfEZmYNa1GviZEZsaS9Ja3N3O6V9AZJ20laLem69Oe2dRTYzKxrRraII+LHwAHw8LWZbgI+B5wKXBIRZ0o6Nb1/ygTLalNgkhHGpOKINkYOVVwSathkSXlko4VWznXcou5r4/aaOAz4WUT8AjgGWJk+vhI4tsqCmZmVNsFpMKs0bkZ8PHBe+vvOEbEeICLWS9qp3wqSlgPLAXbvu4SZ2QS06GRd7haxpM2BFwKfGWcHEbEiImYiYmbHbcYtnplZQTVcPLQq47SIjwQuj4hb0/u3SlqStoaXALdVXzxrq2yWPChfrCITzrONYdfGm9b8OG+58o4azLO93hw5Ty7cmwkXWcfGy4hfwiOxBMDFwLL092XARVUVysystLmTdWVuNcnVIpa0CPhD4DWZh88ELpB0InADcFz1xTMzK6hFGXGuijgifgls3/PYHSS9KMyGKjIqK2tY/DBoNN6wOKJLykYrZScGmvrr3HWpIjYza50ujawzM7PJcovYGpN3tFaRmGFQTNEbc+TZ9rT2rKhCkd4Zw0xVr4kWjaxzRWxm3dS1k3VmZq3jitisfpPqKdHEHMZVTPpTpSITCA2aNGjqe1o0wBWxmXVTi3pNuCI2s+5qyck6X8XZpl7e3hVVqnJwyCRjhbquUF124EdW/gE+Ja/ivNVM8PSSV3H+dj1XcXaL2My6qUUn6zygw8ysYW4Rm1k3tehknTNia5Um8uK8BnXxarrrWZ2qzJLhjHIZ8aKZYJ+SGfEVzojNzMpxRmxmZnm4RWytUnZu40kqclg+aJ3eOCPPtrsQgWw6Gq/sxmhNi9gVsZl1U4tO1rkiNrNuatE0mLX2mpCWBiwHPNGHVW+ae1TkMSxayBNh5I1Gmo4w8kc4JXtNbD4TPL5kr4kb6+k14ZN1ZmYFSNpN0jckXSvph5JOKrotRxNm1l2TPVm3ETg5Ii6XtBWwRtLqiLhm3A01VhFnDyN7Y4phz5kNkuezMs3xRdlooenIYepM+GRdRKwH1qe/3yfpWmAXoD0VsZnZRFVzsm4HSdmgeUVErOhdSNIewNOBy4rsJFdFLOmNwF+QvLSrgROAJcD5wHbA5cArIuKBIoUwM6tcNf2IN4w6WSdpS+CzwBsi4t4iOxl5sk7SLsDrgZmI2BdYABwPvBt4X0TsBdwFnFikAGZmbSVpM5JK+NyIuLDodvJGEwuBx0p6EFhEkos8F3hp+vxK4HTgw0ULklU2F3bGbF3Wlm5qg+QtV+nST3hknSQB5wDXRsR7y2xrZIs4Im4C/gm4gaQCvgdYA9wdEXMvcx1JSG1mNh3mTtaVuQ13MPAK4LmS1qa3o4oUdWSLWNK2wDHAnsDdwGeAI/ss2ndkiKTlzI3iYJsiZTQzK2aCI+si4juAqtjWyJF1ko4DjoiIE9P7rwQOAo4DHh8RGyUdBJweEUOn6ciOrCui6pjBEYYNMs3d3Ko0DfHF4Kil5Mg6zQQqObIupmdk3Q3AsyQtSjORw0j6yX0DeHG6zDLgoskU0cysoCh5q0mejPgyYBVJF7Wr03VWAKcAb5L0U2B7ktDazMzG1NikP8M4JrBpMl9iimGaiDDOgPLRBCWjCaYnmjAzswlyRWxm1rBao4mlUswFE2Wv9ur4wqaNI4xqI4zy0cQzA75bshSb+yrOZmbFteeida6Izayj2nPROlfEZtZRbhH3tZ4lnFFiZJ3ZtCmbC296+fj2Z8x5zv1Mw2i+aeMWsZl1lKMJM7OGtacibqz72jBlu7ZluZubNa2KyKFrEUY+ZSf92S/g4pJl2NMj68zM5gNHE2bWUY4m+u9Muh34L2BDbTudTjvg92C+vwfz/fXD6PfgCRGxY9GNS/tGch2LMp7avZF1EbGjpNk6Xtg083vg92C+v36o4z1oT4vY0YSZdVR7BnT4ZJ2ZWcOaaBGvaGCf08bvgd+D+f76YeLvQXuiiVpP1pmZ1UXaJ8pfwe2Q7p2sMzOrT3taxK6IzayjfLKuL0lHSPqxpJ9KOrXOfTdB0m6SviHpWkk/lHRS+vh2klZLui79uW3TZZ00SQskXSHpC+n9PSVdlr4Hn5a0edNlnBRJiyWtkvSj9LNw0Hz7DEh6Y/o/8ANJ50naYj59BkaprSKWtAD4IHAk8FTgJZKeWtf+G7IRODkingI8C/ir9DWfClwSEXsBl6T3u+4k4NrM/XcD70vfg7uAExspVT3OAr4SEfsA+5O8D/PmMyBpF+D1wExE7AssAI5n4p+BuWiizK0edbaIDwR+GhHXR8QDwPnAMTXuv3YRsT4iLk9/v4/kH3AXkte9Ml1sJXBsMyWsh6RdgRcAZ6f3BTwXWJUu0tn3QNLWwHNIzxpFxAMRcTfz7DNAEoM+VtJCYBGwnlo+AxtL3upRZ0W8C3Bj5v669LF5QdIewNOBy4CdI2I9JJU1sFNzJavF+4E3A79J728P3B0Rc5/0Ln8WngjcDnwsjWbOlvQ45tFnICJuAv4JuIGkAr4HWMPEPwNuEfejPo/Ni75zkrYEPgu8ISLubbo8dZJ0NHBbRKzJPtxn0a5+FhYCzwA+HBFPJ5lrpbMxRD9p/n0MsCewFHgcSUTZq6ufgZHq7DWxDtgtc39X4OYa998ISZuRVMLnRsSF6cO3SloSEeslLQFua66EE3cw8EJJRwFbAFuTtJAXS1qYtoi6/FlYB6yLiMvS+6tIKuL59Bl4HvCfEXE7gKQLgd9j4p+B9nRfq7NF/H1gr/RM6eYkYX3ZWZunWpqFngNcGxHvzTx1MbAs/X0ZcFHdZatLRLwlInaNiD1I/uZfj4iXAd8AXpwu1tn3ICJuAW6UtHf60GHANcyjzwBJJPEsSYvS/4m592DCn4G57mvTnxHX1iKOiI2SXgt8leSs6Ucj4od17b8hBwOvAK6WtDZ97K3AmcAFkk4k+ZAe11D5mnQKcL6kdwFXUH4I1DR7HXBu2gC5HjiBpBE0Lz4DEXGZpFXA5SS12xUkw5u/yEQ/A+1pEXuIs5l1krRHwNtLbuXVvlSSmdl84CHOZtZR7YkmXBGbWUe1Z64JV8Rm1lHtaRE7Izazjpp897WqJjJzRWxmVkCVE5k5mjCzjpp4NPHwRGYAkuYmMrtm3A25Ijazjpr4ybp+E5n9bpENuSI2s45a/1U4fYeSG9lC0mzm/oqImLvoaWWTV7kiNrNOiogjJryLyiYy88k6M7NiKpvIzC1iM7MCqpzIzJP+mJk1zNGEmVnDXBGbmTXMFbGZWcNcEZuZNcwVsZlZw1wRm5k1zBWxmVnDXBGbmTXs/wNlKZhjqAmyTwAAAABJRU5ErkJggg==\n", 478 | "text/plain": [ 479 | "
" 480 | ] 481 | }, 482 | "metadata": { 483 | "needs_background": "light" 484 | }, 485 | "output_type": "display_data" 486 | } 487 | ], 488 | "source": [ 489 | "df = pd.read_csv(\"salinas_pca_70.csv\")\n", 490 | "X = df.loc[:, ['PC-'+str(i) for i in range(1,71)]].values\n", 491 | "# Separating out the target\n", 492 | "Y = df.loc[:,['class']].values\n", 493 | "plot_gt(X, Y, k_value=7, w='uniform', q='PCA + KNNC')" 494 | ] 495 | }, 496 | { 497 | "cell_type": "code", 498 | "execution_count": 52, 499 | "metadata": {}, 500 | "outputs": [ 501 | { 502 | "data": { 503 | "image/png": "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\n", 504 | "text/plain": [ 505 | "
" 506 | ] 507 | }, 508 | "metadata": { 509 | "needs_background": "light" 510 | }, 511 | "output_type": "display_data" 512 | } 513 | ], 514 | "source": [ 515 | "df = pd.read_csv(\"salinas_pca_70.csv\")\n", 516 | "X = df.loc[:, ['PC-'+str(i) for i in range(1,71)]].values\n", 517 | "# Separating out the target\n", 518 | "Y = df.loc[:,['class']].values\n", 519 | "plot_gt(X, Y, k_value=7, w='distance', q='PCA + WKNNC')" 520 | ] 521 | }, 522 | { 523 | "cell_type": "code", 524 | "execution_count": 54, 525 | "metadata": {}, 526 | "outputs": [ 527 | { 528 | "data": { 529 | "image/png": "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\n", 530 | "text/plain": [ 531 | "
" 532 | ] 533 | }, 534 | "metadata": { 535 | "needs_background": "light" 536 | }, 537 | "output_type": "display_data" 538 | } 539 | ], 540 | "source": [ 541 | "df = pd.read_csv(\"salinas_kpca_70.csv\")\n", 542 | "X = df.loc[:, ['PC-'+str(i) for i in range(1,71)]].values\n", 543 | "# Separating out the target\n", 544 | "Y = df.loc[:,['class']].values\n", 545 | "plot_gt(X, Y, k_value=7, q='kPCA + KNNC')" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 55, 551 | "metadata": {}, 552 | "outputs": [ 553 | { 554 | "data": { 555 | "image/png": "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\n", 556 | "text/plain": [ 557 | "
" 558 | ] 559 | }, 560 | "metadata": { 561 | "needs_background": "light" 562 | }, 563 | "output_type": "display_data" 564 | } 565 | ], 566 | "source": [ 567 | "df = pd.read_csv(\"salinas_kpca_70.csv\")\n", 568 | "X = df.loc[:, ['PC-'+str(i) for i in range(1,71)]].values\n", 569 | "# Separating out the target\n", 570 | "Y = df.loc[:,['class']].values\n", 571 | "plot_gt(X, Y, k_value=7, w='distance', q='KPCA + WKNNC')" 572 | ] 573 | }, 574 | { 575 | "cell_type": "code", 576 | "execution_count": null, 577 | "metadata": {}, 578 | "outputs": [], 579 | "source": [] 580 | } 581 | ], 582 | "metadata": { 583 | "kernelspec": { 584 | "display_name": "Python 3", 585 | "language": "python", 586 | "name": "python3" 587 | }, 588 | "language_info": { 589 | "codemirror_mode": { 590 | "name": "ipython", 591 | "version": 3 592 | }, 593 | "file_extension": ".py", 594 | "mimetype": "text/x-python", 595 | "name": "python", 596 | "nbconvert_exporter": "python", 597 | "pygments_lexer": "ipython3", 598 | "version": "3.6.7" 599 | } 600 | }, 601 | "nbformat": 4, 602 | "nbformat_minor": 2 603 | } 604 | -------------------------------------------------------------------------------- /PaviaUniversity_HSI/README.md: -------------------------------------------------------------------------------- 1 | #### This notebook describes dimensionality reduction techiques PCA and KPCA on Pavia University dataset usign python. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dimensionality reduction and classification on [Hyperspectral Image](http://www.ehu.eus/ccwintco/index.php/Hyperspectral_Remote_Sensing_Scenes) Using Python 2 | 3 | ## Authors 4 | 5 | * [**DR.T.Hitendra Sarma**](https://scholar.google.co.in/citations?user=8Frh6IQAAAAJ&hl=en) 6 | * [**Syam Kakarla**](https://www.linkedin.com/in/syam-kakarla/) 7 | 8 | ### Prerequisites 9 | 10 | The prerequisites to better understand the code and concept are: 11 | ``` 12 | * Python 13 | * MatLab 14 | * Linear Algebra 15 | ``` 16 | 17 | ### Installation 18 | 19 | * This project is fully based on python. So, the necessary modules needed for computaion are: 20 | ``` 21 | * Numpy 22 | * Sklearn 23 | * Matplotlib 24 | * Pandas 25 | ``` 26 | * The commands needed for installing the above modules on windows platfom are: 27 | ```python 28 | 29 | pip install numpy 30 | pip install sklearn 31 | pip install matplotlib 32 | pip install pandas 33 | ``` 34 | * we can verify the installation of modules by importing the modules. For example: 35 | ```python 36 | 37 | import numpy 38 | from sklearn.decomposition import PCA 39 | import matplotlib.pyplot as plt 40 | import pandas as pd 41 | ``` 42 | ### Results 43 | 44 | * Here we are performing the the **dimensionality reduction** on one of the widely used **hyperspectral image** [Indian Pines](http://www.ehu.eus/ccwintco/index.php/Hyperspectral_Remote_Sensing_Scenes) 45 | 46 | 1. The result of the [indian_pines_pca.py]( 47 | https://github.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/blob/master/indian_pines_after_pca.csv) is shown below: 48 | 49 | * It initial result is a bargraph for the first **10 Pricipal Components according** to their _variance ratio's_ : 50 | 51 | ![indian_pines_varianve_ratio](https://user-images.githubusercontent.com/36328597/41495831-56fff622-714e-11e8-87ab-731c11d14bab.JPG) 52 | 53 | Since, the initial two principal COmponents have high variance. so, we will select the initial two PC'S. 54 | 55 | * It second result is a scatter plot for the first **10 Pricipal Components** is : 56 | 57 | ![indian_pines_after_pca_with_2pc](https://user-images.githubusercontent.com/36328597/41495958-603d0baa-7151-11e8-9c7c-c7452b2fb6a8.JPG) 58 | 59 | 60 | * The above program resullts a dimensionally reduced [csvfile]( 61 | https://github.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/blob/master/indian_pines_after_pca.csv) . 62 | 63 | 2. The result of the [indian_pines_knnc.py](https://github.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/blob/master/Indian_pines_knnc.py) is given below: 64 | 65 | * The above program will classify the Indian Pines dataset before **Principal Component Analysis(PCA)**. The classifier here used for classification is [K-Nearest Neighbour Classifier (KNNC)](http://scikitlearn.org/stable/auto_examples/neighbors/plot_classification.html) 66 | * The time taken for classification is: 67 | 68 | ![indian_pines_classification_before_pca](https://user-images.githubusercontent.com/36328597/41496231-d2ddac0e-7157-11e8-9c14-29e89685569c.JPG) 69 | 70 | * Then the classification accuracy of indian pines dataset before **PCA** is: 71 | 72 | ![indian_pines_accuracy_before_pca](https://user-images.githubusercontent.com/36328597/41495844-97a3e31e-714e-11e8-8d63-4d786317b239.JPG) 73 | 74 | 3. The result of the [indian_pines_knnc_after_pca.py]( 75 | https://github.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/blob/master/Indian_pines_knnc_after_pca.py) 76 | 77 | * Then the resultant classification accuracy of indian pines dataset after **PCA** is: 78 | 79 | ![indian_pines_accuracy_after_pca](https://user-images.githubusercontent.com/36328597/41495843-9753df04-714e-11e8-9540-0968bdb27a7f.JPG) 80 | 81 | ### Conclusion : 82 | 83 | * By performing **PCA** on the corrected indian pines dataset results **100 Principal Components(PC'S)**. 84 | * since, the initial two Principal Components(PC'S) has **92.01839071674918** variance ratio. we selected two only. 85 | * Initially the dataset contains the dimensions **21025 X 200** is drastically reduced to **21025 X 2** dimensions. 86 | * The time taken for classification before and after Principal Component Analysis(PCA) is: 87 | 88 | | Dataset | Accuracy | Time Taken | 89 | | ------------- |:-----------: | ----------:| 90 | | Before PCA | 72.748890 | 17.6010 | 91 | | After PCA | 60.098187 | 0.17700982 | 92 | 93 | * Hence, the **time** has been reduced with a lot of difference and the **classification accuracy(C.A)** also reduced but the C.A can increased little bit by varying the 'k' value. 94 | 95 | ## License 96 | 97 | This project is licensed under the MIT License - see the [LICENSE.md](https://github.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/blob/master/LICENSE.md) file for details 98 | -------------------------------------------------------------------------------- /assets/Indian_pines_accuracy_after_pca.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/ff81981af4a401d5b55d9946dec20dc73585fe7f/assets/Indian_pines_accuracy_after_pca.JPG -------------------------------------------------------------------------------- /assets/Indian_pines_accuracy_before_pca.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/ff81981af4a401d5b55d9946dec20dc73585fe7f/assets/Indian_pines_accuracy_before_pca.JPG -------------------------------------------------------------------------------- /assets/Indian_pines_classification_before_pca.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/ff81981af4a401d5b55d9946dec20dc73585fe7f/assets/Indian_pines_classification_before_pca.JPG -------------------------------------------------------------------------------- /assets/Indian_pines_varianve_ratio.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/ff81981af4a401d5b55d9946dec20dc73585fe7f/assets/Indian_pines_varianve_ratio.JPG -------------------------------------------------------------------------------- /assets/indian_pines_after_pca_with_2PC.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syamkakarla98/Dimensionality-reduction-and-classification-on-Hyperspectral-Images-Using-Python/ff81981af4a401d5b55d9946dec20dc73585fe7f/assets/indian_pines_after_pca_with_2PC.JPG -------------------------------------------------------------------------------- /indian_pines_pca.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | import pandas as pd 4 | 5 | 6 | from sklearn import decomposition 7 | from sklearn import datasets 8 | 9 | # load dataset into Pandas DataFrame 10 | df = pd.read_csv("D:\Python_programs\ML\Complete_Data_.csv") 11 | 12 | from sklearn.preprocessing import StandardScaler 13 | n=[] 14 | ind=[] 15 | for i in range(200): 16 | n.append(i+1) 17 | for i in range(200): 18 | ind.append('px'+str(n[i])) 19 | 20 | features = ind 21 | x = df.loc[:, features].values 22 | # Separating out the target 23 | y = df.loc[:,['target']].values 24 | # Standardizing the features 25 | from sklearn.preprocessing import MinMaxScaler 26 | scaler_model = MinMaxScaler() 27 | scaler_model.fit(x.astype(float)) 28 | x=scaler_model.transform(x) 29 | 30 | 31 | from sklearn.decomposition import PCA 32 | 33 | 34 | ## Finding the principle components 35 | pca = PCA(n_components=10) 36 | principalComponents = pca.fit_transform(x) 37 | ev=pca.explained_variance_ratio_ 38 | 39 | # *Since the initial 2 principal components have high variance. 40 | # so, we select pc-1 and pc-2. 41 | #--------------------------------------------------- 42 | pca = PCA(n_components=2) 43 | principalComponents = pca.fit_transform(x) 44 | principalDf = pd.DataFrame(data = principalComponents 45 | , columns = ['PC-1','PC-2']) 46 | # Adding lables 47 | finalDf = pd.concat([principalDf, df[['target']]], axis = 1) 48 | 49 | #--------- Bar Graph for Explained Variance Ratio ------------ 50 | plt.bar([1,2,3,4,5,6,7,8,9,10],list(ev*100),label='Principal Components',color='b') 51 | plt.legend() 52 | plt.xlabel('Principal Components') 53 | pc=[] 54 | for i in range(10): 55 | pc.append('PC'+str(i+1)) 56 | #plt.xticks([1,2,3,4,5,6,7,8,9,10],pc, fontsize=8, rotation=30) 57 | plt.xticks([1,2,3,4,5,6,7,8,9,10],pc, fontsize=8, rotation=30) 58 | plt.ylabel('Variance Ratio') 59 | plt.title('Variance Ratio of INDIAN PINES Dataset') 60 | plt.show() 61 | 62 | 63 | #--------------------------------------------------- 64 | # Plotting pc1 & pc2 65 | fig = plt.figure(figsize = (8,8)) 66 | ax = fig.add_subplot(1,1,1) 67 | ax.set_xlabel('PC-1', fontsize = 15) 68 | ax.set_ylabel('PC-2', fontsize = 15) 69 | ax.set_title('PCA on INDIAN PINES Dataset', fontsize = 20) 70 | targets = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 71 | colors = ['r','g','b','y','m','c','k','r','g','b','y','m','c','k','b','r'] 72 | for target, color in zip(targets,colors): 73 | indicesToKeep = finalDf['target'] == target 74 | ax.scatter(finalDf.loc[indicesToKeep, 'PC-1'] 75 | , finalDf.loc[indicesToKeep, 'PC-2'] 76 | , c = color 77 | , s = 9) 78 | ax.legend(targets) 79 | ax.grid() 80 | plt.show() # FOR SHOWING THE PLOT 81 | 82 | #-------------------SENDING REDUCED DATA INTO CSV FILE------------ 83 | 84 | finalDf.to_csv('indian_pines_after_pca.dat') 85 | 86 | --------------------------------------------------------------------------------