├── 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 | "
pix1
\n",
45 | "
pix2
\n",
46 | "
pix3
\n",
47 | "
pix4
\n",
48 | "
pix5
\n",
49 | "
pix6
\n",
50 | "
pix7
\n",
51 | "
pix8
\n",
52 | "
pix9
\n",
53 | "
pix10
\n",
54 | "
...
\n",
55 | "
pix95
\n",
56 | "
pix96
\n",
57 | "
pix97
\n",
58 | "
pix98
\n",
59 | "
pix99
\n",
60 | "
pix100
\n",
61 | "
pix101
\n",
62 | "
pix102
\n",
63 | "
pix103
\n",
64 | "
class
\n",
65 | "
\n",
66 | " \n",
67 | " \n",
68 | "
\n",
69 | "
0
\n",
70 | "
255
\n",
71 | "
255
\n",
72 | "
255
\n",
73 | "
255
\n",
74 | "
255
\n",
75 | "
255
\n",
76 | "
255
\n",
77 | "
255
\n",
78 | "
255
\n",
79 | "
255
\n",
80 | "
...
\n",
81 | "
255
\n",
82 | "
255
\n",
83 | "
255
\n",
84 | "
255
\n",
85 | "
255
\n",
86 | "
255
\n",
87 | "
255
\n",
88 | "
255
\n",
89 | "
255
\n",
90 | "
0
\n",
91 | "
\n",
92 | "
\n",
93 | "
1
\n",
94 | "
255
\n",
95 | "
255
\n",
96 | "
255
\n",
97 | "
255
\n",
98 | "
255
\n",
99 | "
255
\n",
100 | "
255
\n",
101 | "
255
\n",
102 | "
255
\n",
103 | "
255
\n",
104 | "
...
\n",
105 | "
255
\n",
106 | "
255
\n",
107 | "
255
\n",
108 | "
255
\n",
109 | "
255
\n",
110 | "
255
\n",
111 | "
255
\n",
112 | "
255
\n",
113 | "
255
\n",
114 | "
0
\n",
115 | "
\n",
116 | "
\n",
117 | "
2
\n",
118 | "
255
\n",
119 | "
255
\n",
120 | "
255
\n",
121 | "
255
\n",
122 | "
255
\n",
123 | "
255
\n",
124 | "
255
\n",
125 | "
255
\n",
126 | "
255
\n",
127 | "
255
\n",
128 | "
...
\n",
129 | "
255
\n",
130 | "
255
\n",
131 | "
255
\n",
132 | "
255
\n",
133 | "
255
\n",
134 | "
255
\n",
135 | "
255
\n",
136 | "
255
\n",
137 | "
255
\n",
138 | "
0
\n",
139 | "
\n",
140 | "
\n",
141 | "
3
\n",
142 | "
255
\n",
143 | "
255
\n",
144 | "
255
\n",
145 | "
255
\n",
146 | "
255
\n",
147 | "
255
\n",
148 | "
178
\n",
149 | "
198
\n",
150 | "
193
\n",
151 | "
224
\n",
152 | "
...
\n",
153 | "
255
\n",
154 | "
255
\n",
155 | "
255
\n",
156 | "
255
\n",
157 | "
255
\n",
158 | "
255
\n",
159 | "
255
\n",
160 | "
255
\n",
161 | "
255
\n",
162 | "
0
\n",
163 | "
\n",
164 | "
\n",
165 | "
4
\n",
166 | "
255
\n",
167 | "
255
\n",
168 | "
255
\n",
169 | "
255
\n",
170 | "
255
\n",
171 | "
255
\n",
172 | "
255
\n",
173 | "
208
\n",
174 | "
231
\n",
175 | "
255
\n",
176 | "
...
\n",
177 | "
255
\n",
178 | "
255
\n",
179 | "
255
\n",
180 | "
255
\n",
181 | "
255
\n",
182 | "
255
\n",
183 | "
255
\n",
184 | "
255
\n",
185 | "
255
\n",
186 | "
0
\n",
187 | "
\n",
188 | " \n",
189 | "
\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": "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\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": "iVBORw0KGgoAAAANSUhEUgAAAWIAAAFeCAYAAAC/5BWsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xm8JGV97/HP1xkQhn132AQjgkoA8VwjAQ2KERAjJEpEUUeCjrnXBZUEcEmAmJuLiRtxvfMCdFQEETHgClwUFBPRMzCAMipKFAaGTXY3GPzdP6oO1GlOd1dXVVd11fm+X69+ndPdtTy9nOc89a3neUoRgZmZNedxTRfAzGy+c0VsZtYwV8RmZg1zRWxm1jBXxGZmDXNFbGbWMFfEZmYFSTpD0u2SfjjHc38nKSRtOWw7rojNzIr7FHBQ74OSdgD+HLgxz0ZcEZuZFRQR3wbumuOpDwLHAblGzLkiNjOrkKSXADdHxNV511k4xvKYmTXmyVL8puQ21sCPgN9lHloWEcv6LS9pEfAu4IWj7McVsZl10m+BN5bcxrvhdxExNcIqfwTsDFwtCWB74EpJz4qIW/ut5IrYzKwiEXEtsPXMfUm/AKYi4s5B6zkjNrNOErBOydvQfUhnAf8F7CpptaSji5TVLWIz6yQx/gouIl4x5Pmd8mzHFbGZddJMi7gNHE2YmTXMLWIz66Q6oomqtKWcZmYjcTRRE0knSfpsyW08R9JPMvd3lXSVpPslvUXSJyT9Q/nSPma/75R0WtXbrZOksyQdVnIbj3yGknaU9ICkBdWUcM797SHpP0dc51JJrxtXmWw8ZlrEZW51mfiKWNIrJU2nf6BrJH1d0n5VbT8ivhMRu2YeOg64NCI2ioh/j4i/jYj3lNmHpP0lre7Z779EROV/3JJem8749IGexw9LH/9URfvZA9gTOL+K7QFExI0RsWFEPFzVNufYxzXAPZL+oortpZX079Lv552SzpO0OPP8syR9TdI9ku6S9H1JR/VsY2dJf5D0sSrKNEcZZ33/JK2blvO7kjZO/xmGpMMzyyxMH9spvf+p9P6zMss8WVL07OtASd9OGzJ3SLosHfJbuzq6r1VloitiSW8HPgT8C7ANsCPwMeDQMe72iSTDGtvs58DLJWX/qb8G+GmF+3gDcGa08zLgZ5KUvypviogNgacAm5JM+IKkfYBvApcBTwa2AP4ncHDP+q8B7gaOkPT4vDtN/wnsP0pB0+2fl5bzhRFxX/rUXcA/DTkauQv45wHbfhnwBeDTJCPKtgH+Eajkn16XTWxFLGkT4J+AN0bEeRHx64h4KCK+HBF/32edL0i6VdK96X/lp2eee5Gk69L/1DdL+rv08UdaC5K+CTwP+EjawnlK2hL458x2DpW0UtJ9kn4u6aD08aMkrUq3f4OkN6SPbwB8Hdg23eYDkrbtjVUkvUTSj9KW06WSnpp57hdK5ja9Jn1tn5e03oC371bgWuDAdP3NgT8FLhjh/fqUkljm4vQ1XSbpiZnVDyapYGaWf3K6zL1py/DzmedOlXRT+p6tkPScPp/fTmmra2F6/1JJ70lbbvdLukiZuV2LfN6pS4EDRqn0MttdnH4Of9f7XETcBXwR2D196N+A5RHx3oi4MxIrIuKve1Z9DfBu4CHGWGkpmQfhyySNvUMi4teZp78BPAi8asAmlgN7SPqzObYt4APAeyLitIi4NyL+EBGXRcTrq3sV+TmaqMY+wHrAl0ZY5+vALiRDDK8kafnMOB14Q0RsRPKH8s3elSPi+cB3SFs4ETGrBZkeln0a+HuSFsVzgV+kT98OvBjYGDgK+KCkvdMv+8HALek2N4yIW3q2+xTgLOCtwFbA14AvS1o3s9hfk8x7ujOwB/DaIe/Fp0n+wAGOIIkQft+zzKD3C+BI4D3AlsDKmefTfy47Az/JLPse4CJgM5LW0Iczz/0A2AvYHPgc8IUh/0iyXknyfm4NrAtkK8BCn3dE3ExS6e2avp5XSrpmWEHSw/TLgI9ExPvmeH5L4KXAVWmltw9w7pBtPofk/TobOIdHP7OqPZ7k/fod8JKI+G3P8wH8A3CipH5H5b8hOTr933M8tyuwA0Neb50cTVRjC+DOiFibd4WIOCMi7o+I3wMnAXumLWtI/vCeJmnjiLg7Iq4sUKajgTMi4uL0v/3NEfHjdN9fjYifp62ey0gqpTlbfnN4OfDVdLsPAe8D1idpxc7494i4JW11fZmkYhvkS8D+6et/DUnFPMuQ94u0TN9On38XsI+SCa83TZ+/P7PsQySxzrYR8buIuDyzn89GxK8iYm1EvJ+kUsjm8oN8MiJ+mlYc52Rfd8nP+/6Z1xERn4uIPYaU42kkLekT55h9698l3QNcDawB3k7yD+lx6f1BlgBfj4i7Sf5JHSxp6yHrFLERyT+G5en79RgRcQFwBzDo3MX/BXaU1BuvbJH+HPZ6a+OKuBq/ArbsyTn7krRA0ilpXHAfj7ZUZw5lXwq8CPhlegi9T4Ey7UCSv861/4MlfU/JCZl70n0NvURKalvglzN3IuIPwE3AdpllsjM3/QbYcNAG04rrqySHvFtGxHd7yjvs/SItw8z2HiDJCLcF7kkf3iiz7HEk3/3vpxHL32T2dWwa29ybvjebkP+9mfN1V/B5b5R5HXkcCdzM3C2+t0TEphGxXUQcGRF3kGS+fwAWz7E86WtYHzictCUfEf9FckWHVw5Y556ZG7Af8JXMYycMKP+dJEdGyyUdOGC5d5P8053ziCWtxN+T3pR56lfpz76vtwmOJsr7L5LDqLzdo15JchLvBSR/6DuljwsgIn4QEYeSHMb+B0nralQ3kUxzN0uaNX6RpCW7TURsShIvzHxRh53QuoWkNTmzPZFU+jcXKGPWp4Fjgc/M8dzA9yu1Q6ZMG5JEC7ekccvPSU5OARARt0bE6yNiW5ITYR9Lc+PnAMeTRCubpe/NvT37KaLw5y1pW5KYIxutDHMSSWX2OeXoXhcRvyH5Dr90wGJ/SRJlfSzNum8l+efbN55IK/xN0/fxcuDFmcdOGVKm84DXA+dKel6fZS4Gfgb8rwGb+iTJe/6Xmcd+QvL3Mej1Wh8TWxFHxL0kZ1w/qqTr1SJJ66Qtz3+dY5WNSDLQXwGLSLIs4JHuOkdK2iQ99L8PKNJF6nTgKEkHSHqcpO0k7UbyR/14ksO6telhW3Zi6NuALXoO+7POAQ5Jt7sOSeX5e2Ck/q5zuIzkulkfnuO5vu9Xxosk7Zdm1e8BroiImVby14BHTtpIOlzS9undu0n++Tyc7mctyXuzUNI/klQ+ZZX5vPcHvtnvEL2Ph0harxsAn5GU52/nOOC1kv5e0hZp2faUdHb6/BLgDOCPSSKXvYB9gb0k/fEIZcstIs4C3gScL2nfPou9Ky17v22sJfnHdHzmsSCJZP5ByYnrjdO/kf0k9Z1IfZwcTVQkIj5A8uG+m+QP+SaSL9F/zLH4p0kO728GrgO+1/P8q4FfpIexf8vgs8P9yvN90hNxJK26y4AnRsT9wFtIKtS7SVprF2TW+zHJybgb0kPIbXu2+5O0PB8maXX9BfAXEfHgqGXs2W5ExCVprtxr2PsFSWZ5Ikkk8UySw/MZy4Aj09Y7wP8ArpD0AMlrPyYi/hu4kOQk0U/T/f2OTORRQpnP+0jgEzN30kp7aJfF9PP4K5JW9hnDKuOI+E/g+entBkl3kbxvX5O0HXAA8KH0aGLmtoKkB8OSYeUpKiKWk/yz/6oy/YIzz38X+P6QzZxFTx4cEeeSnO/4G5KjvNtIurtV1td8FG3qNaFoZTdQGzclAz9WR8S7ByzzOeCciJjrH+NESluayyKiyDkCa5HdpDi95Db2gxUx2hU6CvFcE1ZYRPQ9qTSpIrmCgithmyiuiM2sk+bN7GtKRpWdCiwATht21tbaIyJe23QZzMpo0+xrhSvitAvPR0nOyq8GfiDpgoi4rqrCmZkVNV9axM8CfhYRNwCkXXIOJTmDPSdps0jGA9jku7v2PT5z/RyDsqro+NYhK27LN34i13s7YVb8ljsjYqui68+LFjFJx/NsN6TVwJ8MXmVbkl4vNvnOq32P07uePHyhA8ZfjjbR+5fmWi7XezthtPLR0aZdV6Yinmtk1GP6wklaCiwF2HEd+OXT9xy+4ZVXlyiWTZqrebQS2JMT+y6nlf2fmxH0VCjzsGLW+4e/TwPXz7zPsVf7Kui85ks0sZrMEFiSGaRu6V0onSBlGcDUIrnTspnVYr5EEz8AdpG0M8nopiMYMFmJmVmd2lQRlxpZJ+lFJFfQWEAyPeRc85Q+YmqRYjrv5IfD9u34YgJUmyPnjTDymHXIPQ/jCxg9wpi0mEIry41q21OKi0qW4QltGFkXEV8jmfzFzMwKakuWbWY2EgHrlK3hcl+WohxXxGbWSRIsbElFXOvsa1VmxHk5S65L/f2O84pjJyv7HJey3dryqitLLpsR771A8d31y5Vh0a/ryYgnej5iM7P5wNGEmXVSJdFETTofTeTlCKMujjCa1pYIo2w0MbVQMb3p8OUGluFXLei+ZmY2sUQywqEFXBGbWTe1aLIJRxMjcHxRJ0cYTRtXhJE3sigdTayrmC48iWZahlscTZiZFdeiFnFLimlmVkBLariWFHMyxF7D51IGRxhdM1+iiM5p0ck6D+gws26aiSbK3IbtQjpD0u2Sfph57N8k/VjSNZK+JGloJzpXxGZmxX0KOKjnsYuB3SNiD+CnwDuGbcQVsZl1Uw0t4oj4NnBXz2MXRcTMdEHfI7l60eCiuvtac5wlV2FyurnNxyx5vKP0Ti7Xfa2C+ia9gOmdmYeWpZd/e3QZaSfgKxGx+2PWl74MfD4iPjtoPz5ZZ2bdVE33tTuL/jOQ9C6SiTTPHLasK2Izs4pJWgK8GDggcsQOrogblKc7nOOLYf4qxzL1xBd5D9O7FGHkfS11TTQ0e6c0UsNJOgg4HviziPhNnnVcEZtZd425H7Gks4D9gS0lrQZOJOkl8XjgYkkA34uIvx20HVfEZtZNNbSII+IVczx8+qjbqbUiXvHbxWjl0qHLTdplvZvk0XyjyEYQeSIL67QWzTXhfsRmZg0bWhH3GcK3uaSLJV2f/txsvMU0MxtRDQM6qpJnV58CPgJ8OvPYCcAlEXGKpBPS+8ePsuNs/KCVDZxR7Zj8EUaR97oth/n9ypl9vLcHxaDnxiNPD4Iu9Kwo0ouk8t4VXZn0Z64hfMChwPL09+XAYRWXy8ysnI61iOeyTUSsAYiINZK2rrBMZmbltehk3diLKWkpkHaV2GTcuzMza52iFfFtkhanreHFwO39FkwnyFgGIG37yFA/58LNyH+9sC59PoO6tRXp8vboOify6Pt5Ml16z8prfNTdPJgY/gJgSfr7EuD8aopjZlaRLmXEfYbwnQKcI+lo4Ebg8HEW0syskJZkxLXOR5xEE0lcXLbLikffNa+do/mq6KI2d5e3ccYUXejONiq9v9yl7Ke2UEwfUrIMnylXhrxa8v/CzGxELcqIXRGbWTe5+9poeg+7+kUVg0bjOaqo32RMSDRqr4fRe0YM7mnxqHH2muj7NzEg4puPccYsrojNzCZAS2o4z75mZtaweq/i/ATF9KvSHQ/oKZGnR0VvFJGNKhxTtNPsuKktEw31izAm5+rS0P9vapLji9K9JrZRTM81bfsoZTjVvSbMzIpzRmxm1jBXxOXkGeAxqNeEY4p2mv0ZPvr41ZmBEnsyCYNIRo0j+ve6aGKuikmOIyrXkn7EPllnZtawiWwRm5mV5mjCzKxhroiHq3qu0n7z5w7Ki50lt8/VzB7Nt2ffXHWc3d9G7abW/zp54/zWtbHLWqVaVBE7IzYza1hL/l+YmRXQkl4TjY2sKyLv4ZXnN+6ua1bOvt8/mpjb1T1hQD3d4YqMsss30VBZkxxTlB5Zt4Ni+m0ly3CsR9aZmRXXooy4JcU0MyugJdHExFfE/eKIsV351SbaHnvNvh/MPaKyn8dGGXMf8g8ezVflHMjNTg6U9+9okiOMLpj4itjMrBBHE2ZmDXNFXJ1+h0SDLq9UJMLIc1jrnhXzRzbC6B1EMluRCYnyTA7UfxBInjglKc88j+9adPFQD+gwM2vYxLeIzcwKaVE0MbRFLGkHSd+StErSjyQdkz6+uaSLJV2f/txs/MU1MxvBwpK3Gos5zFrg2Ii4UtJGwApJFwOvBS6JiFMknQCcABw/vqIOlqd7TdUTDVk79GanWVXmqIOz5Ow+i4zmGz4Z/Tgz4b7Xjpzkbm1dahFHxJqIuDL9/X5gFbAdcCiwPF1sOXDYuAppZjaymZN1ZW7DdiGdIel2ST/MPDZyWjDSyTpJOwHPAK4AtomINZBU1sDWfdZZKmla0vQdvxllb2ZmE+9TwEE9j51AkhbsAlyS3h8od8Nd0obAF4G3RsR9knKtFxHLgGWQTPqTd391GDWCGNTFzV3bmpfnMxj0GfaLMPIe8g+KQGYvNzzCKBZf1DNRUNZEj8yrIZqIiG+nDdSsQ4H909+XA5cyJLbNVUxJ65BUwmdGxMyne5ukxRGxRtJi4PZcJTczq0szGfGstEDSnGlBVp5eEwJOB1ZFxAcyT10ALEl/XwKcP3p5zczGpJqMeMuZaDW9LR1HUfP8v9gXeDVwrfTIRc7fCZwCnCPpaOBG4PBxFLCsQYdEnkRofsh7Saw8oysHmT0ar9yh+Hh7YNSj8R4V1UQTdxaYj3jktGBoMSPicpKXNJcDRiygmVnXzaQFp5AzLWhJLzszsxHVcLJO0lkkJ+a2lLQaOJECaUGrLpXUtCriC/euaFbe+GH2fMSjf+5lo4mq5XkNg65yXlaRmKL0pZJ2U0yfXnTttAz7+VJJZmbFdWlknZmZjVdL/l+YmY2oRS1iZ8QVyT3CyBlxK8zHLDlv+bPf4SpzZOjtUloyI366Yvpz5cqjvZwRm5mV05IrdLgiNrNualE00ZJi1qvIRCZ5R+nlHeVlk2NQt65+o+naeL24vDFJ1XHELJeMb9OTzBWxmXWTW8RmZhOgJRlxrb0mpG0DksmLGp8QpAJ5IoxBrzPX+o4vGjfWQ/GMSepBkdegCCYuzLyezGy8ve9nv++4VpbsNbGHYvqrRddOy7Cje02YmRXXomjCI+vMzBrmAR1jkI0ceqOJUScOcjTRHo4w+isWYZSMJvZSTF9cdO20DFs7mjAzKyVacrLOFbGZdVIIHm5JDeeM2MysYc11XxuUfc6TCzC5+1q31JURZ3UtL57t5FL57DP3Vvzn5UXXTqy3gTNiM7PCQrB2QdmD/j9UUpZhXBGbWSeFxMMLy1ZxD1ZSlmGaq4jnSfwwSJ7RhZ7nuNvaPlHQpHt4QTu6TfhknZlZw4a2iCWtB3wbeHy6/LkRcaKknYGzgc2BK4FXR0Q97XgzsyEC8XBLZv0Z2mtCkoANIuIBSesAlwPHAG8HzouIsyV9Arg6Ij4+eFuP9prIqwuTA5Ux6kg8cEwx6Yr0rujSJZkGmf3ayvWa2HNqYVw4vWGp8izWvbX0mhgaTUTigfTuOuktgOcD56aPLwcOG0sJzcwKepiFpW51ybUnSQuAFcCTgY8CPwfuiYi16SKrge36rLuUR5rBm5QrrZlZTm2KJnJVxBHxMLCXpE2BLwFPnWuxPusuA5bBTDQx3ImZw6iT3p9nDTjp2HzLzQd553u1dupyT4vZr23+GKntHRH3SLoUeDawqaSFaat4e+CWMZTPzKyQNrWIh2bEkrZKW8JIWh94AbAK+BbwsnSxJcD54yqkmVkRD7Og1K0ueXpN7EFyMm4BScV9TkT8k6Qn8Wj3tauAV0XE7wdva/ReE/2cWOAscJfjiyK9K7IcX9SniV4T/bY1yfak3DwPu089Ps6dXlyqDE/VLydjromIuAZ4xhyP3wA8axyFMjObTzzXhJl1UpIRt6OKa0cpzcwKaMvJusbmIx6nIvlxVluyZE8IVI8mugOWzZGh/Vly2Yz4aVPrx5nTO5cqw95aNRkZsZlZGwWwtiUtYs++ZmbWsFqjiadLcVaO5eoaLeQI41GOLyZbnqgib5TQ7++r6SiiV9lo4qlTi+KT07uWKsM+WulowsysqDaNrHNFbGad5Yq4hCpHEZWNHwbJMyFRE/HFoCgiO79zdrlBh76OLZqX5zO4ZuXo252EOCL7N15leepoEUt6G/A6knOD1wJHRcTvRt2OT9aZmRUgaTvgLcBUROxOMg3EEUW2NZEtYjOzsgLV0X1tIbC+pIeARRSchbLzFfHJA6KNPLFFdv1CEw01MJ9yFZeXchwxWbLRUfazyTvwI7vO1StH710xzghjnNuuYIjzlpKmM/eXpXOsExE3S3ofcCPwW+CiiLioyE46XxGb2fxUUUZ8Z7/ua5I2Aw4FdgbuAb4g6VUR8dlRd+KM2MysmBcA/x0Rd0TEQ8B5wJ8W2ZBbxGbWSTX0mrgReLakRSTRxAHA9OBV5tbYyLqq86dxjcbLmwuXzZLzmqTucM6RJ0sVEwX1U1dePHuf5UbWPXlqk/jX6X1LleGl+vrAMkg6GXg5sJbkAhmvG3aBjLm4RWxmnVTHfMQRcSKUbwW6IjazTmrTEOeJnPSniCqjiWy0UFfkUKW88UU2cujt8tbvubwxRb/DZMcZzRvnNfOqjC3KRhNPmtos/mV6/1JleIX+w5P+mJmV0ZYWsStiM+ukmkbWVaIzFXGVEwVltSWOyMo7mi/vCLw88xl70qD26DcyL2+8NCh+yPO3V1evC1881MxsArQlmsg9sk7SAklXSfpKen9nSVdIul7S5yWtO75impl11ygt4mOAVcDG6f33Ah+MiLMlfQI4Gvh4xeUrpOwlYwZNFJQ1SbFFkd4d2Qhj0GvuF2HkvYr0oMNfa1beCYSKDOjIGxe2eT7iquRqEUvaHjgEOC29L+D5wLnpIsuBw8ZRQDOzImYq4jK3uuRtEX8IOA7YKL2/BXBPRKxN768Gtqu4bGZmpbSl18TQFrGkFwO3R8SK7MNzLDrnyBBJSyVNS5q+u2Ahzcy6bOjIOkn/B3g1yaQW65FkxF8CDgSeEBFrJe0DnBQRBw7a1jhH1hXRdDe3Jkbtld1n3vy8COfHk6XICLw88p/DKTeyboepreNt04cXXR2AY/WxWkbWDW0RR8Q7ImL7iNiJ5HpM34yII4FvAS9LF1sCnD+2UpqZjahNGXGZieGPB94u6WckmfHp1RTJzKwabamIRxrQERGXApemv98APKv6Io3PuOYsHkXTkwhVGUfEhTlH5h3o7mttVOSzyhNn5P87LPddadMQZ18qycysYR7ibGad5LkmJlTZEXeDVDkar+n4ole/MpyU6SMzcGRenwgjG1k8Zh1HGK0wrp4VVWnLyLp5VRGb2fzRpiHOrojNrLNcEc/hOhazJ0uB+uYkrUveyyvliR0mIY6o0qxeE5mYokivi16OMJqV9/2f9AijaW4Rm1kntan7mitiM+ukNvWaqPUqztK2QYujiSoGhFQZO1TZu6LqOZjLzkmRN7bI6heBcHzO9WuaN3m+X+F6UEwxew7jcnNNbDO1fbx8+piiqwPwYR03GXNNmJnZeLWj3W5mNiJ3XzMza1ibTtY1lhHnNR+z5Kq7r+XJkgdluuPKn4vkwL365sJF5MySrVr9M+OTS+WzW03tGIdOl/tQT9ebasmI3SI2s05qUzThk3VmZg2b+Giin0mILPpdBnyc8x43PequX8xQRbnGFWFUGl+AI4yKjSua2GJqpzhk+l1FVwfgM1rqaMLMrIy2RBOuiM2sk9rUa8IVcQn94pG6Yooq9cYCkzQh0cBJfzJRQ9nJhXJ779wP+5JQxfR7r7Sy5oI0yBWxmXVSm+aaaEcpzcwKaEtGXGuvialFiuld0x2PcX7SSehR0c+kDfaYVE1MGtQI98DoSyvLTfqz6dQfxXOnTylVhi/rr91rwsysqDadrMs1oEPSLyRdK2mlpOn0sc0lXSzp+vTnZuMtqpnZZJG0qaRzJf1Y0ipJ+xTZzigj654XEXtlmuknAJdExC7AJel9M7OJ8TALS91yOBX4RkTsBuwJrCpSzjLRxKHA/unvy4FLGSHxGtS9p8r8eFAm20SWnGefg8qcJzudLznyIP26vPVmxycdmPn9wnGWqI8+XeEew1nyyMY914SkjYHnAq8FiIgHgQeLbCtviziAiyStkDQzRnmbiFiTFmANsHWRApiZjcNMRVzmBmwpaTpzy87R8CTgDuCTkq6SdJqkDYqUNW+LeN+IuEXS1sDFkn6cdwdpwZcC7LhOgRKamRVUwcm6Owf0mlgI7A28OSKukHQqSUT7D6PuZOTua5JOAh4AXg/sHxFrJC0GLo2IXQetm+2+NnAffaKJcY5Yqyum6DdRUJ7li5rU6+RVoWw3t36yEUY2voCGIow8OhZflO2+ttHUU2Kv6Y+WKsPlemHfMkh6AvC9iNgpvf8c4ISIOGTU/QyNJiRtIGmjmd+BFwI/BC4AlqSLLQHOH3XnZmbjMjOyblwn6yLiVuAmSTPNywOA64qUNU80sQ3wJUkzy38uIr4h6QfAOZKOBm4EDi9SADOzcahpYvg3A2dKWhe4ATiqyEYaG1mXV56YAoodwk/yCLwZVUcwjinyyTsyb9CERKNuqzYtiTDKRhMbTO0WT50+vVQZVmi/WkbW+QodZmYN8xBnM+ukNl2zbuIr4uzAj2xM0YUoYtQeFHmNMyaYtDgiK1ueIjFFvwihN37IM9dxnsiiMfNkEElQSfe1Wkx8RWxmVoznIzYza1SbogmfrDMza1irWsR5rwPWr8tb3ly5riy5yH76rZN9bXnz0UnLeKtUNi/O6s2B+10bb9A6rZQnS57wHLktLeJWVcRmZnm1aWJ4V8Rm1km+eOgEycYZ1+S8PHfTXeOKdGsbtFy/1zPokL1fbJE3zpikbm559593DuNRt9WJmKKfCe8K15ZowifrzMwa1vkWsZnNT23qvtbJirjfaLxeo8YJk9ybourJgfrFFnkP84v0Wmg6wuhn0Ci5shGEI4weFUYYgXj4D66IzcyaE7B2bTsqYmfEZmYNm/j5iKuU9+rQeS/JNGmTCOVRZYQxqVFCFcZ1CaZenY4jStKB5eYjXrD3XrHo8v9Xqgz4+SV7AAAOPElEQVQPbLBVLfMRO5ows06KEA+3JJpwRWxm3RS4Ip7T9sx99nSMnb3zxhFZeQ/fxzWf8DiN80rYXVLl3MZF5iYeNAey5RMh1j7UjorYJ+vMzBrmaMLMOkr84eF2VHHtKKWZ2agCaElGXG/3tacopj+S3hmUC/cbhTNhWXIRbcmSs8pmyV3r5jZqZjxoPuN+yzkjLt99TX88FZz/g3KF+KPHufuamVlhAaxV06XIJdfJOkmbSjpX0o8lrZK0j6TNJV0s6fr052bjLqyZWRfliiYkLQe+ExGnSVoXWAS8E7grIk6RdAKwWUQMDA9mRRPZ7fcehvWZtGfWpZIGTSJSMsKocgRe3nmC2xJZjLPLW78IY5LmNh6kym5u8zGK6FU6mth9Kjhnulwhnq7JiCYkbQw8F3gtQEQ8CDwo6VBg/3Sx5cClTPwVrMxs3ghgbdOFyCdPRvwk4A7gk5L2BFYAxwDbRMQagIhYI2nruVaWtBRYCrDjnEuYmY1BxyrihcDewJsj4gpJpwIn5N1BRCwDlkESTcy5TM6zyhyQ+f2inudemPm95NyneeczLnuYnieO6N1H2QhjXHFIb2SQ5zC9SMzQu92mo4qykwP1iyPy9poYZ5zhqKQ+eU7WrQZWR8QV6f1zSSrm2yQtBkh/3j6eIpqZFRDAQyVvNRlaEUfErcBNkmYmsDwAuA64AFiSPrYEOH8sJTQzKyKAh0veapK318RewGnAusANwFEklfg5wI7AjcDhEXHXoO306zUx0QacfuzXoyPv1aInWdkIo19sM85LKJW9vFOVykYWZS+7VHQbebZdV0xRutfEblPBspK9Jv5sQnpNAETESmCuwhwwx2NmZs1r0ck6z75mZtYwD3E2s25qUYu4uUl/Oibv5N+jTszelhF3vYp07euXH1eZ8Xat+1vZLHmSu7yVzoh3mQpOLZkRHzJBGbGZWeu0qEXsitjMuquGiljSAmAauDkiXlxkG66IK5L3MKxfhNEvshg0sq7IREN1Gde18cpGC01HEb3yTHQ0SJEoYJzdz+bpCLxjgFXAxkU34F4TZtZNNYysk7Q9cAjJOIvC3CI2s26aGVk3Xh8CjgM2KrMRV8Q1y3PodvWB+Q7rm4ggioy467dc72vL01Ni0qKFSZK35868iQ+qOVm3paRs14tl6URmSHoxcHtErJC0f5mduCI2M+vvzgHd1/YFXiLpRcB6wMaSPhsRrxp1J86IzaybZlrEZW6DNh/xjojYPiJ2Ao4AvlmkEga3iCfSHhc++nsMOBS/5sAaCtOjrjikX0yRt9dEWy6v1E+R+Z17jRpBdO7K0e5HbGY2AWqqiCPiUpLLxRXiitjMuqlFLWJnxGZmDfOkP/NAE1lyEXlG4A3KTtuYBRfRxERBTSg96c8OU8HbSk76c6wn/TEzK25mZF0LuCI2s26qZ2RdJRxNGNCt+ALqmdt40rU9wigdTWw3FbyhZDRxYj3RhE/WmZk1zNGEmXVTi7qvuSI2YPZovkGKRBh5JwrKs1zv43uOGDtM2qWSqlQ2iihiokfjuSI2M2tYi3pNDM2IJe0qaWXmdp+kt0raXNLFkq5Pf25WR4HNzLpmpF4T6bWZbgb+BHgjcFdEnCLpBGCziDh+0PruNTF/jKsXRpFeE21UdYRSdtKgJuY6Lt1rYpup4MiSvSY+OJm9Jg4Afh4RvwQOBZanjy8HDquyYGZmpY1xGswqjZoRHwGclf6+TUSsAYiINZK2nmsFSUuBpQA7zrmEmdkYtOhkXe4WsaR1gZcAXxhlBxGxLCKmImJqq01GLZ6ZWUE1XDy0KqO0iA8GroyI29L7t0lanLaGFwO3V188a42LZt/Ndofrly8WmWQ+7zptz5LzlivvqMEiXfvy5MK9mXCRdWy0jPgVPBpLAFwALEl/XwKcX1WhzMxKm5lrosytJrlaxJIWAX8OvCHz8CnAOZKOBm4EDq++eGZmBbUoI85VEUfEb4Ateh77FUkvCjN4Yf+nZh2KZiOMnnWKRBh5R+3l0ZbJgaosZ9nReBM9sg66VRGbmbVOl0bWmZnZeHk+YmtM3tFaefWLJgbFF12+PNMkRRhZeeOL0iPrNpsKnldyZN2XfKkkM7PiunayzsysdVwRm9Uv7yCOUTUxz28VqoxN+l16apB+kwZNfE+LBrgiNrNualGvCVfEZtZdvorzY7nXhBVRde+KPLK9K8pGHpPcsyKvVvaa2GgqeEbJXhPfca8JM7PiWnSyzgM6zMwa5haxmXWTT9aZVafItdPKKpILF+ni1U/V16wrq8j8yP3k/wxLvuaZaTBbwBWxmXWXM2IzM8vDLWJrlfxdn+rv8lYkjug3Mc+giYaymo4sqjY7hiq7MVrTInZFbGbd5JN1ZmYN88m6ua24fjE6cOljHvekH1aFJuKIPKqeNKhfHDFoP3VFGEWuFp01+zOsoNdES6IJn6wzMytA0g6SviVplaQfSTqm6LYcTZhZd423RbwWODYirpS0EbBC0sURcd2oG5rIirjfIaYjDBskz/djUuMLKB9htKUHRd4eIaWN+WRdRKwB1qS/3y9pFbAd0I2K2MystGpO1m0pKTuF27KIWNa7kKSdgGcAVxTZSa6KWNLbgNeRvLRrgaOAxcDZwObAlcCrI+LBIoUwM6tcNSfr7hw2DaakDYEvAm+NiPuK7GToyTpJ2wFvAaYiYndgAXAE8F7ggxGxC3A3cHSRApiZtZWkdUgq4TMj4ryi28kbTSwE1pf0ELCIJBd5PvDK9PnlwEnAx/PueFCeVzYLzuaAzpWta/Jmqm3NjGeULv2Yu69JEnA6sCoiPlBmW0NbxBFxM/A+4EaSCvheYAVwT0TMvMzVJCG1mdlkmDlZV+Y22L7Aq4HnS1qZ3l5UpKhDW8SSNgMOBXYG7gG+ABw8x6JzXnNJ0lIgHcWxSZEympkVM8aRdRFxOaAqtjX0mnWSDgcOioij0/uvAfYBDgeeEBFrJe0DnBQRA6fp2FaKmXF1RS7JXTVHGNbPJHdzq9KkxRez64WTy12zTlOBSl6zLuq5Zl2ekXU3As+WtCjNRA4g6Sf3LeBl6TJLgPPHU0Qzs4Ki5K0meTLiK4BzSbqoXZuusww4Hni7pJ8BW5CE1mZmNqKh0USlO9O28UhcnJMjA2vCfIkm8moiwjgZykcTlIwmmJxowszMxsgVsZlZw2qNJrK9JrKqmPTDEYY1wRHGbFVGGOWjiWcGfK9kKdatJZrwpD9m1lHtmRneFbGZdVR7LlrnitjMOsot4jmtYTEnp93XymZJzoStrfp9d7uQN+c53zNpo/kmgVvEZtZRjibMzBrWnop4Irqv9coe3mQPY4p0c3OEYU0rEjkM+t52IcLIp+ykP3sEXFCyDDt7ZJ2Z2XzgaMLMOsrRxNw7k+4Afg3cWdtOJ9OW+D2Y7+/BfH/9MPw9eGJEbFV049LukVzHooyndW9kXURsJWm6jhc2yfwe+D2Y768f6ngP2tMidjRhZh3VngEdPllnZtawJlrEyxrY56Txe+D3YL6/fhj7e9CeaKLWk3VmZnWRdovyV3Dbr3sn68zM6tOeFrErYjPrKJ+sm5OkgyT9RNLPJJ1Q576bIGkHSd+StErSjyQdkz6+uaSLJV2f/tys6bKOm6QFkq6S9JX0/s6Srkjfg89LWrfpMo6LpE0lnSvpx+l3YZ/59h2Q9Lb0b+CHks6StN58+g4MU1tFLGkB8FHgYOBpwCskPa2u/TdkLXBsRDwVeDbwxvQ1nwBcEhG7AJek97vuGGBV5v57gQ+m78HdwNGNlKoepwLfiIjdgD1J3od58x2QtB3wFmAqInYHFgBHMPbvwEw0UeZWjzpbxM8CfhYRN0TEg8DZwKE17r92EbEmIq5Mf7+f5A9wO5LXvTxdbDlwWDMlrIek7YFDgNPS+wKeD5ybLtLZ90DSxsBzSc8aRcSDEXEP8+w7QBKDri9pIbAIWEMt34G1JW/1qLMi3g64KXN/dfrYvCBpJ+AZwBXANhGxBpLKGti6uZLV4kPAccAf0vtbAPdExMw3vcvfhScBdwCfTKOZ0yRtwDz6DkTEzcD7gBtJKuB7gRWM/TvgFvFcNMdj86LvnKQNgS8Cb42I+5ouT50kvRi4PSJWZB+eY9GufhcWAnsDH4+IZ5DMtdLZGGIuaf59KLAzsC2wAUlE2aur34Gh6uw1sRrYIXN/e+CWGvffCEnrkFTCZ0bEeenDt0laHBFrJC0Gbm+uhGO3L/ASSS8C1gM2JmkhbyppYdoi6vJ3YTWwOiKuSO+fS1IRz6fvwAuA/46IOwAknQf8KWP/DrSn+1qdLeIfALukZ0rXJQnry87aPNHSLPR0YFVEfCDz1AXAkvT3JcD5dZetLhHxjojYPiJ2IvnMvxkRRwLfAl6WLtbZ9yAibgVukrRr+tABwHXMo+8ASSTxbEmL0r+JmfdgzN+Bme5rk58R19Yijoi1kt4EXEhy1vSMiPhRXftvyL7Aq4FrJa1MH3sncApwjqSjSb6khzdUviYdD5wt6Z+Bqyg/BGqSvRk4M22A3AAcRdIImhffgYi4QtK5wJUktdtVJMObv8pYvwPtaRF7iLOZdZK0U8C7S27l9b5UkpnZfOAhzmbWUe2JJlwRm1lHtWeuCVfEZtZR7WkROyM2s44af/e1qiYyc0VsZlZAlROZOZows44aezTxyERmAJJmJjK7btQNuSI2s44a+8m6uSYy+5MiG3JFbGYdteZCOGnLkhtZT9J05v6yiJi56Gllk1e5IjazToqIg8a8i8omMvPJOjOzYiqbyMwtYjOzAqqcyMyT/piZNczRhJlZw1wRm5k1zBWxmVnDXBGbmTXMFbGZWcNcEZuZNcwVsZlZw1wRm5k17P8Db2TsFeCi0/QAAAAASUVORK5CYII=\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 | 
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 | 
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 | 
69 |
70 | * Then the classification accuracy of indian pines dataset before **PCA** is:
71 |
72 | 
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 | 
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 |
--------------------------------------------------------------------------------