├── .gitignore
├── Book.pdf
├── Cl
├── ab1.jpg
├── ab10.jpg
├── ab11.jpg
├── ab2.jpg
├── ab3.jpg
├── ab4.jpg
├── ab5.jpg
├── ab6.jpg
├── ab7.jpg
├── ab8.jpg
├── ab9.jpg
├── n1.jpg
└── n2.jpg
├── FLAIR
├── img10.jpg
├── img12.jpg
├── img13.jpg
├── img16.jpg
├── img18.jpg
├── img2.jpg
├── img3.jpg
├── img6.jpg
└── img8.jpg
├── Feature Reduction.ipynb
├── Final_Test_evaluate.ipynb
├── Preprocessing & Feature.ipynb
├── README.md
├── Training_testing.ipynb
├── preprocessing.py
└── segmentaion.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | env/
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 | lib/
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 |
49 | # Translations
50 | *.mo
51 | *.pot
52 |
53 | # Django stuff:
54 | *.log
55 | local_settings.py
56 |
57 | # Flask stuff:
58 | instance/
59 | .webassets-cache
60 |
61 | # Scrapy stuff:
62 | .scrapy
63 |
64 | # Sphinx documentation
65 | docs/_build/
66 |
67 | # PyBuilder
68 | target/
69 |
70 | # Jupyter Notebook
71 | .ipynb_checkpoints
72 |
73 | # pyenv
74 | .python-version
75 |
76 | # celery beat schedule file
77 | celerybeat-schedule
78 |
79 | # SageMath parsed files
80 | *.sage.py
81 |
82 | # dotenv
83 | .env
84 |
85 | # virtualenv
86 | .venv
87 | venv/
88 | ENV/
89 |
90 | # Spyder project settings
91 | .spyderproject
92 | .spyproject
93 |
94 | # Rope project settings
95 | .ropeproject
96 |
97 | # mkdocs documentation
98 | /site
99 |
100 | # mypy
101 | .mypy_cache/
102 |
--------------------------------------------------------------------------------
/Book.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Book.pdf
--------------------------------------------------------------------------------
/Cl/ab1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab1.jpg
--------------------------------------------------------------------------------
/Cl/ab10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab10.jpg
--------------------------------------------------------------------------------
/Cl/ab11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab11.jpg
--------------------------------------------------------------------------------
/Cl/ab2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab2.jpg
--------------------------------------------------------------------------------
/Cl/ab3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab3.jpg
--------------------------------------------------------------------------------
/Cl/ab4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab4.jpg
--------------------------------------------------------------------------------
/Cl/ab5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab5.jpg
--------------------------------------------------------------------------------
/Cl/ab6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab6.jpg
--------------------------------------------------------------------------------
/Cl/ab7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab7.jpg
--------------------------------------------------------------------------------
/Cl/ab8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab8.jpg
--------------------------------------------------------------------------------
/Cl/ab9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/ab9.jpg
--------------------------------------------------------------------------------
/Cl/n1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/n1.jpg
--------------------------------------------------------------------------------
/Cl/n2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/Cl/n2.jpg
--------------------------------------------------------------------------------
/FLAIR/img10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img10.jpg
--------------------------------------------------------------------------------
/FLAIR/img12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img12.jpg
--------------------------------------------------------------------------------
/FLAIR/img13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img13.jpg
--------------------------------------------------------------------------------
/FLAIR/img16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img16.jpg
--------------------------------------------------------------------------------
/FLAIR/img18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img18.jpg
--------------------------------------------------------------------------------
/FLAIR/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img2.jpg
--------------------------------------------------------------------------------
/FLAIR/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img3.jpg
--------------------------------------------------------------------------------
/FLAIR/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img6.jpg
--------------------------------------------------------------------------------
/FLAIR/img8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MuhammadFathy/Study-of-Detection-Brain-Tumor-with-machine-learning/5279595ab4dc87da79f09f28d397ccace52e0f75/FLAIR/img8.jpg
--------------------------------------------------------------------------------
/Feature Reduction.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "import pandas as pd\n",
12 | "import numpy as np\n",
13 | "import matplotlib.pyplot as plt\n",
14 | "import pickle"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 3,
20 | "metadata": {},
21 | "outputs": [
22 | {
23 | "data": {
24 | "text/html": [
25 | "
\n",
26 | "
\n",
27 | " \n",
28 | " \n",
29 | " | \n",
30 | " ASM | \n",
31 | " Mean | \n",
32 | " Standard deviation | \n",
33 | " area | \n",
34 | " class | \n",
35 | " contrast | \n",
36 | " convex_area | \n",
37 | " correlation | \n",
38 | " dissimilarity | \n",
39 | " eccentricity | \n",
40 | " energy | \n",
41 | " euler_number | \n",
42 | " extent | \n",
43 | " homogeneity | \n",
44 | " kurtosis | \n",
45 | " orientation | \n",
46 | " skew | \n",
47 | " solidity | \n",
48 | "
\n",
49 | " \n",
50 | " \n",
51 | " \n",
52 | " 0 | \n",
53 | " 0.285761 | \n",
54 | " 68.329483 | \n",
55 | " 80.143673 | \n",
56 | " 1 | \n",
57 | " 1 | \n",
58 | " 649.131029 | \n",
59 | " 1 | \n",
60 | " 0.949574 | \n",
61 | " 6.389174 | \n",
62 | " 0.000000 | \n",
63 | " 0.534566 | \n",
64 | " 1 | \n",
65 | " 1.000000 | \n",
66 | " 0.644000 | \n",
67 | " -1.026102 | \n",
68 | " 0.785398 | \n",
69 | " 0.437733 | \n",
70 | " 1.000000 | \n",
71 | "
\n",
72 | " \n",
73 | " 1 | \n",
74 | " 0.705255 | \n",
75 | " 20.817018 | \n",
76 | " 53.099576 | \n",
77 | " 4 | \n",
78 | " 1 | \n",
79 | " 513.964730 | \n",
80 | " 1 | \n",
81 | " 0.909389 | \n",
82 | " 4.205555 | \n",
83 | " 0.960659 | \n",
84 | " 0.839795 | \n",
85 | " 1 | \n",
86 | " 1.000000 | \n",
87 | " 0.868637 | \n",
88 | " 18.922656 | \n",
89 | " -0.692724 | \n",
90 | " 3.211472 | \n",
91 | " 1.000000 | \n",
92 | "
\n",
93 | " \n",
94 | " 2 | \n",
95 | " 0.199130 | \n",
96 | " 65.610310 | \n",
97 | " 69.660937 | \n",
98 | " 2 | \n",
99 | " 1 | \n",
100 | " 1148.323650 | \n",
101 | " 1 | \n",
102 | " 0.881897 | \n",
103 | " 10.931032 | \n",
104 | " 1.000000 | \n",
105 | " 0.446240 | \n",
106 | " 1 | \n",
107 | " 1.000000 | \n",
108 | " 0.557320 | \n",
109 | " 1.464032 | \n",
110 | " 0.785398 | \n",
111 | " 0.428516 | \n",
112 | " 1.000000 | \n",
113 | "
\n",
114 | " \n",
115 | " 3 | \n",
116 | " 0.485445 | \n",
117 | " 32.539409 | \n",
118 | " 59.810339 | \n",
119 | " 1 | \n",
120 | " 1 | \n",
121 | " 1172.741442 | \n",
122 | " 1 | \n",
123 | " 0.836718 | \n",
124 | " 10.137509 | \n",
125 | " 0.000000 | \n",
126 | " 0.696739 | \n",
127 | " 1 | \n",
128 | " 1.000000 | \n",
129 | " 0.742990 | \n",
130 | " 6.616861 | \n",
131 | " 0.785398 | \n",
132 | " 2.119195 | \n",
133 | " 1.000000 | \n",
134 | "
\n",
135 | " \n",
136 | " 4 | \n",
137 | " 0.156314 | \n",
138 | " 71.760435 | \n",
139 | " 68.979068 | \n",
140 | " 1 | \n",
141 | " 1 | \n",
142 | " 1211.991816 | \n",
143 | " 1 | \n",
144 | " 0.872515 | \n",
145 | " 11.240619 | \n",
146 | " 0.000000 | \n",
147 | " 0.395366 | \n",
148 | " 1 | \n",
149 | " 1.000000 | \n",
150 | " 0.528619 | \n",
151 | " 7.126889 | \n",
152 | " 0.785398 | \n",
153 | " -0.620239 | \n",
154 | " 1.000000 | \n",
155 | "
\n",
156 | " \n",
157 | " 5 | \n",
158 | " 0.463674 | \n",
159 | " 50.102691 | \n",
160 | " 84.501250 | \n",
161 | " 4 | \n",
162 | " 1 | \n",
163 | " 1238.504372 | \n",
164 | " 1 | \n",
165 | " 0.913783 | \n",
166 | " 11.061152 | \n",
167 | " 0.790569 | \n",
168 | " 0.680936 | \n",
169 | " 1 | \n",
170 | " 1.000000 | \n",
171 | " 0.711775 | \n",
172 | " 5.339253 | \n",
173 | " 0.785398 | \n",
174 | " 1.564511 | \n",
175 | " 1.000000 | \n",
176 | "
\n",
177 | " \n",
178 | " 6 | \n",
179 | " 0.907863 | \n",
180 | " 4.988141 | \n",
181 | " 25.988603 | \n",
182 | " 1 | \n",
183 | " 1 | \n",
184 | " 172.607495 | \n",
185 | " 1 | \n",
186 | " 0.872368 | \n",
187 | " 1.554613 | \n",
188 | " 0.000000 | \n",
189 | " 0.952818 | \n",
190 | " 1 | \n",
191 | " 1.000000 | \n",
192 | " 0.958756 | \n",
193 | " 7.774738 | \n",
194 | " 0.785398 | \n",
195 | " 1.405681 | \n",
196 | " 1.000000 | \n",
197 | "
\n",
198 | " \n",
199 | " 7 | \n",
200 | " 0.260564 | \n",
201 | " 70.583559 | \n",
202 | " 81.069658 | \n",
203 | " 1 | \n",
204 | " 1 | \n",
205 | " 842.722556 | \n",
206 | " 6 | \n",
207 | " 0.936146 | \n",
208 | " 8.949130 | \n",
209 | " 0.000000 | \n",
210 | " 0.510454 | \n",
211 | " 1 | \n",
212 | " 0.555556 | \n",
213 | " 0.584418 | \n",
214 | " 1.142813 | \n",
215 | " 0.785398 | \n",
216 | " 0.459309 | \n",
217 | " 0.833333 | \n",
218 | "
\n",
219 | " \n",
220 | " 8 | \n",
221 | " 0.573069 | \n",
222 | " 36.023047 | \n",
223 | " 73.131522 | \n",
224 | " 1 | \n",
225 | " 1 | \n",
226 | " 805.433210 | \n",
227 | " 1 | \n",
228 | " 0.925122 | \n",
229 | " 7.788582 | \n",
230 | " 0.000000 | \n",
231 | " 0.757013 | \n",
232 | " 1 | \n",
233 | " 1.000000 | \n",
234 | " 0.780964 | \n",
235 | " 10.373986 | \n",
236 | " 0.785398 | \n",
237 | " 2.327461 | \n",
238 | " 1.000000 | \n",
239 | "
\n",
240 | " \n",
241 | " 9 | \n",
242 | " 0.633504 | \n",
243 | " 27.142666 | \n",
244 | " 61.111553 | \n",
245 | " 1 | \n",
246 | " 1 | \n",
247 | " 533.784332 | \n",
248 | " 1 | \n",
249 | " 0.929096 | \n",
250 | " 5.000503 | \n",
251 | " 0.000000 | \n",
252 | " 0.795929 | \n",
253 | " 1 | \n",
254 | " 1.000000 | \n",
255 | " 0.825971 | \n",
256 | " 9.395330 | \n",
257 | " 0.785398 | \n",
258 | " 2.165754 | \n",
259 | " 1.000000 | \n",
260 | "
\n",
261 | " \n",
262 | " 10 | \n",
263 | " 0.261735 | \n",
264 | " 50.155227 | \n",
265 | " 63.147629 | \n",
266 | " 4 | \n",
267 | " 1 | \n",
268 | " 1453.747638 | \n",
269 | " 1 | \n",
270 | " 0.818771 | \n",
271 | " 13.007935 | \n",
272 | " 0.985171 | \n",
273 | " 0.511601 | \n",
274 | " 1 | \n",
275 | " 1.000000 | \n",
276 | " 0.608632 | \n",
277 | " 0.558993 | \n",
278 | " 0.392699 | \n",
279 | " 0.730281 | \n",
280 | " 1.000000 | \n",
281 | "
\n",
282 | " \n",
283 | " 11 | \n",
284 | " 0.074712 | \n",
285 | " 69.451484 | \n",
286 | " 64.199162 | \n",
287 | " 1 | \n",
288 | " 1 | \n",
289 | " 3221.858235 | \n",
290 | " 1 | \n",
291 | " 0.605837 | \n",
292 | " 27.802803 | \n",
293 | " 0.000000 | \n",
294 | " 0.273335 | \n",
295 | " 1 | \n",
296 | " 1.000000 | \n",
297 | " 0.369646 | \n",
298 | " 0.162413 | \n",
299 | " 0.785398 | \n",
300 | " -0.301308 | \n",
301 | " 1.000000 | \n",
302 | "
\n",
303 | " \n",
304 | " 12 | \n",
305 | " 0.759811 | \n",
306 | " 13.884441 | \n",
307 | " 46.267787 | \n",
308 | " 2 | \n",
309 | " 1 | \n",
310 | " 1132.556210 | \n",
311 | " 1 | \n",
312 | " 0.737879 | \n",
313 | " 8.292701 | \n",
314 | " 1.000000 | \n",
315 | " 0.871671 | \n",
316 | " 1 | \n",
317 | " 1.000000 | \n",
318 | " 0.881897 | \n",
319 | " 9.690550 | \n",
320 | " -0.000000 | \n",
321 | " 2.362078 | \n",
322 | " 1.000000 | \n",
323 | "
\n",
324 | " \n",
325 | " 13 | \n",
326 | " 0.589494 | \n",
327 | " 30.934881 | \n",
328 | " 65.637766 | \n",
329 | " 1 | \n",
330 | " 1 | \n",
331 | " 801.299792 | \n",
332 | " 1 | \n",
333 | " 0.907853 | \n",
334 | " 7.110836 | \n",
335 | " 0.000000 | \n",
336 | " 0.767785 | \n",
337 | " 1 | \n",
338 | " 1.000000 | \n",
339 | " 0.800447 | \n",
340 | " 8.048518 | \n",
341 | " 0.785398 | \n",
342 | " 2.631491 | \n",
343 | " 1.000000 | \n",
344 | "
\n",
345 | " \n",
346 | " 14 | \n",
347 | " 0.384479 | \n",
348 | " 48.080427 | \n",
349 | " 80.484196 | \n",
350 | " 1 | \n",
351 | " 1 | \n",
352 | " 2133.200925 | \n",
353 | " 2 | \n",
354 | " 0.836730 | \n",
355 | " 17.714324 | \n",
356 | " 0.000000 | \n",
357 | " 0.620064 | \n",
358 | " 1 | \n",
359 | " 1.000000 | \n",
360 | " 0.656342 | \n",
361 | " 1.611123 | \n",
362 | " 0.785398 | \n",
363 | " 1.470478 | \n",
364 | " 1.000000 | \n",
365 | "
\n",
366 | " \n",
367 | " 15 | \n",
368 | " 0.778703 | \n",
369 | " 10.491275 | \n",
370 | " 37.393469 | \n",
371 | " 2 | \n",
372 | " 1 | \n",
373 | " 843.009283 | \n",
374 | " 1 | \n",
375 | " 0.698083 | \n",
376 | " 6.545541 | \n",
377 | " 1.000000 | \n",
378 | " 0.882442 | \n",
379 | " 1 | \n",
380 | " 1.000000 | \n",
381 | " 0.895013 | \n",
382 | " 10.229401 | \n",
383 | " -0.785398 | \n",
384 | " 2.633580 | \n",
385 | " 1.000000 | \n",
386 | "
\n",
387 | " \n",
388 | " 16 | \n",
389 | " 0.398255 | \n",
390 | " 56.224655 | \n",
391 | " 85.979169 | \n",
392 | " 1 | \n",
393 | " 1 | \n",
394 | " 1399.588375 | \n",
395 | " 1 | \n",
396 | " 0.906245 | \n",
397 | " 12.259983 | \n",
398 | " 0.000000 | \n",
399 | " 0.631074 | \n",
400 | " 1 | \n",
401 | " 1.000000 | \n",
402 | " 0.685764 | \n",
403 | " 8.218121 | \n",
404 | " 0.785398 | \n",
405 | " 1.575065 | \n",
406 | " 1.000000 | \n",
407 | "
\n",
408 | " \n",
409 | " 17 | \n",
410 | " 0.402345 | \n",
411 | " 48.683848 | \n",
412 | " 69.524410 | \n",
413 | " 1 | \n",
414 | " 1 | \n",
415 | " 515.753259 | \n",
416 | " 1 | \n",
417 | " 0.946691 | \n",
418 | " 5.891301 | \n",
419 | " 0.000000 | \n",
420 | " 0.634306 | \n",
421 | " 1 | \n",
422 | " 1.000000 | \n",
423 | " 0.690890 | \n",
424 | " 4.364555 | \n",
425 | " 0.785398 | \n",
426 | " 1.486135 | \n",
427 | " 1.000000 | \n",
428 | "
\n",
429 | " \n",
430 | " 18 | \n",
431 | " 0.395407 | \n",
432 | " 67.114374 | \n",
433 | " 101.077298 | \n",
434 | " 1 | \n",
435 | " 1 | \n",
436 | " 1072.195065 | \n",
437 | " 1 | \n",
438 | " 0.947650 | \n",
439 | " 9.931725 | \n",
440 | " 0.000000 | \n",
441 | " 0.628814 | \n",
442 | " 1 | \n",
443 | " 1.000000 | \n",
444 | " 0.769243 | \n",
445 | " 18.274050 | \n",
446 | " 0.785398 | \n",
447 | " 2.308384 | \n",
448 | " 1.000000 | \n",
449 | "
\n",
450 | " \n",
451 | " 19 | \n",
452 | " 0.260539 | \n",
453 | " 67.178772 | \n",
454 | " 79.594214 | \n",
455 | " 1 | \n",
456 | " 1 | \n",
457 | " 1045.079893 | \n",
458 | " 1 | \n",
459 | " 0.917961 | \n",
460 | " 10.319726 | \n",
461 | " 0.000000 | \n",
462 | " 0.510430 | \n",
463 | " 1 | \n",
464 | " 1.000000 | \n",
465 | " 0.581642 | \n",
466 | " 3.335164 | \n",
467 | " 0.785398 | \n",
468 | " 0.947010 | \n",
469 | " 1.000000 | \n",
470 | "
\n",
471 | " \n",
472 | " 20 | \n",
473 | " 0.703406 | \n",
474 | " 19.260239 | \n",
475 | " 54.118630 | \n",
476 | " 3 | \n",
477 | " 1 | \n",
478 | " 1107.358426 | \n",
479 | " 1 | \n",
480 | " 0.812929 | \n",
481 | " 7.760413 | \n",
482 | " 0.973723 | \n",
483 | " 0.838693 | \n",
484 | " 1 | \n",
485 | " 1.000000 | \n",
486 | " 0.860563 | \n",
487 | " 17.806775 | \n",
488 | " -1.079399 | \n",
489 | " 3.525976 | \n",
490 | " 1.000000 | \n",
491 | "
\n",
492 | " \n",
493 | " 21 | \n",
494 | " 0.910697 | \n",
495 | " 4.003498 | \n",
496 | " 24.207299 | \n",
497 | " 3 | \n",
498 | " 1 | \n",
499 | " 471.463513 | \n",
500 | " 3 | \n",
501 | " 0.571687 | \n",
502 | " 3.399559 | \n",
503 | " 0.816497 | \n",
504 | " 0.954304 | \n",
505 | " 1 | \n",
506 | " 1.000000 | \n",
507 | " 0.958508 | \n",
508 | " 16.862082 | \n",
509 | " 0.785398 | \n",
510 | " 2.573782 | \n",
511 | " 1.000000 | \n",
512 | "
\n",
513 | " \n",
514 | " 22 | \n",
515 | " 0.093249 | \n",
516 | " 91.542862 | \n",
517 | " 81.020293 | \n",
518 | " 2 | \n",
519 | " 1 | \n",
520 | " 2710.330746 | \n",
521 | " 1 | \n",
522 | " 0.792945 | \n",
523 | " 23.096967 | \n",
524 | " 1.000000 | \n",
525 | " 0.305368 | \n",
526 | " 1 | \n",
527 | " 1.000000 | \n",
528 | " 0.385155 | \n",
529 | " -1.115229 | \n",
530 | " -0.000000 | \n",
531 | " -0.179978 | \n",
532 | " 1.000000 | \n",
533 | "
\n",
534 | " \n",
535 | " 23 | \n",
536 | " 0.715277 | \n",
537 | " 15.166230 | \n",
538 | " 47.731062 | \n",
539 | " 1 | \n",
540 | " 1 | \n",
541 | " 1202.503286 | \n",
542 | " 1 | \n",
543 | " 0.739104 | \n",
544 | " 9.086271 | \n",
545 | " 0.000000 | \n",
546 | " 0.845741 | \n",
547 | " 1 | \n",
548 | " 1.000000 | \n",
549 | " 0.861057 | \n",
550 | " 14.364030 | \n",
551 | " 0.785398 | \n",
552 | " 3.259654 | \n",
553 | " 1.000000 | \n",
554 | "
\n",
555 | " \n",
556 | " 24 | \n",
557 | " 0.685366 | \n",
558 | " 13.870372 | \n",
559 | " 41.349537 | \n",
560 | " 1 | \n",
561 | " 1 | \n",
562 | " 1111.537159 | \n",
563 | " 1 | \n",
564 | " 0.678296 | \n",
565 | " 8.619004 | \n",
566 | " 0.000000 | \n",
567 | " 0.827868 | \n",
568 | " 1 | \n",
569 | " 1.000000 | \n",
570 | " 0.853383 | \n",
571 | " 11.468612 | \n",
572 | " 0.785398 | \n",
573 | " 3.258344 | \n",
574 | " 1.000000 | \n",
575 | "
\n",
576 | " \n",
577 | " 25 | \n",
578 | " 0.967529 | \n",
579 | " 1.939034 | \n",
580 | " 16.440156 | \n",
581 | " 2 | \n",
582 | " 1 | \n",
583 | " 76.477538 | \n",
584 | " 1 | \n",
585 | " 0.854898 | \n",
586 | " 0.710196 | \n",
587 | " 1.000000 | \n",
588 | " 0.983631 | \n",
589 | " 1 | \n",
590 | " 1.000000 | \n",
591 | " 0.984844 | \n",
592 | " 37.328373 | \n",
593 | " -0.000000 | \n",
594 | " 4.812284 | \n",
595 | " 1.000000 | \n",
596 | "
\n",
597 | " \n",
598 | " 26 | \n",
599 | " 0.767611 | \n",
600 | " 13.882786 | \n",
601 | " 45.326397 | \n",
602 | " 2 | \n",
603 | " 1 | \n",
604 | " 676.987912 | \n",
605 | " 1 | \n",
606 | " 0.836882 | \n",
607 | " 5.436353 | \n",
608 | " 1.000000 | \n",
609 | " 0.876134 | \n",
610 | " 1 | \n",
611 | " 1.000000 | \n",
612 | " 0.889752 | \n",
613 | " 6.269088 | \n",
614 | " -1.570796 | \n",
615 | " 1.902158 | \n",
616 | " 1.000000 | \n",
617 | "
\n",
618 | " \n",
619 | " 27 | \n",
620 | " 0.930175 | \n",
621 | " 2.462914 | \n",
622 | " 17.642670 | \n",
623 | " 1 | \n",
624 | " 0 | \n",
625 | " 206.902461 | \n",
626 | " 1 | \n",
627 | " 0.667864 | \n",
628 | " 1.704095 | \n",
629 | " 0.000000 | \n",
630 | " 0.964456 | \n",
631 | " 1 | \n",
632 | " 1.000000 | \n",
633 | " 0.970015 | \n",
634 | " 27.855153 | \n",
635 | " 0.785398 | \n",
636 | " 4.023720 | \n",
637 | " 1.000000 | \n",
638 | "
\n",
639 | " \n",
640 | " 28 | \n",
641 | " 0.261620 | \n",
642 | " 68.575738 | \n",
643 | " 80.258912 | \n",
644 | " 1 | \n",
645 | " 0 | \n",
646 | " 1070.372701 | \n",
647 | " 1 | \n",
648 | " 0.917187 | \n",
649 | " 9.589195 | \n",
650 | " 0.000000 | \n",
651 | " 0.511488 | \n",
652 | " 1 | \n",
653 | " 1.000000 | \n",
654 | " 0.603616 | \n",
655 | " -1.250691 | \n",
656 | " 0.785398 | \n",
657 | " 0.410181 | \n",
658 | " 1.000000 | \n",
659 | "
\n",
660 | " \n",
661 | " 29 | \n",
662 | " 0.902652 | \n",
663 | " 4.931866 | \n",
664 | " 26.000587 | \n",
665 | " 1 | \n",
666 | " 0 | \n",
667 | " 339.060142 | \n",
668 | " 2 | \n",
669 | " 0.698788 | \n",
670 | " 2.587353 | \n",
671 | " 0.000000 | \n",
672 | " 0.950080 | \n",
673 | " 1 | \n",
674 | " 1.000000 | \n",
675 | " 0.956115 | \n",
676 | " -2.063368 | \n",
677 | " 0.785398 | \n",
678 | " 0.330669 | \n",
679 | " 1.000000 | \n",
680 | "
\n",
681 | " \n",
682 | " 30 | \n",
683 | " 0.734374 | \n",
684 | " 13.271575 | \n",
685 | " 41.045604 | \n",
686 | " 1 | \n",
687 | " 0 | \n",
688 | " 764.440458 | \n",
689 | " 1 | \n",
690 | " 0.774556 | \n",
691 | " 6.075485 | \n",
692 | " 0.000000 | \n",
693 | " 0.856956 | \n",
694 | " 1 | \n",
695 | " 1.000000 | \n",
696 | " 0.877986 | \n",
697 | " 10.371450 | \n",
698 | " 0.785398 | \n",
699 | " 2.732954 | \n",
700 | " 1.000000 | \n",
701 | "
\n",
702 | " \n",
703 | " 31 | \n",
704 | " 0.796651 | \n",
705 | " 8.850966 | \n",
706 | " 36.167901 | \n",
707 | " 1 | \n",
708 | " 0 | \n",
709 | " 744.449611 | \n",
710 | " 2 | \n",
711 | " 0.719489 | \n",
712 | " 5.844501 | \n",
713 | " 0.000000 | \n",
714 | " 0.892553 | \n",
715 | " 1 | \n",
716 | " 0.500000 | \n",
717 | " 0.907006 | \n",
718 | " 9.479998 | \n",
719 | " 0.785398 | \n",
720 | " 2.440652 | \n",
721 | " 1.000000 | \n",
722 | "
\n",
723 | " \n",
724 | " 32 | \n",
725 | " 0.556797 | \n",
726 | " 29.835254 | \n",
727 | " 67.609871 | \n",
728 | " 3 | \n",
729 | " 0 | \n",
730 | " 1915.346237 | \n",
731 | " 1 | \n",
732 | " 0.792155 | \n",
733 | " 14.092974 | \n",
734 | " 0.816497 | \n",
735 | " 0.746188 | \n",
736 | " 1 | \n",
737 | " 1.000000 | \n",
738 | " 0.778298 | \n",
739 | " 6.931407 | \n",
740 | " -1.570796 | \n",
741 | " 2.470876 | \n",
742 | " 1.000000 | \n",
743 | "
\n",
744 | " \n",
745 | " 33 | \n",
746 | " 0.417277 | \n",
747 | " 37.402680 | \n",
748 | " 62.858996 | \n",
749 | " 1 | \n",
750 | " 0 | \n",
751 | " 1324.236072 | \n",
752 | " 1 | \n",
753 | " 0.833564 | \n",
754 | " 11.814829 | \n",
755 | " 0.000000 | \n",
756 | " 0.645970 | \n",
757 | " 1 | \n",
758 | " 1.000000 | \n",
759 | " 0.695718 | \n",
760 | " 3.726547 | \n",
761 | " 0.785398 | \n",
762 | " 1.598454 | \n",
763 | " 1.000000 | \n",
764 | "
\n",
765 | " \n",
766 | "
\n",
767 | "
"
768 | ],
769 | "text/plain": [
770 | " ASM Mean Standard deviation area class contrast \\\n",
771 | "0 0.285761 68.329483 80.143673 1 1 649.131029 \n",
772 | "1 0.705255 20.817018 53.099576 4 1 513.964730 \n",
773 | "2 0.199130 65.610310 69.660937 2 1 1148.323650 \n",
774 | "3 0.485445 32.539409 59.810339 1 1 1172.741442 \n",
775 | "4 0.156314 71.760435 68.979068 1 1 1211.991816 \n",
776 | "5 0.463674 50.102691 84.501250 4 1 1238.504372 \n",
777 | "6 0.907863 4.988141 25.988603 1 1 172.607495 \n",
778 | "7 0.260564 70.583559 81.069658 1 1 842.722556 \n",
779 | "8 0.573069 36.023047 73.131522 1 1 805.433210 \n",
780 | "9 0.633504 27.142666 61.111553 1 1 533.784332 \n",
781 | "10 0.261735 50.155227 63.147629 4 1 1453.747638 \n",
782 | "11 0.074712 69.451484 64.199162 1 1 3221.858235 \n",
783 | "12 0.759811 13.884441 46.267787 2 1 1132.556210 \n",
784 | "13 0.589494 30.934881 65.637766 1 1 801.299792 \n",
785 | "14 0.384479 48.080427 80.484196 1 1 2133.200925 \n",
786 | "15 0.778703 10.491275 37.393469 2 1 843.009283 \n",
787 | "16 0.398255 56.224655 85.979169 1 1 1399.588375 \n",
788 | "17 0.402345 48.683848 69.524410 1 1 515.753259 \n",
789 | "18 0.395407 67.114374 101.077298 1 1 1072.195065 \n",
790 | "19 0.260539 67.178772 79.594214 1 1 1045.079893 \n",
791 | "20 0.703406 19.260239 54.118630 3 1 1107.358426 \n",
792 | "21 0.910697 4.003498 24.207299 3 1 471.463513 \n",
793 | "22 0.093249 91.542862 81.020293 2 1 2710.330746 \n",
794 | "23 0.715277 15.166230 47.731062 1 1 1202.503286 \n",
795 | "24 0.685366 13.870372 41.349537 1 1 1111.537159 \n",
796 | "25 0.967529 1.939034 16.440156 2 1 76.477538 \n",
797 | "26 0.767611 13.882786 45.326397 2 1 676.987912 \n",
798 | "27 0.930175 2.462914 17.642670 1 0 206.902461 \n",
799 | "28 0.261620 68.575738 80.258912 1 0 1070.372701 \n",
800 | "29 0.902652 4.931866 26.000587 1 0 339.060142 \n",
801 | "30 0.734374 13.271575 41.045604 1 0 764.440458 \n",
802 | "31 0.796651 8.850966 36.167901 1 0 744.449611 \n",
803 | "32 0.556797 29.835254 67.609871 3 0 1915.346237 \n",
804 | "33 0.417277 37.402680 62.858996 1 0 1324.236072 \n",
805 | "\n",
806 | " convex_area correlation dissimilarity eccentricity energy \\\n",
807 | "0 1 0.949574 6.389174 0.000000 0.534566 \n",
808 | "1 1 0.909389 4.205555 0.960659 0.839795 \n",
809 | "2 1 0.881897 10.931032 1.000000 0.446240 \n",
810 | "3 1 0.836718 10.137509 0.000000 0.696739 \n",
811 | "4 1 0.872515 11.240619 0.000000 0.395366 \n",
812 | "5 1 0.913783 11.061152 0.790569 0.680936 \n",
813 | "6 1 0.872368 1.554613 0.000000 0.952818 \n",
814 | "7 6 0.936146 8.949130 0.000000 0.510454 \n",
815 | "8 1 0.925122 7.788582 0.000000 0.757013 \n",
816 | "9 1 0.929096 5.000503 0.000000 0.795929 \n",
817 | "10 1 0.818771 13.007935 0.985171 0.511601 \n",
818 | "11 1 0.605837 27.802803 0.000000 0.273335 \n",
819 | "12 1 0.737879 8.292701 1.000000 0.871671 \n",
820 | "13 1 0.907853 7.110836 0.000000 0.767785 \n",
821 | "14 2 0.836730 17.714324 0.000000 0.620064 \n",
822 | "15 1 0.698083 6.545541 1.000000 0.882442 \n",
823 | "16 1 0.906245 12.259983 0.000000 0.631074 \n",
824 | "17 1 0.946691 5.891301 0.000000 0.634306 \n",
825 | "18 1 0.947650 9.931725 0.000000 0.628814 \n",
826 | "19 1 0.917961 10.319726 0.000000 0.510430 \n",
827 | "20 1 0.812929 7.760413 0.973723 0.838693 \n",
828 | "21 3 0.571687 3.399559 0.816497 0.954304 \n",
829 | "22 1 0.792945 23.096967 1.000000 0.305368 \n",
830 | "23 1 0.739104 9.086271 0.000000 0.845741 \n",
831 | "24 1 0.678296 8.619004 0.000000 0.827868 \n",
832 | "25 1 0.854898 0.710196 1.000000 0.983631 \n",
833 | "26 1 0.836882 5.436353 1.000000 0.876134 \n",
834 | "27 1 0.667864 1.704095 0.000000 0.964456 \n",
835 | "28 1 0.917187 9.589195 0.000000 0.511488 \n",
836 | "29 2 0.698788 2.587353 0.000000 0.950080 \n",
837 | "30 1 0.774556 6.075485 0.000000 0.856956 \n",
838 | "31 2 0.719489 5.844501 0.000000 0.892553 \n",
839 | "32 1 0.792155 14.092974 0.816497 0.746188 \n",
840 | "33 1 0.833564 11.814829 0.000000 0.645970 \n",
841 | "\n",
842 | " euler_number extent homogeneity kurtosis orientation skew \\\n",
843 | "0 1 1.000000 0.644000 -1.026102 0.785398 0.437733 \n",
844 | "1 1 1.000000 0.868637 18.922656 -0.692724 3.211472 \n",
845 | "2 1 1.000000 0.557320 1.464032 0.785398 0.428516 \n",
846 | "3 1 1.000000 0.742990 6.616861 0.785398 2.119195 \n",
847 | "4 1 1.000000 0.528619 7.126889 0.785398 -0.620239 \n",
848 | "5 1 1.000000 0.711775 5.339253 0.785398 1.564511 \n",
849 | "6 1 1.000000 0.958756 7.774738 0.785398 1.405681 \n",
850 | "7 1 0.555556 0.584418 1.142813 0.785398 0.459309 \n",
851 | "8 1 1.000000 0.780964 10.373986 0.785398 2.327461 \n",
852 | "9 1 1.000000 0.825971 9.395330 0.785398 2.165754 \n",
853 | "10 1 1.000000 0.608632 0.558993 0.392699 0.730281 \n",
854 | "11 1 1.000000 0.369646 0.162413 0.785398 -0.301308 \n",
855 | "12 1 1.000000 0.881897 9.690550 -0.000000 2.362078 \n",
856 | "13 1 1.000000 0.800447 8.048518 0.785398 2.631491 \n",
857 | "14 1 1.000000 0.656342 1.611123 0.785398 1.470478 \n",
858 | "15 1 1.000000 0.895013 10.229401 -0.785398 2.633580 \n",
859 | "16 1 1.000000 0.685764 8.218121 0.785398 1.575065 \n",
860 | "17 1 1.000000 0.690890 4.364555 0.785398 1.486135 \n",
861 | "18 1 1.000000 0.769243 18.274050 0.785398 2.308384 \n",
862 | "19 1 1.000000 0.581642 3.335164 0.785398 0.947010 \n",
863 | "20 1 1.000000 0.860563 17.806775 -1.079399 3.525976 \n",
864 | "21 1 1.000000 0.958508 16.862082 0.785398 2.573782 \n",
865 | "22 1 1.000000 0.385155 -1.115229 -0.000000 -0.179978 \n",
866 | "23 1 1.000000 0.861057 14.364030 0.785398 3.259654 \n",
867 | "24 1 1.000000 0.853383 11.468612 0.785398 3.258344 \n",
868 | "25 1 1.000000 0.984844 37.328373 -0.000000 4.812284 \n",
869 | "26 1 1.000000 0.889752 6.269088 -1.570796 1.902158 \n",
870 | "27 1 1.000000 0.970015 27.855153 0.785398 4.023720 \n",
871 | "28 1 1.000000 0.603616 -1.250691 0.785398 0.410181 \n",
872 | "29 1 1.000000 0.956115 -2.063368 0.785398 0.330669 \n",
873 | "30 1 1.000000 0.877986 10.371450 0.785398 2.732954 \n",
874 | "31 1 0.500000 0.907006 9.479998 0.785398 2.440652 \n",
875 | "32 1 1.000000 0.778298 6.931407 -1.570796 2.470876 \n",
876 | "33 1 1.000000 0.695718 3.726547 0.785398 1.598454 \n",
877 | "\n",
878 | " solidity \n",
879 | "0 1.000000 \n",
880 | "1 1.000000 \n",
881 | "2 1.000000 \n",
882 | "3 1.000000 \n",
883 | "4 1.000000 \n",
884 | "5 1.000000 \n",
885 | "6 1.000000 \n",
886 | "7 0.833333 \n",
887 | "8 1.000000 \n",
888 | "9 1.000000 \n",
889 | "10 1.000000 \n",
890 | "11 1.000000 \n",
891 | "12 1.000000 \n",
892 | "13 1.000000 \n",
893 | "14 1.000000 \n",
894 | "15 1.000000 \n",
895 | "16 1.000000 \n",
896 | "17 1.000000 \n",
897 | "18 1.000000 \n",
898 | "19 1.000000 \n",
899 | "20 1.000000 \n",
900 | "21 1.000000 \n",
901 | "22 1.000000 \n",
902 | "23 1.000000 \n",
903 | "24 1.000000 \n",
904 | "25 1.000000 \n",
905 | "26 1.000000 \n",
906 | "27 1.000000 \n",
907 | "28 1.000000 \n",
908 | "29 1.000000 \n",
909 | "30 1.000000 \n",
910 | "31 1.000000 \n",
911 | "32 1.000000 \n",
912 | "33 1.000000 "
913 | ]
914 | },
915 | "execution_count": 3,
916 | "metadata": {},
917 | "output_type": "execute_result"
918 | }
919 | ],
920 | "source": [
921 | "ds = pd.read_csv('feature_all.csv', index_col=0)\n",
922 | "# drop feature that will not have impact \n",
923 | "# ds.drop(['solidity','euler_number' , 'extent'], 1 , inplace=True) \n",
924 | "ds"
925 | ]
926 | },
927 | {
928 | "cell_type": "code",
929 | "execution_count": null,
930 | "metadata": {
931 | "collapsed": true
932 | },
933 | "outputs": [],
934 | "source": [
935 | "y = ds['class']\n",
936 | "classifier_f = open('Y_labels.pickle','wb')\n",
937 | "pickle.dump(y, classifier_f)\n",
938 | "classifier_f.close() \n",
939 | "\n",
940 | "y\n",
941 | "# df1 = ds[['solidity','euler_number' , 'extent']]\n",
942 | "# df1"
943 | ]
944 | },
945 | {
946 | "cell_type": "code",
947 | "execution_count": 6,
948 | "metadata": {},
949 | "outputs": [
950 | {
951 | "name": "stderr",
952 | "output_type": "stream",
953 | "text": [
954 | "/home/mu7ammad/anaconda2/lib/python2.7/site-packages/pandas/core/indexing.py:477: SettingWithCopyWarning: \n",
955 | "A value is trying to be set on a copy of a slice from a DataFrame.\n",
956 | "Try using .loc[row_indexer,col_indexer] = value instead\n",
957 | "\n",
958 | "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
959 | " self.obj[item] = s\n"
960 | ]
961 | },
962 | {
963 | "data": {
964 | "text/html": [
965 | "\n",
966 | "
\n",
967 | " \n",
968 | " \n",
969 | " | \n",
970 | " ASM | \n",
971 | " Mean | \n",
972 | " Standard deviation | \n",
973 | " area | \n",
974 | " class | \n",
975 | " contrast | \n",
976 | " convex_area | \n",
977 | " correlation | \n",
978 | " dissimilarity | \n",
979 | " eccentricity | \n",
980 | " energy | \n",
981 | " homogeneity | \n",
982 | " kurtosis | \n",
983 | " orientation | \n",
984 | " skew | \n",
985 | "
\n",
986 | " \n",
987 | " \n",
988 | " \n",
989 | " 0 | \n",
990 | " 1.092141 | \n",
991 | " 2.624224 | \n",
992 | " 3.840221 | \n",
993 | " 0.970061 | \n",
994 | " 1 | \n",
995 | " 0.939040 | \n",
996 | " 0.970061 | \n",
997 | " 9.055433 | \n",
998 | " 1.083513 | \n",
999 | " 0.000000 | \n",
1000 | " 2.669151 | \n",
1001 | " 3.858496 | \n",
1002 | " -0.124202 | \n",
1003 | " 1.157596 | \n",
1004 | " 0.338596 | \n",
1005 | "
\n",
1006 | " \n",
1007 | " 1 | \n",
1008 | " 2.695391 | \n",
1009 | " 0.799487 | \n",
1010 | " 2.544357 | \n",
1011 | " 3.880245 | \n",
1012 | " 1 | \n",
1013 | " 0.743507 | \n",
1014 | " 0.970061 | \n",
1015 | " 8.672212 | \n",
1016 | " 0.713202 | \n",
1017 | " 1.994929 | \n",
1018 | " 4.193190 | \n",
1019 | " 5.204400 | \n",
1020 | " 2.290448 | \n",
1021 | " -1.021004 | \n",
1022 | " 2.484145 | \n",
1023 | "
\n",
1024 | " \n",
1025 | " 2 | \n",
1026 | " 0.761049 | \n",
1027 | " 2.519793 | \n",
1028 | " 3.337922 | \n",
1029 | " 1.940122 | \n",
1030 | " 1 | \n",
1031 | " 1.661177 | \n",
1032 | " 0.970061 | \n",
1033 | " 8.410037 | \n",
1034 | " 1.853747 | \n",
1035 | " 2.076624 | \n",
1036 | " 2.228128 | \n",
1037 | " 3.339160 | \n",
1038 | " 0.177210 | \n",
1039 | " 1.157596 | \n",
1040 | " 0.331467 | \n",
1041 | "
\n",
1042 | " \n",
1043 | " 3 | \n",
1044 | " 1.855307 | \n",
1045 | " 1.249690 | \n",
1046 | " 2.865914 | \n",
1047 | " 0.970061 | \n",
1048 | " 1 | \n",
1049 | " 1.696500 | \n",
1050 | " 0.970061 | \n",
1051 | " 7.979204 | \n",
1052 | " 1.719177 | \n",
1053 | " 0.000000 | \n",
1054 | " 3.478897 | \n",
1055 | " 4.451593 | \n",
1056 | " 0.800922 | \n",
1057 | " 1.157596 | \n",
1058 | " 1.639244 | \n",
1059 | "
\n",
1060 | " \n",
1061 | " 4 | \n",
1062 | " 0.597412 | \n",
1063 | " 2.755991 | \n",
1064 | " 3.305250 | \n",
1065 | " 0.970061 | \n",
1066 | " 1 | \n",
1067 | " 1.753280 | \n",
1068 | " 0.970061 | \n",
1069 | " 8.320575 | \n",
1070 | " 1.906249 | \n",
1071 | " 0.000000 | \n",
1072 | " 1.974107 | \n",
1073 | " 3.167200 | \n",
1074 | " 0.862657 | \n",
1075 | " 1.157596 | \n",
1076 | " -0.479769 | \n",
1077 | "
\n",
1078 | " \n",
1079 | "
\n",
1080 | "
"
1081 | ],
1082 | "text/plain": [
1083 | " ASM Mean Standard deviation area class contrast \\\n",
1084 | "0 1.092141 2.624224 3.840221 0.970061 1 0.939040 \n",
1085 | "1 2.695391 0.799487 2.544357 3.880245 1 0.743507 \n",
1086 | "2 0.761049 2.519793 3.337922 1.940122 1 1.661177 \n",
1087 | "3 1.855307 1.249690 2.865914 0.970061 1 1.696500 \n",
1088 | "4 0.597412 2.755991 3.305250 0.970061 1 1.753280 \n",
1089 | "\n",
1090 | " convex_area correlation dissimilarity eccentricity energy \\\n",
1091 | "0 0.970061 9.055433 1.083513 0.000000 2.669151 \n",
1092 | "1 0.970061 8.672212 0.713202 1.994929 4.193190 \n",
1093 | "2 0.970061 8.410037 1.853747 2.076624 2.228128 \n",
1094 | "3 0.970061 7.979204 1.719177 0.000000 3.478897 \n",
1095 | "4 0.970061 8.320575 1.906249 0.000000 1.974107 \n",
1096 | "\n",
1097 | " homogeneity kurtosis orientation skew \n",
1098 | "0 3.858496 -0.124202 1.157596 0.338596 \n",
1099 | "1 5.204400 2.290448 -1.021004 2.484145 \n",
1100 | "2 3.339160 0.177210 1.157596 0.331467 \n",
1101 | "3 4.451593 0.800922 1.157596 1.639244 \n",
1102 | "4 3.167200 0.862657 1.157596 -0.479769 "
1103 | ]
1104 | },
1105 | "execution_count": 6,
1106 | "metadata": {},
1107 | "output_type": "execute_result"
1108 | }
1109 | ],
1110 | "source": [
1111 | "# compute mean and std for all class 1 samples\n",
1112 | "# sample - (all feature samples std)\n",
1113 | "\n",
1114 | "ds_class_1 = ds[(ds['class' ] > 0)]\n",
1115 | "\n",
1116 | "ds_class_1.loc[0:,'Mean'] = (ds_class_1['Mean']) / ds_class_1['Mean'].std()\n",
1117 | "ds_class_1.loc[0:,'ASM'] = (ds_class_1['ASM'] / ds_class_1['ASM'].std()) \n",
1118 | "ds_class_1.loc[0:,'contrast'] = (ds_class_1['contrast']) / ds_class_1['contrast'].std()\n",
1119 | "ds_class_1.loc[0:,'correlation'] = (ds_class_1['correlation'] / ds_class_1['correlation'].std()) \n",
1120 | "ds_class_1.loc[0:,'dissimilarity'] = (ds_class_1['dissimilarity'] / ds_class_1['dissimilarity'].std())\n",
1121 | "ds_class_1.loc[0:,'energy'] = (ds_class_1['energy'] / ds_class_1['energy'].std())\n",
1122 | "ds_class_1.loc[0:,'kurtosis'] = (ds_class_1['kurtosis'] / ds_class_1['kurtosis'].std())\n",
1123 | "ds_class_1.loc[0:,'skew'] = (ds_class_1['skew'] / ds_class_1['skew'].std())\n",
1124 | "ds_class_1.loc[0:,'Standard deviation'] = (ds_class_1['Standard deviation'] / ds_class_1['Standard deviation'].std())\n",
1125 | "ds_class_1.loc[0:,'area'] = (ds_class_1['area']) / ds_class_1['area'].std()\n",
1126 | "ds_class_1.loc[0:,'homogeneity'] = (ds_class_1['homogeneity'] / ds_class_1['homogeneity'].std()) \n",
1127 | "ds_class_1.loc[0:,'orientation'] = (ds_class_1['orientation'] / ds_class_1['orientation'].std()) \n",
1128 | "ds_class_1.loc[0:,'convex_area'] = (ds_class_1['convex_area'] / ds_class_1['convex_area'].std())\n",
1129 | "ds_class_1.loc[0:,'eccentricity'] = (ds_class_1['eccentricity'] / ds_class_1['eccentricity'].std())\n",
1130 | "\n",
1131 | "ds_class_1.head()\n",
1132 | "\n",
1133 | "# old Version\n",
1134 | "# ds_class_1['Mean'] = (ds_class_1['Mean'] - ds_class_1['Mean'].mean()) / ds_class_1['Mean'].std()"
1135 | ]
1136 | },
1137 | {
1138 | "cell_type": "code",
1139 | "execution_count": 8,
1140 | "metadata": {
1141 | "scrolled": true
1142 | },
1143 | "outputs": [
1144 | {
1145 | "data": {
1146 | "text/html": [
1147 | "\n",
1148 | "
\n",
1149 | " \n",
1150 | " \n",
1151 | " | \n",
1152 | " ASM | \n",
1153 | " Mean | \n",
1154 | " Standard deviation | \n",
1155 | " area | \n",
1156 | " class | \n",
1157 | " contrast | \n",
1158 | " convex_area | \n",
1159 | " correlation | \n",
1160 | " dissimilarity | \n",
1161 | " eccentricity | \n",
1162 | " energy | \n",
1163 | " homogeneity | \n",
1164 | " kurtosis | \n",
1165 | " orientation | \n",
1166 | " skew | \n",
1167 | "
\n",
1168 | " \n",
1169 | " \n",
1170 | " \n",
1171 | " 27 | \n",
1172 | " 3.675442 | \n",
1173 | " 0.103896 | \n",
1174 | " 0.759560 | \n",
1175 | " 1.322876 | \n",
1176 | " 0 | \n",
1177 | " 0.351665 | \n",
1178 | " 2.04939 | \n",
1179 | " 7.777457 | \n",
1180 | " 0.367719 | \n",
1181 | " 0.000000 | \n",
1182 | " 5.711422 | \n",
1183 | " 6.987396 | \n",
1184 | " 2.766757 | \n",
1185 | " 0.881917 | \n",
1186 | " 3.038178 | \n",
1187 | "
\n",
1188 | " \n",
1189 | " 28 | \n",
1190 | " 1.033749 | \n",
1191 | " 2.892825 | \n",
1192 | " 3.455344 | \n",
1193 | " 1.322876 | \n",
1194 | " 0 | \n",
1195 | " 1.819276 | \n",
1196 | " 2.04939 | \n",
1197 | " 10.680891 | \n",
1198 | " 2.069208 | \n",
1199 | " 0.000000 | \n",
1200 | " 3.028985 | \n",
1201 | " 4.348078 | \n",
1202 | " -0.124227 | \n",
1203 | " 0.881917 | \n",
1204 | " 0.309714 | \n",
1205 | "
\n",
1206 | " \n",
1207 | " 29 | \n",
1208 | " 3.566690 | \n",
1209 | " 0.208048 | \n",
1210 | " 1.119389 | \n",
1211 | " 1.322876 | \n",
1212 | " 0 | \n",
1213 | " 0.576289 | \n",
1214 | " 4.09878 | \n",
1215 | " 8.137577 | \n",
1216 | " 0.558313 | \n",
1217 | " 0.000000 | \n",
1218 | " 5.626291 | \n",
1219 | " 6.887265 | \n",
1220 | " -0.204947 | \n",
1221 | " 0.881917 | \n",
1222 | " 0.249677 | \n",
1223 | "
\n",
1224 | " \n",
1225 | " 30 | \n",
1226 | " 2.901766 | \n",
1227 | " 0.559853 | \n",
1228 | " 1.767115 | \n",
1229 | " 1.322876 | \n",
1230 | " 0 | \n",
1231 | " 1.299293 | \n",
1232 | " 2.04939 | \n",
1233 | " 9.019912 | \n",
1234 | " 1.311000 | \n",
1235 | " 0.000000 | \n",
1236 | " 5.074820 | \n",
1237 | " 6.324473 | \n",
1238 | " 1.030161 | \n",
1239 | " 0.881917 | \n",
1240 | " 2.063564 | \n",
1241 | "
\n",
1242 | " \n",
1243 | " 31 | \n",
1244 | " 3.147842 | \n",
1245 | " 0.373372 | \n",
1246 | " 1.557117 | \n",
1247 | " 1.322876 | \n",
1248 | " 0 | \n",
1249 | " 1.265316 | \n",
1250 | " 4.09878 | \n",
1251 | " 8.378647 | \n",
1252 | " 1.261158 | \n",
1253 | " 0.000000 | \n",
1254 | " 5.285620 | \n",
1255 | " 6.533516 | \n",
1256 | " 0.941616 | \n",
1257 | " 0.881917 | \n",
1258 | " 1.842856 | \n",
1259 | "
\n",
1260 | " \n",
1261 | " 32 | \n",
1262 | " 2.200098 | \n",
1263 | " 1.258582 | \n",
1264 | " 2.910772 | \n",
1265 | " 3.968627 | \n",
1266 | " 0 | \n",
1267 | " 3.255448 | \n",
1268 | " 2.04939 | \n",
1269 | " 9.224852 | \n",
1270 | " 3.041057 | \n",
1271 | " 2.645751 | \n",
1272 | " 4.418862 | \n",
1273 | " 5.606383 | \n",
1274 | " 0.688473 | \n",
1275 | " -1.763834 | \n",
1276 | " 1.865677 | \n",
1277 | "
\n",
1278 | " \n",
1279 | " 33 | \n",
1280 | " 1.648805 | \n",
1281 | " 1.577809 | \n",
1282 | " 2.706235 | \n",
1283 | " 1.322876 | \n",
1284 | " 0 | \n",
1285 | " 2.250759 | \n",
1286 | " 2.04939 | \n",
1287 | " 9.707077 | \n",
1288 | " 2.549467 | \n",
1289 | " 0.000000 | \n",
1290 | " 3.825375 | \n",
1291 | " 5.011526 | \n",
1292 | " 0.370145 | \n",
1293 | " 0.881917 | \n",
1294 | " 1.206940 | \n",
1295 | "
\n",
1296 | " \n",
1297 | "
\n",
1298 | "
"
1299 | ],
1300 | "text/plain": [
1301 | " ASM Mean Standard deviation area class contrast \\\n",
1302 | "27 3.675442 0.103896 0.759560 1.322876 0 0.351665 \n",
1303 | "28 1.033749 2.892825 3.455344 1.322876 0 1.819276 \n",
1304 | "29 3.566690 0.208048 1.119389 1.322876 0 0.576289 \n",
1305 | "30 2.901766 0.559853 1.767115 1.322876 0 1.299293 \n",
1306 | "31 3.147842 0.373372 1.557117 1.322876 0 1.265316 \n",
1307 | "32 2.200098 1.258582 2.910772 3.968627 0 3.255448 \n",
1308 | "33 1.648805 1.577809 2.706235 1.322876 0 2.250759 \n",
1309 | "\n",
1310 | " convex_area correlation dissimilarity eccentricity energy \\\n",
1311 | "27 2.04939 7.777457 0.367719 0.000000 5.711422 \n",
1312 | "28 2.04939 10.680891 2.069208 0.000000 3.028985 \n",
1313 | "29 4.09878 8.137577 0.558313 0.000000 5.626291 \n",
1314 | "30 2.04939 9.019912 1.311000 0.000000 5.074820 \n",
1315 | "31 4.09878 8.378647 1.261158 0.000000 5.285620 \n",
1316 | "32 2.04939 9.224852 3.041057 2.645751 4.418862 \n",
1317 | "33 2.04939 9.707077 2.549467 0.000000 3.825375 \n",
1318 | "\n",
1319 | " homogeneity kurtosis orientation skew \n",
1320 | "27 6.987396 2.766757 0.881917 3.038178 \n",
1321 | "28 4.348078 -0.124227 0.881917 0.309714 \n",
1322 | "29 6.887265 -0.204947 0.881917 0.249677 \n",
1323 | "30 6.324473 1.030161 0.881917 2.063564 \n",
1324 | "31 6.533516 0.941616 0.881917 1.842856 \n",
1325 | "32 5.606383 0.688473 -1.763834 1.865677 \n",
1326 | "33 5.011526 0.370145 0.881917 1.206940 "
1327 | ]
1328 | },
1329 | "execution_count": 8,
1330 | "metadata": {},
1331 | "output_type": "execute_result"
1332 | }
1333 | ],
1334 | "source": [
1335 | "# compute mean and std for all class( 0 )amples\n",
1336 | "# sample - (all feature samples std\n",
1337 | "\n",
1338 | "ds_class_0= ds[(ds['class' ] < 1 )]\n",
1339 | "\n",
1340 | "ds_class_0.loc[0:,'Mean'] = (ds_class_0['Mean']) / ds_class_0['Mean'].std()\n",
1341 | "ds_class_0.loc[0:,'ASM'] = (ds_class_0['ASM'] / ds_class_0['ASM'].std()) \n",
1342 | "ds_class_0.loc[0:,'contrast'] = (ds_class_0['contrast']) / ds_class_0['contrast'].std()\n",
1343 | "ds_class_0.loc[0:,'correlation'] = (ds_class_0['correlation'] / ds_class_0['correlation'].std()) \n",
1344 | "ds_class_0.loc[0:,'dissimilarity'] = (ds_class_0['dissimilarity'] / ds_class_0['dissimilarity'].std())\n",
1345 | "ds_class_0.loc[0:,'energy'] = (ds_class_0['energy'] / ds_class_0['energy'].std())\n",
1346 | "ds_class_0.loc[0:,'kurtosis'] = (ds_class_0['kurtosis'] / ds_class_0['kurtosis'].std())\n",
1347 | "ds_class_0.loc[0:,'skew'] = (ds_class_0['skew'] / ds_class_0['skew'].std())\n",
1348 | "ds_class_0.loc[0:,'Standard deviation'] = (ds_class_0['Standard deviation'] / ds_class_0['Standard deviation'].std())\n",
1349 | "ds_class_0.loc[0:,'area'] = (ds_class_0['area']) / ds_class_0['area'].std()\n",
1350 | "ds_class_0.loc[0:,'homogeneity'] = (ds_class_0['homogeneity'] / ds_class_0['homogeneity'].std()) \n",
1351 | "ds_class_0.loc[0:,'orientation'] = (ds_class_0['orientation'] / ds_class_0['orientation'].std()) \n",
1352 | "ds_class_0.loc[0:,'convex_area'] = (ds_class_0['convex_area'] / ds_class_0['convex_area'].std())\n",
1353 | "ds_class_0.loc[0:,'eccentricity'] = (ds_class_0['eccentricity'] / ds_class_0['eccentricity'].std())\n",
1354 | "ds_class_0"
1355 | ]
1356 | },
1357 | {
1358 | "cell_type": "code",
1359 | "execution_count": 2,
1360 | "metadata": {},
1361 | "outputs": [
1362 | {
1363 | "ename": "NameError",
1364 | "evalue": "name 'ds_class_1' is not defined",
1365 | "output_type": "error",
1366 | "traceback": [
1367 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
1368 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
1369 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# concating all features\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mframes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mds_class_1\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mds_class_0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mds_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mframes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mignore_index\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mds_new\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Feature_all_optomized.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1370 | "\u001b[0;31mNameError\u001b[0m: name 'ds_class_1' is not defined"
1371 | ]
1372 | }
1373 | ],
1374 | "source": [
1375 | "# concating all features\n",
1376 | "frames = [ds_class_1 , ds_class_0]\n",
1377 | "ds_new = pd.concat(frames, ignore_index=True)\n",
1378 | "ds_new.to_csv('Feature_all_optomized.csv')"
1379 | ]
1380 | },
1381 | {
1382 | "cell_type": "code",
1383 | "execution_count": 25,
1384 | "metadata": {},
1385 | "outputs": [
1386 | {
1387 | "name": "stdout",
1388 | "output_type": "stream",
1389 | "text": [
1390 | "[ 7.80227669e-02 4.93247634e-02 6.73377622e-02 3.87812490e-02\n",
1391 | " 3.85950344e-03 2.42998184e-06 5.94999809e-02 3.44621575e-02\n",
1392 | " 0.00000000e+00]\n",
1393 | "1.55522222219\n"
1394 | ]
1395 | }
1396 | ],
1397 | "source": [
1398 | "# feature selection with regression for texture feature only\n",
1399 | "from sklearn.linear_model import Lasso\n",
1400 | "\n",
1401 | "df = pd.read_csv('brain-cancer.data')\n",
1402 | "# replace (?) with -99999 in data set \n",
1403 | "df.replace('?', -99999, inplace=True )\n",
1404 | "# # remove id colunm cause it has no effect in learning\n",
1405 | "df.drop(['id'],1, inplace=True)\n",
1406 | "feature = df.drop(['class'],1)\n",
1407 | "labels =df['class'] \n",
1408 | "classifier_f = open('n_y.pickle','wb')\n",
1409 | "pickle.dump(labels, classifier_f)\n",
1410 | "classifier_f.close() \n",
1411 | "regression = Lasso(alpha=0.1)\n",
1412 | "regression.fit(feature, labels)\n",
1413 | "# regression.predict([[0.62169290804739175,0.92176444484776776, 1]])\n",
1414 | "print(regression.coef_)\n",
1415 | "print(regression.intercept_)"
1416 | ]
1417 | },
1418 | {
1419 | "cell_type": "code",
1420 | "execution_count": 34,
1421 | "metadata": {},
1422 | "outputs": [
1423 | {
1424 | "name": "stdout",
1425 | "output_type": "stream",
1426 | "text": [
1427 | "[-0.09523236 -0.04956931 -0.06734667]\n",
1428 | "1.75573420055\n"
1429 | ]
1430 | }
1431 | ],
1432 | "source": [
1433 | "# feature = df[['homogeneity', 'correlation','convex_area']]\n",
1434 | "# labels =df['class'] \n",
1435 | "# # print(labels)\n",
1436 | "# print(feature)\n",
1437 | "regression = Lasso(alpha=0.1)\n",
1438 | "regression.fit(feature, labels)\n",
1439 | "regression.predict([[0.62169290804739175,0.92176444484776776, 1]])\n",
1440 | "print(regression.coef_)\n",
1441 | "print(regression.intercept_)"
1442 | ]
1443 | },
1444 | {
1445 | "cell_type": "code",
1446 | "execution_count": 15,
1447 | "metadata": {
1448 | "scrolled": true
1449 | },
1450 | "outputs": [
1451 | {
1452 | "name": "stdout",
1453 | "output_type": "stream",
1454 | "text": [
1455 | "[ 9.99999744e-01 1.78570205e-07]\n"
1456 | ]
1457 | },
1458 | {
1459 | "data": {
1460 | "image/png": "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\n",
1461 | "text/plain": [
1462 | ""
1463 | ]
1464 | },
1465 | "metadata": {},
1466 | "output_type": "display_data"
1467 | }
1468 | ],
1469 | "source": [
1470 | "# PCA\n",
1471 | "from sklearn.decomposition import PCA , IncrementalPCA\n",
1472 | "\n",
1473 | "def do_pca(data):\n",
1474 | " pca = PCA(n_components=2)\n",
1475 | " pca.fit(data)\n",
1476 | " return pca\n",
1477 | "\n",
1478 | "data = np.array(feature)\n",
1479 | "pca = do_pca(data)\n",
1480 | "print(pca.explained_variance_ratio_)\n",
1481 | "first_pc = pca.components_[0]\n",
1482 | "second_pc = pca.components_[1]\n",
1483 | "\n",
1484 | "transformed_data = pca.transform(data)\n",
1485 | "# fil = open(\"pca_trans_data.pickle\", 'wb')\n",
1486 | "# pickle.dump( transformed_data, fil)\n",
1487 | "# fil.close()\n",
1488 | "\n",
1489 | "for ii , jj in zip(transformed_data, data):\n",
1490 | " plt.scatter( first_pc[0] * ii[0], first_pc[1]*ii[0], color='r' )\n",
1491 | " plt.scatter( second_pc[0] * ii[1], second_pc[1]*ii[1], color='b' )\n",
1492 | " plt.scatter(jj[0], jj[1], color='c')\n",
1493 | " \n",
1494 | "\n",
1495 | "plt.show()"
1496 | ]
1497 | },
1498 | {
1499 | "cell_type": "code",
1500 | "execution_count": null,
1501 | "metadata": {
1502 | "collapsed": true
1503 | },
1504 | "outputs": [],
1505 | "source": []
1506 | },
1507 | {
1508 | "cell_type": "code",
1509 | "execution_count": 16,
1510 | "metadata": {},
1511 | "outputs": [
1512 | {
1513 | "name": "stdout",
1514 | "output_type": "stream",
1515 | "text": [
1516 | "IncrementalPCA(batch_size=None, copy=True, n_components=3, whiten=False)\n",
1517 | "[ 0.43748164 0.30472306 0.23822362]\n"
1518 | ]
1519 | }
1520 | ],
1521 | "source": [
1522 | "# IncrementalPCA\n",
1523 | "ipca = IncrementalPCA(n_components=3)\n",
1524 | "print(ipca)\n",
1525 | "ipca.fit(feature)\n",
1526 | "x =ipca.transform(feature) \n",
1527 | "print(ipca.explained_variance_ratio_)"
1528 | ]
1529 | },
1530 | {
1531 | "cell_type": "code",
1532 | "execution_count": 17,
1533 | "metadata": {},
1534 | "outputs": [
1535 | {
1536 | "data": {
1537 | "text/plain": [
1538 | "{'batch_size': None, 'copy': True, 'n_components': 3, 'whiten': False}"
1539 | ]
1540 | },
1541 | "execution_count": 17,
1542 | "metadata": {},
1543 | "output_type": "execute_result"
1544 | }
1545 | ],
1546 | "source": [
1547 | "# ipca.get_covariance()\n",
1548 | "ipca.get_precision()\n",
1549 | "ipca.get_params(deep=True)"
1550 | ]
1551 | },
1552 | {
1553 | "cell_type": "markdown",
1554 | "metadata": {
1555 | "collapsed": true
1556 | },
1557 | "source": [
1558 | "## Gaussian random projection"
1559 | ]
1560 | },
1561 | {
1562 | "cell_type": "code",
1563 | "execution_count": 27,
1564 | "metadata": {
1565 | "scrolled": true
1566 | },
1567 | "outputs": [
1568 | {
1569 | "name": "stdout",
1570 | "output_type": "stream",
1571 | "text": [
1572 | "[[ 1.41077893 -1.2972483 -1.07751863 0.77263765 0.84400981]\n",
1573 | " [ -4.90712009 -3.1844581 -2.72473208 7.15423346 -3.60527062]\n",
1574 | " [ 0.43485394 -0.43889526 -0.82541805 1.19678383 0.79633641]\n",
1575 | " ..., \n",
1576 | " [ 11.30531959 -2.3013658 0.53556658 7.10337376 -6.1247155 ]\n",
1577 | " [ 6.97983086 -0.78569674 -3.0884124 7.94605818 -4.78154031]\n",
1578 | " [ 4.16263553 -1.55291019 -2.75221864 8.36268833 -8.16222221]]\n"
1579 | ]
1580 | }
1581 | ],
1582 | "source": [
1583 | "from sklearn import random_projection\n",
1584 | "\n",
1585 | "transform = random_projection.GaussianRandomProjection(n_components=5)\n",
1586 | "feature_new = transform.fit_transform(feature)\n",
1587 | "classifier_f = open('n_GaussianRandomProjection.pickle','wb')\n",
1588 | "pickle.dump(feature_new, classifier_f)\n",
1589 | "classifier_f.close() \n",
1590 | "print(feature_new)"
1591 | ]
1592 | },
1593 | {
1594 | "cell_type": "code",
1595 | "execution_count": 52,
1596 | "metadata": {},
1597 | "outputs": [
1598 | {
1599 | "data": {
1600 | "text/plain": [
1601 | "(34, 2)"
1602 | ]
1603 | },
1604 | "execution_count": 52,
1605 | "metadata": {},
1606 | "output_type": "execute_result"
1607 | }
1608 | ],
1609 | "source": []
1610 | },
1611 | {
1612 | "cell_type": "code",
1613 | "execution_count": 64,
1614 | "metadata": {},
1615 | "outputs": [
1616 | {
1617 | "data": {
1618 | "text/plain": [
1619 | "1"
1620 | ]
1621 | },
1622 | "execution_count": 64,
1623 | "metadata": {},
1624 | "output_type": "execute_result"
1625 | }
1626 | ],
1627 | "source": [
1628 | "# FeatureAgglomeration\n",
1629 | "\n",
1630 | "from sklearn.cluster import FeatureAgglomeration\n",
1631 | "\n",
1632 | "agglo = FeatureAgglomeration( n_clusters=2)\n",
1633 | "\n",
1634 | "agglo.fit(feature)\n",
1635 | "X_reduced = agglo.transform(feature)\n",
1636 | "# X_reduced\n",
1637 | "agglo.n_components_"
1638 | ]
1639 | },
1640 | {
1641 | "cell_type": "code",
1642 | "execution_count": null,
1643 | "metadata": {
1644 | "collapsed": true
1645 | },
1646 | "outputs": [],
1647 | "source": []
1648 | }
1649 | ],
1650 | "metadata": {
1651 | "kernelspec": {
1652 | "display_name": "Python 2",
1653 | "language": "python",
1654 | "name": "python2"
1655 | },
1656 | "language_info": {
1657 | "codemirror_mode": {
1658 | "name": "ipython",
1659 | "version": 2
1660 | },
1661 | "file_extension": ".py",
1662 | "mimetype": "text/x-python",
1663 | "name": "python",
1664 | "nbconvert_exporter": "python",
1665 | "pygments_lexer": "ipython2",
1666 | "version": "2.7.13"
1667 | }
1668 | },
1669 | "nbformat": 4,
1670 | "nbformat_minor": 2
1671 | }
1672 |
--------------------------------------------------------------------------------
/Final_Test_evaluate.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 12,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "# import Moduals and lib.\n",
12 | "import Evaluation\n",
13 | "import numpy as np\n",
14 | "from sklearn import preprocessing, neighbors, svm\n",
15 | "from sklearn.cluster import KMeans\n",
16 | "from sklearn.linear_model import LinearRegression\n",
17 | "from sklearn.model_selection import train_test_split\n",
18 | "import pandas as pd\n",
19 | "import warnings\n",
20 | "from matplotlib import pyplot as plt\n",
21 | "from matplotlib import style\n",
22 | "from collections import Counter\n",
23 | "import pickle\n",
24 | "import random\n",
25 | "from sklearn import metrics\n",
26 | "style.use('fivethirtyeight')"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "## Preparing Data "
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 13,
39 | "metadata": {
40 | "collapsed": true
41 | },
42 | "outputs": [],
43 | "source": [
44 | "# Load Feaure data\n",
45 | "fil = open('n_GaussianRandomProjection.pickle', 'rb')\n",
46 | "X = pickle.load(fil)\n",
47 | "fil.close()\n",
48 | "\n",
49 | "# Load labels of this Feature\n",
50 | "fil = open('n_y.pickle', 'rb')\n",
51 | "Y = pickle.load(fil)\n",
52 | "fil.close()\n",
53 | "for i in range(len(Y)):\n",
54 | " if Y[i] == 2:\n",
55 | " Y[i] = 0\n",
56 | " elif Y[i] == 4:\n",
57 | " Y[i] = 1\n",
58 | "\n",
59 | "# split data into Train and Teast\n",
60 | "\n",
61 | "x_train , x_test, y_train , y_test = train_test_split(X, Y, test_size=0.4)\n"
62 | ]
63 | },
64 | {
65 | "cell_type": "code",
66 | "execution_count": null,
67 | "metadata": {
68 | "collapsed": true
69 | },
70 | "outputs": [],
71 | "source": []
72 | },
73 | {
74 | "cell_type": "markdown",
75 | "metadata": {},
76 | "source": [
77 | "## Train and Test with SVM , KNN, Linear Regerassion,Kmeans"
78 | ]
79 | },
80 | {
81 | "cell_type": "code",
82 | "execution_count": 14,
83 | "metadata": {
84 | "collapsed": true
85 | },
86 | "outputs": [],
87 | "source": [
88 | "# implementing the k-nearest neighbors classifier\n",
89 | "Knn_Cl = neighbors.KNeighborsClassifier(n_neighbors=3)\n",
90 | "Knn_Cl.fit(x_train, y_train)\n",
91 | "\n",
92 | "# prediction\n",
93 | "Knn_y_pred_class = Knn_Cl.predict(x_test)"
94 | ]
95 | },
96 | {
97 | "cell_type": "markdown",
98 | "metadata": {},
99 | "source": [
100 | "## Evaluate KNN"
101 | ]
102 | },
103 | {
104 | "cell_type": "code",
105 | "execution_count": 4,
106 | "metadata": {},
107 | "outputs": [
108 | {
109 | "name": "stdout",
110 | "output_type": "stream",
111 | "text": [
112 | "('Accuracy: ', 0.93928571428571428)\n",
113 | "('Null Accuracy: ', 0.6642857142857144)\n",
114 | "('TP :', 81)\n",
115 | "('TN', 182)\n",
116 | "('FP', 4)\n",
117 | "('FN', 13)\n",
118 | "('Misclassifier Rate :', 0.060714285714285714)\n",
119 | "(' Sensitivity or recall rate :', 0.86170212765957444)\n",
120 | "('Specificity: ', 0.978494623655914)\n",
121 | "('FALSE Positive Rate: ', 0.021505376344086023)\n",
122 | "('Precision: ', 0.95294117647058818)\n",
123 | "0.96922900938\n"
124 | ]
125 | },
126 | {
127 | "data": {
128 | "image/png": "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\ny72DQr6vJwAAAABJRU5ErkJggg==\n",
129 | "text/plain": [
130 | ""
131 | ]
132 | },
133 | "metadata": {},
134 | "output_type": "display_data"
135 | }
136 | ],
137 | "source": [
138 | "evaluation = Evaluation.evaluation_fun (Knn_Cl, y_test, Knn_y_pred_class,x_test)\n",
139 | "evaluation.Accuracy()\n",
140 | "evaluation.Confusion_Matrix()\n",
141 | "evaluation.ROC_Curves()\n"
142 | ]
143 | },
144 | {
145 | "cell_type": "markdown",
146 | "metadata": {},
147 | "source": [
148 | "## SVM"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": 15,
154 | "metadata": {
155 | "collapsed": true
156 | },
157 | "outputs": [],
158 | "source": [
159 | "# implementing the svm classifier\n",
160 | "SVM_CL= svm.SVC(probability=True)\n",
161 | "SVM_CL.fit(x_train,y_train)\n",
162 | "\n",
163 | "# prediction\n",
164 | "SVM_y_pred_class = SVM_CL.predict(x_test)\n",
165 | "y_pred_prob = SVM_CL.predict_proba(x_test)[:, 1]"
166 | ]
167 | },
168 | {
169 | "cell_type": "code",
170 | "execution_count": 16,
171 | "metadata": {},
172 | "outputs": [
173 | {
174 | "name": "stdout",
175 | "output_type": "stream",
176 | "text": [
177 | "('Accuracy: ', 0.9464285714285714)\n",
178 | "('Null Accuracy: ', 0.6535714285714286)\n",
179 | "('TP :', 97)\n",
180 | "('TN', 168)\n",
181 | "('FP', 15)\n",
182 | "('FN', 0)\n",
183 | "('Misclassifier Rate :', 0.053571428571428568)\n",
184 | "(' Sensitivity or recall rate :', 1.0)\n",
185 | "('Specificity: ', 0.91803278688524592)\n",
186 | "('FALSE Positive Rate: ', 0.081967213114754092)\n",
187 | "('Precision: ', 0.8660714285714286)\n",
188 | "0.980339135823\n"
189 | ]
190 | },
191 | {
192 | "data": {
193 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAE0CAYAAABU5IhCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtcjOn/P/DXNKQShpSSDg5pySFnwlLOcq4clxWtQ7Fr\nFxt29+Msae2SpUWyy6oVarEiOiCRaIU9WDmUY0knQsrU7w+/5rujqe7JzBS9no9Hj4f7uu57rvdc\nat5z3/d1XbcoOzu7CERERNWQVmUHQEREVFmYBImIqNpiEiQiomqLSZCIiKotJkEiIqq2mASJiKja\nYhIkUoG0tDTMnj0bbdq0QYMGDSCRSJCSklLZYZFAs2fPrrL/Z46OjpBIJCXKCwoKsHbtWnTq1AmN\nGjWCRCLBnj17kJKSAolEgtmzZ1dCtO8eJsFKVvzH998fY2NjdOrUCV988QXu3LlT5vE5OTlYv349\n+vfvD0tLSxgZGaFVq1aYNGkSDh8+XG77WVlZ+PbbbzF48GA0b94cDRs2hIWFBQYOHIi1a9fi/v37\nqnqr7zV3d3cEBQWhbdu2mD9/Pjw9PVGvXj2NxrBnzx5IJBJ4eXlptF2qHD/88APWrl0LfX19eHh4\nwNPTE23btq3ssN45NSo7AHpt6NChsl/gjIwMnDp1CgEBAQgNDUVkZCSaNWtW4pi4uDhMnjwZ6enp\naNGiBZycnFCvXj2kpKTgxIkTOHLkCPr374+AgADUrVu3xPHHjh3DzJkzkZOTg6ZNm2Lo0KEwMjLC\n06dPcfnyZaxbtw4bNmzA2bNnFbZPr+Xn5yM6OhpWVlYICgqq7HDoPfPjjz/ixYsXJcrDw8MBAMHB\nwWjUqJGsvKCgAPHx8Qr/5qkkJsEqwtHREZMmTZJtS6VSjB07FpGRkfj222+xZcsWuf2vX78OFxcX\n5ObmYtWqVXB3d4eW1v+d2GdkZGD69OmIiIiAq6sr9u3bJ1d/5swZfPTRRxCLxfD19cXkyZMhEonk\n2rh58yaWLFmC3NxcNb3r90NaWhoKCwthZGRU2aHQe8jMzExh+cOHDwFALgECQM2aNdGyZUu1x/W+\n4OXQKkosFmPy5MkAgEuXLpWo//LLL/H06VPMnTsXc+bMkUtwAGBgYIBffvkF5ubmiIyMREhIiKyu\nsLAQn3/+OV69eoU1a9ZgypQpJRIgADRv3hx79+7FBx98IChmqVSKn376CUOGDIG5uTmMjY3Rvn17\nzJo1C3///bdsv7Luv5R2P6P4mJiYGPz666+wt7dH48aN0atXLxw4cAASiQQLFy5UGNerV69gbW0N\nU1PTEgn94MGDGDlypOxScseOHbFs2TI8efJE0Htu27at7Aw+NjZWdkn7v/Hn5+fD19cXvXr1gomJ\nCZo0aYL+/ftj9+7dKCoquWqhRCJB27ZtkZOTg0WLFqFNmzYwMDAo8UXozf7x8PAAAHh7e8tdXo+J\niQEAeHl5yW0ratfR0VGurPiYPXv2IDo6GkOGDIGpqSmaN28Od3d3ZGdnAwAuX76McePGwdLSEqam\nphg/fnyp99eSk5Ph7u6O1q1bw9DQEFZWVpg6dSr+/PPPEvv+9xLvhQsX4OzsDAsLC0gkElnbZXnx\n4gV8fX1hb2+PJk2aoHHjxujcuTPmz5+Pu3fvlnv8nj17MHnyZLRv3x7GxsYwMzPDoEGDSj3jT05O\nxrx589CxY0cYGxvDwsICXbt2hYeHh1x7RUVFCAoKwqBBg9CiRQs0atQIrVu3xvDhw/Hzzz/Lveab\n9wTf/Psp/n8u/j0s655gXl4eNm3ahD59+sDU1BSNGzdG3759ERAQUOJ3sfh1HB0d8fDhQ3h4eMDa\n2hoNGjTA77//Xm7fvSt4JliFFf9S1qgh/9+UnJyMkydPolatWvj8889LPV5fXx9z587FwoULsXPn\nTjg7OwN4fRaYlJSExo0bY+rUqeXGoa2tXe4++fn5GDduHKKjo2Fqaiq7NHvv3j1ERkaiXbt2aN26\ndbmvU54ffvgBp06dwpAhQ9CnTx/k5+fD0dER9erVw4EDB7B69eoS8UZGRiItLQ0TJkyAvr6+rHz+\n/PnYsWMHTE1NMWzYMEgkEly8eBEbNmzA8ePHER4ejjp16pQZz+zZs3Hnzh38+OOPMDMzw8SJEwFA\n9oFUUFAAZ2dnnD59Gi1atMC0adOQn5+P33//HXPnzkVcXBw2b95c4nXz8/MxYsQI5OTkYMCAAdDV\n1YWpqWmpcTg6OiInJwdhYWHo2bMnevXqJaszNzcvv2PLcfToUZw4cQJDhgzB1KlTcerUKQQGBuLu\n3bv45ptvMGrUKPTu3RsfffQREhIScOzYMaSkpCA2NlbuC1piYiJGjhyJJ0+eYODAgbCxscHt27dx\n+PBhHDt2DIGBgXBwcCjRfnx8PL777jv07NkTU6ZMQVpaGsRicZkxZ2dnY/jw4bh69SpatGiBiRMn\nQkdHB8nJydi3bx/s7e1LPcsqNn/+fHzwwQews7ODsbExMjMzceLECcyePRtJSUn43//+J9s3NTUV\n9vb2ePr0Kfr164dhw4YhPz8f9+7dw+HDh+Hi4iJrb+XKlfjuu+9gbm6OkSNHol69ekhLS8Off/6J\nX3/9FR9//HGpMTk6OsLc3Bx+fn548uQJPD09AaDce9BPnz7FqFGjkJCQgHbt2sl+VyMjI/HFF1/g\nwoUL8PPzK3FcVlYWBgwYgLp162LkyJEoKipC/fr1y2zrXcIkWEW9evUKu3btAgB0795dri4uLg4A\nYGtrW+4vo729PQDg4sWLkEqlEIvFsuN79epV7geJUGvXrkV0dDQGDhyIXbt2QUdHR1ZXUFCArKws\nlbQTExOD48ePo127dnLlTk5OCAgIQHh4OIYPHy5XV/ytvfiPHgD27t2LHTt2YNiwYdi+fTt0dXVl\ndT4+Pli9ejXWrl2L1atXlxmPu7s7UlJS8OOPP8Lc3ByLFy+Wq9+8eTNOnz4NBwcH/Prrr7IE/fXX\nX2Pw4MHYs2cPBg4ciJEjR8odl5aWhlatWuHo0aPQ09Mrt1+GDRsmS4K9evUqEcfbCg8PR1hYGLp0\n6QLgdZLu27cvYmJiMHbsWPj5+cneQ1FREZydnREZGYmjR4/Kzi6Lioowa9Ys5OTkYMuWLXL/HydP\nnsTo0aMxY8YMXLlypcR7jo6OxoYNGwR9aSu2YMECXL16FVOmTMGGDRvkkvHz58/x8uXLcl/j3Llz\naNq0qVxZfn4+nJ2dsXHjRkyfPl325eTgwYPIysrCmjVr4O7uLnfMy5cvUVBQINveuXMnTExMcO7c\nOdSuXVtu34yMjDJjGjZsGIYNG4bAwEA8efJE8P/1kiVLkJCQgGXLlmHevHlysU2ePBlBQUEYMWIE\nhgwZInfc33//jXHjxmHz5s0lvpC/D3g5tIo4cuQIvLy84OXlhYULF6Jbt26Ijo5Gq1at8OWXX8rt\nm5aWBgBlnhkUK97n5cuXyMzMlDu+cePGKoldKpXC398fOjo6+O677+QSIPD6HoWq7pd9/PHHJRIg\n8H8JLjAwUK48OzsbR48ehYWFhdzZ0ZYtWyAWi7Fp0ya5BAgAX3zxBQwMDBAcHPzW8RZ/kXnzDLVe\nvXqys4g3L38VW7lypaAEqAnOzs6yBAi8vjowatQoAICNjY1cEheJRLKrDlevXpWVnz9/HteuXUPH\njh3lEiAA9O3bF8OGDcPjx48RFhZWov22bdsqlQDT09MREhICIyMjrFmzpsTtAj09PUFnM28mQOD1\ne3dzc4NUKsXp06dL1L/5+wQAtWrVkrsKAbz+u1CUVAwMDMqNS1lZWVkICgpCu3bt5BJgcWzFv4t7\n9+4tcay2tjZWrVr1XiZAQOCZ4P379xEWFib7Jc7MzIRIJEKDBg1gbW2Nbt26YfDgweVeWqDShYWF\nlfjjb9++PQ4fPlzlR3ldv34dT548ga2tLZo0aaLWtjp16qSwvHPnzrC2tkZERAQeP36Mhg0bAgAO\nHDiAly9fYvz48bL7ns+fP8eVK1dQv359/PjjjwpfT1tbGw8fPkRmZiYaNGhQoVifPn2KW7duyaat\nvKlPnz4AXt9Pe5OOjg7atGlToXbVQdEXD2Nj41LrTExMAAAPHjyQlRW/zw8//FBhG3379sXhw4dx\n+fJlWRItVtr/e2n++OMPFBYWonv37iWSjzLu3r2LjRs34tSpU7h3716JUZrFg1MAYMiQIVi5ciUW\nLlyIiIgI9OvXD126dIGNjU2JJOzi4oJt27aha9euGDVqFHr06IFu3bqp7TJjQkICXr16BS0tLYVT\naF69egXg9d/ym8zNzWFoaKiWuKqCMpPgyZMn4evri9OnT0MqlcLU1BQWFhawsLBAUVERsrOzERcX\nhwMHDmDRokXo3bs3PvvsM9klOBJu8+bNmDRpEqRSKe7evYv169dj9+7dcHNzw6+//ir3R1R8ViVk\nDl/xPtra2rIP8+LRZP/9gHobOTk5AP7vg0+dyjqjnDhxIpYuXYp9+/bJBgUEBQVBJBJhwoQJsv2y\ns7NRVFSEzMxMeHt7l9lebm5uhZNg8eCa0mLW09ND3bp1Zf33Xw0bNlQ4WKmyKPoiVnwpvay6/14C\nLK8/in8vFfWHslcSVPE7mZycDAcHB2RnZ6NHjx6wt7dH3bp1IRaLcefOHQQFBcldUjU3N0dUVBS8\nvb0RERGBI0eOyGKfMWMGPv/8c1m/eHl5oVmzZggMDISvry82btwILS0t9OnTBytWrFD5fL/iq0CJ\niYlITEwsdT9FI8Hf91HPpSZBR0dHxMfHo3///vDz84O9vb3s2/WbHj9+jKioKPz2228YN24cunbt\n+l6NHtIksVgMS0tLbNq0CWlpaTh+/Dj8/f0xY8YM2T49evQA8PoXOjs7W+FqEsVOnjwJAOjSpYvs\nD7D4HuOZM2dk9wnfRvEN+f9+Ky5LcUKXSqUl6hR9AP5XWYlh3LhxWLFiBQIDAzF79mxcv34dFy9e\nRM+ePWFpaSnbr/hDu3Xr1jh79qygmCuiuJ1Hjx4prH/+/DmePHmiMMmqIwGW1e9CRlq+rfL6o/gy\nvaKkqmx/KPs7qcjmzZuRmZkp+4L6X/v371c4QrRly5bYsWMHpFIp/vrrL5w+fRr+/v5YtWoVpFKp\nbBCLWCzGrFmzMGvWLGRmZiIuLg6HDh3C3r17MXr0aMTHx1f4y5cixX06Y8YMrFu3Tqljq9KXMXUo\n9Z6gjY0N/vjjDwQFBcHFxaXUBAi8/tY6duxYBAYGIiEhQSWjAOn1YJOaNWti7dq1ckP2LS0t8eGH\nH+Lly5fYsGFDqcc/e/YMP/zwAwDA1dVVVt6rVy9YWVnhwYMHsntWZcnPzy+zvmXLlqhXrx6uXbuG\ne/fulft6xUlb0b6KpoMIZWxsDAcHB1y9ehV//vmnwgExwOtRs61bt0ZSUlK5gxDeRp06ddCsWTM8\nevQI165dK1FffD/J1tZWJe0Vf5lRlOQA9fW7UO3btweAUqdonDp1CoBq+qNTp07Q0tJCXFxchee5\n3rp1CwAwYsSIEnWxsbFlHisWi9GuXTvMmTMH+/fvB4BSTwwaNGiAoUOH4scff4STkxMeP36Mc+fO\nVSjm0nTu3BlaWloqf933QalJcN26dRW6x2dmZqb0Nw1SrFmzZvjoo4+QmZmJTZs2ydV5e3ujdu3a\n8PX1hZ+fX4k5PpmZmZg8eTKSk5PRr18/jBkzRlanpaWF77//HjVq1MDixYsRGBiocL7ajRs3MHbs\nWIUf4P8lFovh5uaGvLw8fPHFFyVG3b169Uru23/nzp0BAD/99JNcuykpKeVenixP8Tf2X375BcHB\nwahdu3aJkZcA4OHhgYKCAri7uyscufr06VNcvHjxrWIBIJvr+fXXX5e4NLhixQoAwJQpU966HQCy\nM4fSvogU9/svv/wiF0tGRga++eYblcRQlm7dusHa2hoJCQklBmCcOnUKhw8fhoGBAYYOHfrWbTVs\n2BBOTk549OgRvvrqKxQWFsrVv3jxotwRy8VTS86cOSNXHhkZqfDLY/GVmTcVn+EWD3J6+fKlwmRU\nVFSE9PR0uX1VpWHDhhg3bhyuXr0KLy8v2T3A/7p//77Ce4LvO8HDfc6cOSM3uo40Y+HChQgKCoKf\nnx9mzpwpOyNv1aoVgoODMWXKFCxevBgBAQHo27cv6tSpg7t37yI8PBxPnjyRLZv25o35Xr164Zdf\nfsHMmTPh7u6Ob7/9Fr1790bDhg3x9OlTXLlyBfHx8QpHtSni6emJhIQEHD9+HB07dsTgwYNRt25d\n3L9/H6dOncJnn30mGzY+dOhQtGzZEiEhIbh//z66du2K1NRUHD16FIMGDcKBAwcq3F9DhgxB/fr1\nsWPHDhQUFJSYG1hs0qRJuHz5MrZt2wZbW1v069cP5ubmyMnJwZ07d3D27FnY29uXGG2qLA8PD0RE\nRCAiIgJ2dnYYNGgQCgoKcPjwYTx48ADjx4+XjbJ8W127dkXt2rUREhKCmjVrwszMDCKRCOPGjYO5\nuTk6deqE3r17IyYmBn379kXfvn2RlZWF48ePo0+fPgonq6uSSCSCn58fRo0ahVmzZiE0NFQ2T/DQ\noUPQ1tbGjz/+qLIE4OPjg3/++Qc///wzYmNj0a9fP+jo6ODOnTuIiorC5s2bMWzYsFKPnz59Ovbs\n2YOpU6di5MiRMDY2xj///IOIiAiMHj1abgEKAPj111+xc+dOdOvWDc2aNUODBg1w9+5dhIWFQSwW\n49NPPwXwOgEPGTIElpaW6NChA8zMzFBQUIAzZ87g6tWr6NKlC3r37q2SPvivdevW4datW/D29sbe\nvXthZ2eHRo0aIS0tDTdu3MCFCxewevXqarfajOAkOHz4cJiZmWHs2LEYN24crKys1BkX/X+NGzfG\ntGnTsGXLFnz77bdYu3atrK5nz55ISEjA9u3bcezYMezduxcvXrxAgwYN0LNnT0yYMAHDhw8v9Zr+\n4MGDcenSJQQEBCAiIgKHDx/GkydPoKenh5YtW2LBggWYOnWqoKkU2tra2L9/P3766Sf8+uuv2Lt3\nL6RSKRo1aoR+/frJDZaqVasWDh48iP/973+IiIhAYmIimjdvjjVr1qBPnz5vlQRr1aoFZ2dnbN++\nHUDJS6H/tW7dOgwcOBA7duzAmTNnkJWVhXr16qFx48Zwc3MrMUKxIrS1tRESEgI/Pz8EBwfD398f\nWlpaaNWqFRYtWiQ7U1QFiUSCX375Bd7e3ggNDZVdBuzevbvsrOaXX37B8uXLceTIEWzfvh3m5uay\nVYfept+F6tixI06ePAkfHx+cPHkSkZGRqFevHhwdHTF//nyFI00rSiKR4Pjx4/jxxx8REhKCXbt2\nQUtLC40bN4aLi0u5l13btGmDw4cPY9WqVQgPD4dUKkWbNm2we/du1KtXr0QSdHZ2RkFBAc6fP4+r\nV6/i+fPnMDY2xuDBg+Hu7i4b4Vq7dm2sWLECMTExuHDhAo4ePQpdXV1YWFhg1apVcHV1Vct0hDp1\n6uD333/H7t27sW/fPvz+++/Iy8uDoaEhLCwssHTpUowePVrl7VZ1ouzs7JLXwRQIDQ3F3r17ERUV\nhVevXsHW1hbjx4+Hk5OTWua1EBERqZvgJFgsKysLBw4cwL59+xAfH4+aNWvCwcEB48ePx5AhQ1Cr\nVi11xUpERKRSSq8YU79+fbi5uSE8PByXLl3CggULcPPmTUybNg0tW7bEZ599JluWqzyxsbEYP348\nWrVqJVuktzx//fUXhg4dCmNjY7Rq1Qre3t4KB3UQERGV562WTdPV1YWenh50dHRkiejw4cMYOnQo\n+vfvj6SkpDKPf/bsGVq3bo21a9cqXGroTU+ePMHo0aNhZGSEqKgorF27Fps2bZJNAyAiIlKG0pdD\nnz9/jkOHDiE4OFg2z6n4cqijoyPEYrFs0IOJiQkiIiIEva6pqSnWrVtXYlLqf+3YsQPLli3D9evX\nZUnTx8cHAQEB+Pvvv9/7SZ1ERKRagocgRUREIDg4GGFhYbIzuKVLl2Ls2LElHuro5OSEp0+flvp8\nt4qKj49Hjx495M4a+/Xrh9WrVyMlJUVuVRAiIqLyCE6CLi4uMDQ0xOTJkzFhwoRyhzLb2NgoXGnh\nbTx69KjEcP3ihV0fPXrEJEhEREoRnASDgoIwYMAAwetMdunSRe7RK0RERFWN4IExJ06cwJUrV0qt\nT0xMxPz581USVGmMjIxkywoVK96uKiudS3bel/t5V5Q3iIn+D/tKOPaVcthfmic4CQYEBODGjRul\n1t+6dQs7d+5USVCl6dq1K86dO4e8vDxZWXR0NExMTGBhYaHWtomI6P2jsifLZ2VlKT1RPjc3F1eu\nXMGVK1dQWFiIe/fu4cqVK7h79y4AYPny5XL3FZ2dnaGrqwt3d3f8/fffOHToEDZs2AB3d3eODCUi\nIqWVeU/w/PnzchPfw8PDFT6INTs7G8HBwUo/QunSpUsYPny4bNvLywteXl6YMGEC/Pz8kJqaitu3\nb8vq69Wrh9DQUCxYsAD29vaQSCTw8PDAnDlzlGpXFaLv52He2Wyk5Cp+bA0REVV9Zc4TXLt2rezR\nNiKRqMyVWZo2bQo/Pz9069ZN9VFWQe33pQpKgNmuphqI5u0lJSVxUXSB2FfCsa+Uw/7SvDLPBD08\nPDBlyhQUFRWhTZs2WLduHRwdHeX2EYlE0NPTkz3JuboQkgAt9N/uie1ERKReZSbBOnXqoE6dOgBe\nT1Q3NjaWbVcnFbn0aaEvxgY7iRqjIiKityV4nmB1PkUXkgDflcueRET0f0pNgi4uLhCJRAgKCoJY\nLIaLi0u5LyYSiRAcHKzSACuT0DNAXvYkIno3lZoEs7Ky5AbDFG9XJ0ITIC97EhG9m0pNgm8+/UHo\n0yDeJ4oSoIW+GJddjCshGiIiUjXBk+ULCgrUGcc7gWd9RETvF8FJ0MrKCnPmzEF0dDQKCwvVGVOV\nddnFGPamOpUdBhERqYjg0aEDBw7EoUOHEBgYCAMDA4wcORJjxoyBnZ2dOuPTKK4CQ0RUvQg+E9y2\nbRuSkpLw008/oVevXggKCsKwYcNgY2ODr776CgkJCeqMUyOYAImIqhelFtCuVasWRowYgZ07dyIp\nKQnbt2+Hra0tduzYgQEDBqBDhw7qilMjykqAnAZBRPT+qfBTJPT09ODk5IStW7di1apV0NfXR0pK\niipjqzI4IIaI6P0k+J7gf7148QLHjh1DSEgIIiIi8PLlSzRt2hQzZsxQdXyViqvAEBG93wQnwfz8\nfBw/fhyhoaEIDw/Hs2fPYGpqCjc3Nzg5OcHW1ladcapV8YAYIiKqXgQnwRYtWiA3NxeGhoaYMGEC\nnJyc0L17d3XGpjEcEENEVD0JToKjRo2Ck5MTevfuDS0tlT2QvkoobWUYIiJ6vwnOZvb29mjevHmp\nCfDevXsIDQ1VWWCViQNhiIiqB8FJcPr06Th37lyp9fHx8Zg+fbpKgqpsXBmGiKh6EJwEi58mUZq8\nvDyIxbyESERE744y7wk+fPgQDx48kG0nJycrXBkmOzsbu3fvhpmZmeojJCIiUpMyk+DPP/8Mb29v\niEQiiEQieHl5wcvLq8R+RUVFEIlE2LBhg9oCJSIiUrUyk+Dw4cPRrFkzFBUVYdasWZg+fTq6du0q\nt49IJIKenh7at2+PJk2aqDVYIiIiVSozCdrY2MDGxgYA8Pz5c/Tp0wfNmjXTSGCawEnyRETVm+B5\ngq6uruqMo1JwkjwRUfVWahLcuHEjRCIR5s6dC5FIhI0bN5b7YiKRCJ9++qlKA1QnTpInIqreRNnZ\n2QrnPtSvXx8ikQipqanQ1tZG/fr1y38xkQiZmZkqD1JdJDvvy20XT5KvjnMEk5KSYGVlVdlhvBPY\nV8Kxr5TD/tK8Us8EU1NTAQDa2tpy2++zyy7GlR0CERFpUKlJsFatWmVuExERvesErxhjYmKCkJCQ\nUusPHjwIExMTlQRFRESkCYKTYF5eHqTS0kdSFhQU4OXLlyoJioiISBOUeiaSSCQqtS4xMRESCZ+8\nQERE744y5wlu374d/v7+su3//e9/8PHxKbFfdnY20tPT4ezsrPoIiYiI1KTMJFinTh3Zfb7r169D\nIpHAyMhIbh+RSIQWLVqgQ4cOmDVrlvoiJSIiUrEyk+D48eMxfvx4AMCAAQOwZMkS2NvbayQwIiIi\ndRO8bNqJEyfUGQcREZHGlTowJj09Henp6SW2y/tRlr+/P9q1a4dGjRqhT58+OHv2bJn7R0ZGYsCA\nAWjSpAmaNWuGCRMm4MaNG0q3S0REVOqZYMuWLeWWTSveLo8yy6aFhIRg0aJFWL9+Pbp37w5/f3+4\nuLggLi5O4QN6k5OTMXHiRMycORNbt25Fbm4uli1bBhcXF1y6dElwu0REREAZSXD9+vUQiUSoWbOm\n3LYqbd68GRMnTsTHH38MAPDx8UFkZCQCAgKwdOnSEvtfvnwZBQUFWLp0KcTi1wtdz5s3DyNGjEBG\nRgYMDAxUGh8REb3fSk2C06ZNK3P7beXn5yMxMRFz586VK3dwcMD58+cVHtOhQwfUrFkTu3btwpQp\nU/D8+XMEBgaiY8eOTIBERKQ0pSbLK5KdnY3k5GSlj8vIyIBUKoWhoaFcuaGhIR49eqTwGHNzc4SG\nhsLLywtGRkYwNzfHP//8g71791YkdCIiquYEjw7ds2cPLly4gA0bNsjKvvnmG2zevBkA0LFjR+zf\nv1+tq8akpaVh7ty5GDduHJydnZGbm4s1a9Zg6tSpOHz4MLS0FOf0pKSkUl5RT+B+1UN1f//KYF8J\nx75SDvurfKp83JTgJLht2zZ07NhRtn327Fn88MMPGDlyJD744AP4+vpi/fr1WLlypaDXMzAwgFgs\nLjGiND09vcSE/GLbt2+Hnp6eXBvbtm2DjY0Nzp8/jx49eig8rtQOO3Nf2H7VAJ9jJhz7Sjj2lXLY\nX5on+HJocnIyWrduLdsODQ2FiYkJduzYgUWLFsHNzQ1HjhwR3LC2tjZsbW0RHR0tVx4dHY1u3bop\nPObFixeyATHFircLCwsFt01ERAQokQQLCgpkD9gFgKioKPTv31+WhKysrPDw4UOlGvfw8EBgYCB2\n7dqFf/9z36UyAAAgAElEQVT9F56enkhNTYWrqysAYPny5RgxYoRs/4EDB+Ly5cvw9vbGzZs3kZiY\nCA8PDzRp0gS2trZKtU1ERCQ4CVpYWCA2NhYAcOXKFdy6dQv9+vWT1aenp0NfX1+pxseMGQMvLy/4\n+Pigd+/eiIuLQ3BwMMzNzQG8fpr97du3Zfv36dMH/v7+OHLkCD788EM4OzujZs2a2L9/P2rXrq1U\n20RERILvCU6ZMgVLlizBjRs3cOfOHZiYmGDAgAGy+vPnz6Nly5ZKB+Dm5gY3NzeFdX5+fiXKnJyc\n4OTkpHQ7REREbxKcBGfPno0aNWrg+PHjaNq0Kb744gvo6b0eXZmVlYU7d+6UmsyIiIiqIsFJEAA+\n+eQTfPLJJyXK69evj3PnzqksKCIiIk1468nyRERE7yqlzgTPnDmD3bt3IyUlBdnZ2SgqKpKrF4lE\niIuLU2mARERE6iI4Cfr5+eGrr75C/fr1YWtrC1NTU3XGRUREpHaCk+APP/wAOzs77N+/Hzo6OuqM\niYiISCME3xPMzMyEk5MTEyAREb03BCfBDh064NatW+qMhYiISKMEJ0EfHx+Ehobi4MGD6oyHiIhI\nY5SaLA8Arq6uqFu3LkxNTUssZi0SiXDq1CnVRkhERKQmgpOgtrY2TExMYGJios54iIiINEZwEoyI\niFBnHERERBpXLVeMib6fh/b7Uis7DCIiqmRKJcGcnBz4+PhgxIgRsLOzw8WLFwG8XkB748aNuHnz\nplqCVLV5Z7ORkiut7DCIiKiSCb4ceu/ePQwZMgRpaWmwsrLCtWvX8OzZMwCvF9DevXs3Hjx4AG9v\nb7UFqyqKEqCFvljBnkRE9D4TnASXLl2KvLw8xMbGokGDBmjRooVcvaOjI8LDw1UeoCZY6IuxwU5S\n2WEQEZGGCU6CUVFR8PDwgJWVFTIzM0vUW1pa4v79+yoNTlMuuxhXdghERFQJBN8TzMvLg4GBQan1\nubm5KgmIiIhIUwQnQWtr6zIfnBsWFoY2bdqoJCgiIiJNEJwEZ8yYgf3792PTpk14+vSprDwlJQXu\n7u44f/68bFUZIiKid4Hge4ITJ05ESkoKli1bhuXLlwMAnJ2dIZVKIRKJsGTJEowYMUJtgRIREama\nUk+WX7x4McaNG4eDBw/i5s2bKCwsRNOmTTFq1ChYWVmpK0YiIiK1UCoJAkCzZs3w+eefqyMWIiIi\njVI6CRZLTk7G4cOH8fDhQ1hbW2Ps2LHQ1dVVZWxERERqVWYS3LlzJ7Zv345Dhw6hYcOGsvLo6Gh8\n9NFHePHiBYqKiiASibBlyxaEh4dDIuGkcyIiejeUOTr0yJEjMDIykkuAhYWFmDNnDqRSKXx8fBAd\nHQ1PT0/cuHED33//vdoDJiIiUpUyk+C1a9fQpUsXubJz587hwYMHmDFjBqZPnw5bW1t4enpixIgR\nOHbsmFqDJSIiUqUyk+Djx49hbm4uV3by5EmIRKIS0yF69OiBu3fvqj5CIiIiNSkzCTZo0ABZWVly\nZXFxcahZsybatm0rV66rqwstrWr5eEIiInpHlZm1bGxscODAAbx69QoA8PDhQ8THx6Nbt26oVauW\n3L7JyckwNuZC1ERE9O4oc3To559/DkdHR9jb26NTp044efIkCgoKMGvWrBL7Hj16FB06dFBboERE\nRKpW5pmgnZ0dtm3bhtzcXOzatQuFhYX47rvvMHToULn9Tp48ievXr2PQoEFqDZaIiEiVyp0s7+Li\nAhcXF9l8QEX69u2Lx48fqzw4IiIidRI8kqW0BEhERPSuKjUJxsfHV/hFL1y4UOFjiYiINKXUJDhs\n2DAMGzYMoaGheP78ebkv9Pz5c4SEhMDR0RHDhg1TaZBERETqUOo9wfj4eHh5eeGTTz5BrVq10Llz\nZ3To0AGWlpaQSCQoKipCdnY2UlJScOnSJVy8eBEvX76Ei4sLtmzZIjgAf39/+Pr6Ii0tDR988AG8\nvLxgZ2dX6v5FRUXw8/PDzp07kZKSgvr162PChAlYtmyZUm+ciIio1CRoaWmJrVu3Yvny5QgMDERY\nWBi2bNmCgoICuf20tbVha2uLL7/8EuPHj0ejRo0ENx4SEoJFixZh/fr16N69O/z9/eHi4oK4uDiY\nmZkpPOarr75CeHg4VqxYARsbG+Tk5CAtLU1wm0RERMVE2dnZRUJ3fvnyJW7fvo3MzEwAgIGBASwt\nLUtMnBeqX79+sLGxga+vr6ysY8eOGDlyJJYuXVpi/6SkJPTo0QOxsbGwtrauUJsAINl5X24729W0\nwq/1vkhKSuKDkQViXwnHvlIO+0vzlHqeYK1atfDBBx+opOH8/HwkJiZi7ty5cuUODg44f/68wmPC\nwsJgaWmJiIgIjB07FoWFhejZsydWrlwJQ0NDlcRFRETVR4Ufqvu2MjIyIJVKSyQvQ0NDPHr0SOEx\nycnJuHv3LkJCQrBlyxaIRCJ88803GD9+PE6cOFHq2qVJSUlvlOiVU189sR+EY18Jx75SDvurfKo8\nW660JFgRhYWFePnyJbZu3YoWLVoAALZu3YrOnTvjjz/+QOfOnRUeV6LDztwvu74a4mUY4dhXwrGv\nlMP+0rxKe+yDgYEBxGIx0tPT5crT09NhZGSk8JhGjRqhRo0asgQIAM2bN4dYLMa9e/fUGi8REb1/\nKi0JFo8qjY6OliuPjo5Gt27dFB7TvXt3vHr1Crdv35aVJScnQyqVljqalIiIqDSV+gBADw8PBAYG\nYteuXfj333/h6emJ1NRUuLq6AgCWL18u9/Devn37on379vDw8MDly5dx+fJleHh4yOYwEhERKaNS\n7wmOGTMGmZmZ8PHxQVpaGlq1aoXg4GDZ0+xTU1Plzvq0tLSwd+9eeHp6wtHRETo6OrC3t8fq1av5\nQF8iIlKaUvMEk5OTsX79esTExCAjIwNBQUHo1asXMjIysGbNGkyePBm2trbqjFclOE+wJN6QF459\nJRz7SjnsL80TfPr0zz//oG/fvvj9999hbW2NZ8+eQSqVAng9yOXixYvw9/dXW6BERESqJvhy6LJl\ny1C/fn1ERkaiqKhIboQmAAwYMAChoaEqD5CIiEhdBJ8Jnj17FtOmTUODBg0UPlvQzMwMDx8+VGlw\nRERE6iQ4CRYWFkJXV7fU+oyMDGhra6skKCIiIk0QnATbtWuHEydOKKyTSqU4cOAAOnXqpLLAiIiI\n1E1wEpw3bx5OnDiBhQsX4vr16wCAzMxMxMTEwMnJCf/++y/mzZuntkCJiIhUTfDAmEGDBsHX1xdL\nlizBjh07AADTp08HANSuXRs//PADevfurZ4oiYiI1ECpyfIfffQRRowYgRMnTuDmzZsoLCxE06ZN\nMWjQIEgkEnXFSEREpBaCk2BCQgKaNWuG+vXrw8nJqUR9dnY2bt68yfuCRET0zhB8T3DAgAGIiIgo\ntT4qKgoDBgxQSVDqEn0/D+33pVZ2GEREVEUIToJFRWWvrlZQUFDl1++cdzYbKbnSyg6DiIiqiDIv\nhz5//hzPnj2TbT99+rTE8/+A15dCQ0NDYWxsrPoIVUhRArTQF1dCJEREVBWUmQR9fX2xbt06AIBI\nJMKCBQuwYMEChfsWFRVhyZIlqo9QjSz0xdhgxwE9RETVVZlJ8MMPP0SNGjVQVFSENWvWYOTIkWjT\npo3cPiKRCHp6eujQoQO6d++u1mBV7bJL1T5zJSIi9SozCdrZ2cHOzg7A60ujTk5OJZIgERHRu0rw\nFImlS5eqMw4iIiKNU/rJ8omJibh8+TKePHmCwsJCuTqRSIRPP/1UZcERERGpk+Ak+OTJE0yaNAmx\nsbEoKiqCSCSSTZso/jeTIBERvUsET+xbvnw54uPj4evri/Pnz6OoqAi//vorYmNjMW7cOLRr1w5/\n/fWXOmMlIiJSKcFJ8OjRo5gyZQo++ugjNGzYEACgo6OD1q1bw8/PD0ZGRli5cqXaAiUiIlI1wUkw\nIyMDbdu2BQDUrFkTwOsRo8UGDRqE8PBwFYdHRESkPoKToKGhITIyMgAAderUgb6+Pm7cuCGrf/Lk\nCQoKClQfIRERkZoIHhjTqVMnxMXFybYdHBzwww8/wNzcHIWFhfDz80Pnzp3VEiQREZE6CD4TdHNz\ng4mJCfLy8gAAK1asgK6uLqZOnYpp06ZBT08PXl5eaguUiIhI1QSfCfbu3VvuyfEWFha4ePEiEhMT\nIRaL0bp1a9SqVUstQRIREamD0pPl5Q6uUUPuEujz58+hp6f31kERERFpgkoeAJiVlQUvLy+uK0pE\nRO+Ucs8Es7OzERwcjNu3b0MikWDYsGGwsbEBAKSnp+P777/Hrl278OzZM3Tt2lXtARMREalKmUnw\n1q1bGDJkCNLT02VLpPn4+CAgIAA1a9bErFmzkJubi6FDh2Lu3LlMgkRE9E4pMwmuWrUKOTk5WL16\nNXr06IGUlBT873//w6JFi5CdnQ0HBwcsX74czZs311S8REREKlNmEjxz5gymTp2K2bNnAwBsbW2h\nq6uLcePGYezYsdi6datGgnxb0ffzMO9sdmWHQUREVUyZA2P+u1Rasfbt2wMARo4cqb6oVGze2Wyk\n5EorOwwiIqpiykyChYWF0NbWlisrXje0du3a6otKxRQlQAt9cSVEQkREVUm5o0MvX74sl/Byc3Mh\nEolw4cIFPHv2rMT+Q4cOVW2EamChL8YGO0llh0FERJWs3CS4efNmbN68uUT56tWrZf/+70N1MzMz\nVRuhGlx2Ma7sEIiIqAooMwnu379fU3EQERFpXJlJsF+/fmoPwN/fH76+vkhLS8MHH3wALy8v2NnZ\nlXvczZs30adPHxQVFeH+/ftqj5OIiN4/Klk2raJCQkKwaNEizJ8/H6dPn0bXrl3h4uKCu3fvlnlc\nfn4+pk2bJihZEhERlaZSk+DmzZsxceJEfPzxx7C2toaPjw8aNWqEgICAMo9bunQpbGxs3qlpGkRE\nVPVUWhLMz89HYmIiHBwc5ModHBxw/vz5Uo8LDw9HeHg41q1bp+4QiYjoPfdWj1J6GxkZGZBKpTA0\nNJQrNzQ0xKNHjxQe8/DhQ3z22Wf45ZdfoK+vX+G2k5KSKnzs+4z9Ihz7Sjj2lXLYX+WzsrJS2WtV\nWhKsiJkzZ2LatGlyzzCsCFV24PsiKSmJ/SIQ+0o49pVy2F+aV2mXQw0MDCAWi5Geni5Xnp6eDiMj\nI4XHnD59Gt7e3jAwMICBgQHmzp2LZ8+ewcDAAD/99JMGoiYioveJUkkwJycHPj4+GDFiBOzs7HDx\n4kUArx+qu3HjRty8eVPwa2lra8PW1hbR0dFy5dHR0ejWrZvCY86ePYuYmBjZz5IlS6Crq4uYmBiM\nGjVKmbdCREQk/HLovXv3MGTIEKSlpcHKygrXrl2TLZtWv3597N69Gw8ePIC3t7fgxj08PDBz5kx0\n6tQJ3bp1Q0BAAFJTU+Hq6goAWL58ORISEnDo0CEAQOvWreWOv3TpErS0tEqUExERCSE4CS5duhR5\neXmIjY1FgwYN0KJFC7l6R0dHhIeHK9X4mDFjkJmZCR8fH6SlpaFVq1YIDg6Gubk5ACA1NRW3b99W\n6jWJiIiEEpwEo6Ki4OHhASsrK4Xrg1paWlZo5RY3Nze4ubkprPPz8yvz2EmTJmHSpElKt0lERAQo\ncU8wLy8PBgYGpdbn5uaqJCAiIiJNEZwEra2tce7cuVLrw8LC0KZNG5UERUREpAmCk+CMGTOwf/9+\nbNq0CU+fPpWVp6SkwN3dHefPn8fs2bPVEiQREZE6CL4nOHHiRKSkpGDZsmVYvnw5AMDZ2RlSqRQi\nkQhLlizBiBEj1BYoERGRqim1YszixYsxbtw4HDx4EDdv3kRhYSGaNm2KUaNGcZUDIiJ65yi9bFqz\nZs3w+eefqyMWIiIijRJ8T7B79+5Yt24dbty4oc54iIiINEZwEpRIJFi7di26du2KDz/8EL6+vuU+\n/JaIiKgqE5wEjx07hj///BMrVqyAtrY2li5divbt22PgwIHYunUr0tLS1BknERGRyim1gHbjxo0x\nZ84cREREIDExEd988w3y8vKwaNEi2NjYvBOjQy30xZUdAhERVREVfpSShYUFPv/8c5w+fRobN26E\nnp4ezpw5o8rYVM5CX4wNdpLKDoOIiKqICj9UNyEhASEhITh48CAePHgAfX19ODs7qzI2lbvsYlzZ\nIRARURWiVBK8cuUKQkNDERoaijt37kBHRwcDBgzA6tWrMWjQIOjo6KgrTiIiIpUTnAQ7deqE27dv\no0aNGrC3t8eSJUswdOhQ6OvrqzM+IiIitRGcBM3MzPDZZ59hxIgRkEh4X42IiN59gpPgb7/9ps44\niIiINK7Co0OJiIjedaWeCRobG0NLSwspKSmoWbMmjI2NIRKJynwxkUiEBw8eqDxIIiIidSg1Cc6a\nNQsikQhisVhum4iI6H1RahJctmxZmdtERETvOsH3BDdu3Ih///231Prr169j48aNKgmKiIhIEwQn\nwWXLluHKlSul1v/555+yJ84TERG9C1Q2OjQ3Nxc1a9ZU1csRERGpXZnzBK9du4Z//vlHtn3hwgXU\nqFHykOzsbGzbtg3NmzdXfYRERERqUmYS/O233+Dt7Q3g9fSH7du3Y/v27Qr31dfXx9atW1UfIRER\nkZqUmQQ/+ugj9O3bF0VFRRg6dCgWLlwIBwcHuX1EIhH09PRgZWXFBbSJiOidUmYSbNKkCZo0aQIA\n2L9/P9q0aYNGjRppJDAiIiJ1E7x2aL9+/dQZBxERkcaVmgTnz58PkUiEdevWQUtLC/Pnzy/3xUQi\nEb799luVBkhERKQupSbBw4cPQ0tLC15eXtDS0sLhw4cFrR3KJEhERO+KUpPg9evXy9wmIiJ61/FR\nSkREVG0JToKZmZkl1g5NTk6Gp6cnZs2ahRMnTqg8OCIiInUSPDr0iy++wMOHDxEeHg7g9SoxgwYN\nwuPHj6GtrY3g4GAEBwejf//+aguWiIhIlQSfCcbHx2PAgAGy7eDgYGRkZCAqKgq3b99G586dsWHD\nBrUESUREpA6Ck2BGRgaMjY1l2+Hh4ejevTvat28PHR0duLi4yK0zKpS/vz/atWuHRo0aoU+fPjh7\n9myp+8bExGDChAmwtraGiYkJ7OzssHv3bqXbJCIiApRIghKJBOnp6QCAvLw8nDt3Tm4JNbFYjLy8\nPKUaDwkJwaJFizB//nycPn0aXbt2hYuLC+7evatw//j4eNjY2ODnn3/GuXPnMH36dMybNw/79u1T\nql0iIiJAiXuCXbt2xY4dO9CmTRscP34ceXl5GDJkiKz+xo0bcmeKQmzevBkTJ07Exx9/DADw8fFB\nZGQkAgICsHTp0hL7vzlhf/r06YiJicGhQ4fg4uKiVNtERESCzwSLk9LYsWPh7+8PNzc3tGrVCgBQ\nWFiIQ4cOwc7OTnDD+fn5SExMLLEgt4ODA86fPy/4dZ4+fQqJRCJ4fyIiomKCzwRbtGiBixcv4q+/\n/kLdunVhZWUlq8vNzcWKFStga2sruOGMjAxIpVIYGhrKlRsaGuLRo0eCXuPYsWM4deqUbMQqERGR\nMgQnQQDQ0dFBp06dSpTXrVsXY8aMUVlQQsTFxeGTTz6Bt7e3wpgUSUpKUnNU7zb2j3DsK+HYV8ph\nf5Xvvydhb0upJCiVShEYGIjjx4/jzp07AABzc3MMHjwY48ePh1gsFvxaBgYGEIvFssE2xdLT02Fk\nZFTmsefOncPYsWOxePFiTJ8+XXCbquy4901SUhL7RyD2lXDsK+WwvzRP8D3BnJwcDBo0CJ9++inO\nnDkDsVgMsViMM2fOYM6cORg8eDCePHkiuGFtbW3Y2toiOjparjw6OhrdunUr9bjY2Fi4uLjA09MT\n7u7ugtsjIiJ6k+AkuGrVKiQmJuK7775DUlISoqKiEBUVhRs3bmDDhg1ITEzEypUrlWrcw8MDgYGB\n2LVrF/799194enoiNTUVrq6uAIDly5djxIgRsv1jYmLg4uICV1dXuLi4IC0tDWlpaXj8+LFS7RIR\nEQFKXA79/fffMX36dFmCKiYWi/Hxxx/jr7/+wqFDh+Dj4yO48TFjxiAzMxM+Pj5IS0tDq1atEBwc\nDHNzcwBAamoqbt++Lds/MDAQz58/x6ZNm7Bp0yZZuZmZGa5evSq4XSIiIkCJJJiZmVnmteqWLVsi\nKytL6QDc3Nzg5uamsM7Pz6/E9ptlREREFSX4cmjTpk3LnIpw7NgxNG3aVCVBERERaYLgJOjq6oqI\niAiMHz8ep06dwv3793H//n2cOnUK48ePR1RUlFIjNYmIiCqb4MuhM2fORHp6OjZu3Ijjx4/L1YnF\nYnzxxRf45JNPVB4gERGRuig1T/Drr7+Gm5sbIiMjZYtcm5mZoV+/fkqvG0pERFTZlEqCAGBsbIxJ\nkyapIxYiIiKNKveeYFBQEHr37g1zc3PY2tpi+fLlKCgo0ERsREREalXmmeCBAwfg7u6OWrVqoVmz\nZnj48CE2btyIly9fYs2aNZqKkYiISC3KPBPcunUrzM3NkZCQgLNnz+Lff/+Fo6Mjdu7ciRcvXmgq\nRiIiIrUoMwn+/fffmDZtGkxNTQG8Xu9z4cKFyMvLQ3JysibiIyIiUpsyk+CzZ8/QuHFjubImTZoA\nQImnPxAREb1ryh0YIxKJNBEHERGRxpU7RWLLli347bffZNsFBQUQiUTw8vLCtm3b5PYViUTYvXu3\n6qMkIiJSgzKToKGhoWx5tDfLb926hVu3bsmV86yRiIjeJWUmwevXr2sqDiIiIo0TvIA2ERHR+4ZJ\nkIiIqi0mQSIiqraYBImIqNpiEiQiomqLSZCIiKqtCiXBe/fuITExEbm5uaqOh4iISGOUSoIHDx5E\nhw4d0K5dOzg4OCAhIQEAkJGRATs7Oxw6dEgtQRIREamD4CQYFhYGV1dXmJiY4KuvvkJRUZGszsDA\nAGZmZggMDFRLkEREROogOAn6+PigZ8+esmT4pi5duuDPP/9UaXBERETqJDgJ/vPPPxg1alSp9UZG\nRny8EhERvVMEJ0FdXV08f/681Prk5GTUr19fJUERERFpguAk2KtXLwQFBUEqlZaoS09Px65du2Bv\nb6/S4IiIiNRJcBL8+uuvce/ePfTr1w+7d++GSCTCqVOn4OXlBTs7O0ilUnh6eqozViIiIpUSnASt\nra0RFhYGXV1dLFu2DEVFRfj++++xbt06NGvWDEeOHIGlpaUaQyUiIlKtcp8s/19t2rTB0aNH8ejR\nI9y4cQOFhYVo2rQpTE1N1RUfERGR2iiVBIsZGRnByMhI1bEQERFplOAkGBoaKmi/0aNHVzgYIiIi\nTRKcBKdNm1ZqnUgkkv2bSZCIiN4VgpNgfHx8iTKpVIo7d+5gx44dSE9Px8aNG1UaHBERkToJToJW\nVlYKyz/44AMMHDgQY8aMwZ49e7B27VqVBUdERKROKnue4NChQ7Fv3z5VvRwREZHaqSwJ3rt3D3l5\neUof5+/vj3bt2qFRo0bo06cPzp49W+b+f/31F4YOHQpjY2O0atUK3t7eck+0ICIiEkrw5dDiZwe+\nKScnB2fPnsWWLVswcOBApRoPCQnBokWLsH79enTv3h3+/v5wcXFBXFwczMzMSuz/5MkTjB49GnZ2\ndoiKikJSUhI8PDygp6eHuXPnKtU2ERGR4CTYv39/uVGgxYqKiiASiTB06FB8//33SjW+efNmTJw4\nER9//DGA149rioyMREBAAJYuXVpi/3379uHFixfw8/ODrq4uWrdujevXr2PLli2YM2eOwviIiIhK\nI8rOzhZ0LTEyMrLkwSIRJBIJLCwsYGBgoFTD+fn5MDExwY4dO+Qe0bRgwQL8/fffCAsLK3HMzJkz\nkZWVheDgYFnZH3/8AQcHByQmJnLZNiIiUoqgM8GCggJIJBIYGBioLNFkZGRAKpXC0NBQrtzQ0BCP\nHj1SeMyjR4/QuHHjEvsX1zEJEhGRMgQNjNHS0sLgwYNx/PhxdcdDRESkMYKSoFgsRpMmTfDixQuV\nNWxgYACxWFziafTp6emlrkuq6On1xdtcy5SIiJQleIrEJ598gp9//hlZWVkqaVhbWxu2traIjo6W\nK4+Ojka3bt0UHtO1a1ecO3dObipGdHQ0TExMYGFhoZK4iIio+hA8OlRLSwu1atWCra0tRo8eDUtL\nS+jo6MjtIxKJMHPmTMGNe3h4YObMmejUqRO6deuGgIAApKamwtXVFQCwfPlyJCQk4NChQwAAZ2dn\neHt7w93dHQsWLMCNGzewYcMGfPnllxwZSkREShN8Jrh48WJcu3YNT548wc8//4zly5dj8eLFJX6U\nMWbMGHh5ecHHxwe9e/dGXFwcgoODYW5uDgBITU3F7du3ZfvXq1cPoaGhePjwIezt7eHh4QEtLS2s\nXLmSE+3LocyiBDExMZgwYQKsra1hYmICOzs77N69W4PRVi5lF3AodvPmTTRp0qRaPV9T2b4qKirC\nli1b0KVLFxgZGcHa2hrLli3TTLCVTNm+ioyMxIABA9CkSRM0a9YMEyZMwI0bNzQUbeWJjY3F+PHj\n0apVK0gkEuzZs6fcY97ms/2tFtBWBTc3N7i5uSms8/PzK1FmY2ODo0ePIiQkBDNmzOBEewGUXZQg\nPj4eNjY2+Oyzz2BsbIzIyEjMmzcPOjo6cHFxqYR3oDnK9lWx/Px8TJs2DXZ2doiNjdVgxJWnIn31\n1VdfITw8HCtWrICNjQ1ycnKQlpam4cg1T9m+Sk5OxsSJEzFz5kxs3boVubm5WLZsGVxcXHDp0qVK\neAea8+zZM7Ru3RoTJkzArFmzyt3/bT/by5wnGBQUBDs7uyp5v61fv36wsbGBr6+vrKxjx44YOXKk\nwon2O3bswLJly3D9+nXo6uoCeD05PyAgAH///fd7fTlV2b5SZOrUqZBKpe/9GWFF+2rx4sXIyclB\nz5498eWXX+L+/fuaCLdSKdtXSUlJ6NGjB2JjY2Ftba3JUCudsn118OBBuLq6Ij09HWKxGABw+vRp\njHAHMQQAABe1SURBVBgxAjdv3lR6Xva7ytTUFOvWrcOkSZNK3edtP9vLvBzq4eGhtjPAt5Gfn4/E\nxEQ4ODjIlTs4OOD8+fMKj4mPj0ePHj1knQS8/sV8+PAhUlJS1BpvZapIXyny9OlTSCQSVYdXpVS0\nr8LDwxEeHo5169apO8QqoyJ9FRYWBktLS0RERKB9+/Zo27YtZs2aVWLE9/umIn3VoUMH1KxZE7t2\n7YJUKsXTp08RGBiIjh07VpsEKNTbfraXmQSr6v2yik60V7R/cd37qiJ99aZjx47h1KlTmDp1qhoi\nrDoq0lcPHz7EZ599hm3btkFfX18TYVYJFemr5ORk3L17FyEhIdiyZQu2bt2KpKQkjB8/HoWFhZoI\nu1JUpK/Mzc0RGhoKLy8vGBkZwdzcHP/88w/27t2riZDfKW/72a6yp0jQ+ykuLg6ffPIJvL290alT\np8oOp8qZOXMmpk2bhs6dO1d2KFVeYWEhXr58ia1bt6Jnz56ws7PD1q1bkZCQgD/++KOyw6tS0tLS\nMHfuXIwbNw5RUVH4/fffoa+vj6lTp77XXxgqQ7lJsCreK+NEe+Eq0lfFzp07BxcXFyxevBjTp09X\nZ5hVQkX66vTp0/D29oaBgQEMDAwwd+5cPHv2DAYGBvjpp580EHXlqEhfNWrUCDVq1ECLFi1kZc2b\nN4dYLMa9e/fUGm9lqkhfbd++HXp6eli5ciXat2+Pnj17Ytu2bYiNjVXqNkZ18Laf7eUmQQ8PD5iY\nmAj6eXNdT3XhRHvhKtJXwOthyi4uLvD09IS7u7u6w6wSKtJXZ8+eRUxMjOxnyZIl0NXVRUxMjNzC\n8O+bivRV9+7d8erVK7lpT8nJyZBKpWWOvH3XVaSvXrx4IRsQU6x4m2eC8t72s73cKRKdOnWqkgtT\nc6K9cMr2VUxMDMaNG4fp06fDxcVFNoRdLBajYcOGlfY+NEHZvmrdurXc8ZcuXYKWllaJ8veRsn3V\nt29ftG/fHh4eHvDy8gLwelRt586d0aFDh0p7H5qgbF8NHDgQW7Zsgbe3N5ydnfH06VOsXLkSTZo0\nga2tbWW+FbXLzc3FrVu3ALxO+Pfu3cOVK1dQv359mJmZqfyzvdwk6OrqWiXnho0ZMwaZmZnw8fFB\nWloaWrVqJWii/YIFC2Bvbw+JRAIPDw/MmTOnst6CxijbV4GBgXj+/Dk2bdqETZs2ycrNzMxw9epV\njcevScr2VXWmbF9paWlh79698PT0hKOjI3R0dGBvb4/Vq1dDS+v9Hp6gbF/16dMH/v7+2LhxI3x9\nfaGrq4vOnTtj//79qF27dmW9DY24dOkShg8fLtv28vKCl5cXJkyYAD8/P5V/tpc5T7B+/frYtm1b\nlUyCREREb+v9/vpFRERUBiZBIiKqtsq8HEpERPQ+45kgERFVW0yCRERUbTEJEhFRtcUkWE3NmDHj\nvZ+gDACrVq0SvOr+rVu3IJFIuEixEpydnavNikIV8erVK0gkEvj4+MiV3759G2PGjIG5uTkkEgmO\nHTuGXbt2QSKRqPQxXFeuXIGBgQH+X3vnHlXVcTXwH4KCCFZAgVCqPCrgjULABwIRkYeAIETEB2CD\n8dlIaUxbIhaMLeIDQlHrUiLRFYUi5ooiCEhUXhqoVqvUrGJ9gNpkGSoPWTwUxIvfH657Pq8X5IoY\no57fWvcPZubM7DPncPbM3jOzr1y50m91vm6ISvAVISMjg2HDhnX7i4qKetniqUR8fLyC3CNGjMDO\nzk6IxfdjkZqaSmZm5o/WnipIJBKFvvn5z3+Op6fncynk1tZWNm7c+MKC/FZUVFBcXMzHH3+skL5r\n1y4WLlyIra0tw4YNY968eS+kfTmFhYX4+/tjZWWFsbEx48aNIzQ0lIMHD77Qdp+H3/zmN3z77bfE\nxMSwc+dObG1tuy331Vdf8fnnn/e5HVtbW9zd3dmwYUOf63jdUTmyvMhPg+joaMzNzRXSRo8e/ZKk\n6RvJyckMGTKEtrY2Tpw4QUpKCpWVlRQUFPT7EXbR0dFKg4QvvvgCExMTQkJCFNLNzc2pra1l0KBB\n/SqDqowbN0445aK2tpa0tDSWL19OZ2cnCxYseOb62traSEhIQENDAxcXl/4Wl61bt/Luu+8qvX/J\nycncvXsXBwcHGhoa+r3dJ2VYu3YtTk5OREZGoqury40bNygvLyc9PZ3Zs2e/0PZ7Q0NDg9raWgYO\nHCikPXjwgNOnT7NixQqWL18upIeFhTF37ly0tLSENKlUSk1NjUoR1nvigw8+ICwsjBs3bvwkj8B8\n2YhK8BXDw8ODiRMnvmwxnovAwEDBRLlo0SJCQkI4evQoFy5cwMHBoV/b0tDQQENDtddcTU1N4QP0\nY2NiYqIwawoJCeGdd95hx44dfVKCL5La2lpOnDhBUlKSUt7Ro0cZOXIkampqL/QM1fv375OUlISb\nmxvZ2dlKA6ifSpzQJ9+pO3fuIJPJGDp0qEK6urq60qHZ/YGHhwe6urpkZmayevXqfq//VUc0h75m\npKWlERAQgJWVFYaGhowfP56tW7eqdPJ8SUkJvr6+jBo1ChMTE+zt7Vm1apVCmY6ODjZu3Ii9vT2G\nhoZIJBJiYmK4d+9en2V2dXUFUIgC/a9//Yvg4GB+8YtfYGJigr+/P6dPn1a4rrOzU4hzaGxsjJmZ\nGZ6enuTn5wtlnvQJSiQSrl69SllZmWB6lPtGn/QJHjx4kGHDhvHNN98oySw3T//9738X0q5cuUJ4\neDjm5uYYGRkxdepU4ZDfvmBoaIilpSU3btxQSG9oaCA2NhZnZ2dMTU0xNTVl5syZCv1TU1ODtbU1\nAOvXrxfuNTIyUihz69YtIiIihHfF0dGRL7/8UiXZvv76a2QyGdOmTVPKGzVq1I9yKH1dXR0tLS1M\nnjy52/YeD6Mjf7bbtm0jJSWFcePGYWxsjLe3N5WVlUrXqto3HR0dJCQkMHHiRIyMjLCysiI0NJTL\nly8Dyj7B+Ph4YeYsfy7y9+9Jn6CPjw9FRUVcv35deH4GBgbIZDJsbGy6HRh1dnZiYWHB0qVLhTRN\nTU2cnZ3Jy8tTuW/fJMSZ4CtGc3Ozkonp8Y/8rl27ePvtt5k+fTpaWlqUlJSwdu1aWlpaiI2N7bHe\nf//738ybN4+xY8cSHR3N4MGDuX79OmVlZUKZrq4uQkJCOH36NOHh4VhbW3Pp0iVSU1O5fPkyWVlZ\nfbon+WG4+vr6AFRVVTFjxgx0dXX57W9/y6BBg9izZw8BAQEcOXJECD+zYcMGtmzZQnh4OA4ODrS0\ntHDx4kUuXLiAn59ft20lJCQQFRWFnp4eK1euBOgxIryPjw/a2tpkZ2fz7rvvKuRlZ2djamrK5MmT\nAbh06RLe3t6YmJiwcuVKtLW1yc3N5f3332f37t19Mst1dnbyww8/MGzYMIX0mpoa8vLyeO+99xg1\nahR37twhPT2dwMBASktLGTNmDIaGhnz22WdERUURGBjIjBkzALCwsAAeBW318vJCTU2NJUuWMHz4\ncMG/19TUpOTne5IzZ86gp6f3Us1rRkZGaGpqUlhYyPLly9HT0+v1mszMTJqbm1m8eDEPHjzgiy++\nICAggJMnTwr3omrfyGQy5s6dS1lZGUFBQSxbtoy2tjZOnjzJxYsXhUHI4wQGBmJkZKTwXHp6/z75\n5BPWrFlDXV0d69atAx4dQq6urs7cuXPZuXMnTU1NCu/H8ePHaWxsZP78+Qp1vfPOOxw7dozm5mal\nGeibjqgEXzG6+5h+//33wj9SYWEh2traQt6SJUuIiIhg586drFq1SsE38TjFxcXcv3+fQ4cOKX10\n5Xz11VeUlpaSn5+Pk5OTkG5nZ8eKFSsoKytj6tSpvd7DnTt3gEcLN4qKitizZw9vvfWWoNzi4uLo\n7OyksLBQ+DCFhYUxYcIEYmJiOHHiBPBoNuLr68uWLVt6bVPOzJkziYuLw9DQsNcFG0OGDMHHx4fc\n3FwSExMFU1VjYyOlpaX8+te/FmYgn3zyCaamppSUlKCpqQk86vuAgADWrl1LUFBQr7Ojzs5OYYBT\nW1vLli1bqK+vV/IH2dracv78eYXICwsXLmTixImkpqayefNmdHR0CAgIICoqirFjxyrda1xcHDKZ\njIqKCmHwsWjRIlasWEFSUhKLFy9+6sfy6tWrLz0Op4aGBpGRkSQlJfH222/j5OSEo6MjHh4eODg4\ndNvfNTU1nD17VohfGBAQgLOzMwkJCaSkpACq901GRgZlZWWsX7+eiIgIoY2VK1fy8GH3B3GNGzcO\nQ0PDHp/L47i7u7N9+3bu3r2rVG7+/Pn89a9/5fDhwyxcuFBIl0qlGBkZ4ebmplDezMyMrq4url69\nyvjx43vu1DcQ0Rz6ipGQkMDhw4cVfoMHDxby5QpQJpPR1NREQ0MDLi4utLS0cO3atR7r/dnPfgZA\nfn5+j6bTw4cPY21tjZWVFQ0NDcJvypQpwKM4hKowYcIELC0tsbOz43e/+x329vZIpVK0tLTo7Oyk\ntLQUPz8/hVnG8OHDmT9/PufOnRMUxdChQ6mqqqK6ulqldvtCUFAQdXV1Cvd25MgRHjx4IAxI6uvr\nOXXqFLNmzaK1tVXol8bGRjw9Pfn++++VTJrdUVxcjKWlJZaWlri4uJCVlUV4eDh//vOfFcppamoK\nCrC9vZ3GxkYePnyIvb19t6a9J+nq6uLIkSP4+Pjw8OFDhWfp7u5OW1sbFy5ceGodjY2NPQ6Wfkxi\nY2PZsWMHEomEkpISNmzYgIeHB5MmTeL8+fNK5f38/BQC+FpbW+Pm5saxY8eAZ+ubnJwcDAwMFBa3\nyHnR5mCJRIKdnZ3C6uHm5mYKCwsJDg5W8i3Kn9WLXqj0KiLOBF8xHBwcnrowpry8nPj4eM6dO0dn\nZ6dCXnNzc4/XBQcH87e//Y2IiAg+/fRTXF1d8fPz47333hMWlly7do3q6mosLS27raO+vl6le0hL\nS2Po0KFoa2szcuRIjI2Nhbzbt2/T3t7OL3/5S6Xr5Oal7777DgMDA2JiYliwYAHjx49HIpHg7u5O\ncHBwvwYd9fLyYujQoRw8eFAYXR88eBALCwvBlyNXwuvXr2f9+vXd1lNXV6e0qvdJJkyYQGxsLDKZ\njKqqKpKSkmhublZardrV1UVycjJpaWn897//Vcjr6dk8zv/+9z+am5vZs2cPe/bs6VHe3uhptvM8\n1NfXI5PJhL91dHR6jZ8XGhpKaGgora2tXLhwgaysLNLT05kzZw5nz54VZnPw/+bgx7G0tKSoqIjW\n1lZaWlpU7pvr168zevRolRde9TchISGsXr2amzdvMmrUKHJycmhvb+92dil/Vq97APG+ICrB14jq\n6mpmzZqFlZUVmzZtwtTUFE1NTc6fP09cXNxTF8doa2tTWFjIN998w/HjxykqKiI7O5uUlBQKCgrQ\n1NSkq6sLiUTS456jt956SyU5XVxcVN7A/jSmTJlCZWUlR48epaSkhH379rF9+3bWrVvXb8GSNTU1\n8fPzIy8vj+TkZO7cuUN5ebmCz0zer5GRkXh4eHRbT3f+oScxMDAQFK2HhwdWVlbMmzcPJycnli1b\nJpRLTExk06ZNhIWFMW3aNPT09FBXV+ezzz7j1q1bvbYjl3fu3LmEhoZ2W2bMmDG9ytrU1NRrW8+K\nq6urwj3ExMSovA9WR0eHKVOmMGXKFAwMDEhOTqaoqOiZ4qH2R9/8WAQHB7NmzRoOHDjAH/7wB6RS\nKRKJpNs9h/Jn1R//d68bohJ8jSgoKOD+/ftIpVJMTEyEdFXNhQMGDMDV1RVXV1fWrVsn+BHz8/MJ\nCgrC3Nyc//znP0ydOvWFjSgNDQ3R0tLq1nQrP/XicXOWnp6eMBO4e/cus2fPZsOGDaxYsaLHaOXP\nKvvs2bPJzMykpKSEmzdvIpPJCAoKEvLlM7yBAwcq+WKeB29vb1xcXEhMTGTBggWCqTsnJwc3Nze2\nb9+uUF6+eEJOT/dpZGTEkCFD6Orq6rO8VlZWL2S14e7du+no6BD+7m323BPyrTa1tbUK6TU1NUpl\nq6urMTAwQEdHBy0tLZX7xtzcnMrKSjo7O3v0tT8vT3tXhw8fjqenJ1KplJCQEMrLy1m7dm23ZW/e\nvMmAAQNUshS8aYg+wdcI+Uf/cTNVe3s7u3bt6vXaxsZGpTQ7OzsA4TSXWbNmcevWLfbu3atUtr29\nndbW1j7J/TgDBw5k2rRpFBQUKPjRGhoa2L9/PxMnThRGs0/KrK2tzejRo7l3757Ch/RJtLW1n2kW\n4+bmhoGBAYcOHeLQoUOMGTNGYf+bsbExTk5OfPnll0ofXVDdTNwdH330EfX19aSnpwtpAwYMUDJF\nlpeX889//lMhTa40n7xXDQ0N/P39yc3Npaqqqk/yOjo60tTUpJKv81lwcnLCzc1N+D1t8U1rayv/\n+Mc/us07fvw4oHyQRH5+Pt99953w9+XLlyktLcXLywt4tr4JDAykoaGB1NRUpXL9ZSru7V0NCQnh\nypUrwsrvnma9lZWV2NjYCL5/kf9HnAm+Rnh6evKnP/2JOXPmsHDhQtrb29m/f79KPouNGzdy5swZ\npk+fzsiRI2lsbGT37t3o6uoKH4iwsDCOHDnCxx9/zKlTp3B0dEQmk3Ht2jWys7PJyMhQWDXaV9as\nWcPJkyfx9fVl8eLFwhaJtrY24uPjhXLjx4/H1dUVe3t79PX1+fbbb8nIyGDGjBkKi4WexN7enr17\n95KYmIiFhQW6urp4e3v3WF5DQ4OAgACkUil3797lj3/8o1KZzZs34+Pjg7OzM+Hh4ZiZmVFXV8fZ\ns2eprq7m3LlzfeoLLy8vbGxs2LZtG4sWLWLgwIH4+vqSlJTEhx9+yOTJk7l69SppaWmMGTOG9vZ2\n4VodHR1Gjx5NVlYWZmZm6OvrY25ujoODA3FxcVRUVODp6cn777+PjY0NTU1NXLx4kcLCwl7Nqt7e\n3mhoaFBSUsIHH3ygkJefny8okNbWVmpqaoR9cn5+fv22gb6trY3p06czYcIEPDw8MDU1paWlhdLS\nUo4dO4ajo6Pw7sqxsLDA19eXJUuW8ODBA1JTU9HW1lbYD6tq34SFhSGVSomJieH8+fM4OTlx7949\nTp06xZw5c57JDNsT9vb25Obmsnr1ahwcHNDQ0GDWrFlCvo+PD3p6emRnZ+Pm5qZgAZJz//59Kioq\nul3AIyIqwdcKa2tr0tPTiY+P59NPP2X48OGEhITg6OhIcHDwU6/19/fn1q1b7Nu3j/r6evT19Zk0\naRKrVq3C1NQUeDQDycjIYMeOHezfv5+8vDy0tLQwMzNj6dKl/eYrkUgkFBQUEBcXx5YtW+jq6sLe\n3p4dO3YI2ygAPvzwQ77++mvKyspob2/H1NSU3//+93z00UdPrT86OpoffviBbdu20dLSgrm5+VOV\nIDxaJSrfLN3dNhUbGxtKS0vZtGkT+/bto7GxkREjRjB27NhulaaqqKmpERERQWRkJAcOHCA0NJSo\nqCg6OjrIysoiOzsbiUTC3r17yczM5OzZswrXb9++nejoaGJjY+no6OBXv/oVDg4OGBkZUVxcTGJi\nInl5eezevRs9PT2sra2VzKrdYWhoiJeXF9nZ2UpKMCcnB6lUKvzd3NwsLBgaOXJkvylBfX19tm7d\nyrFjx8jMzOT27duoqalhbm5OdHQ0kZGRSqskQ0JCUFdXJyUlhdu3b2NnZ8emTZsUzK6q9o26ujoH\nDhzgL3/5C1lZWeTm5qKnp8ekSZMEK8rzsmzZMi5dusT+/fv5/PPPGTBggIISHDRoELNnz2bXrl09\nbrcoKiqipaWFsLCwfpHpdUOMLC8iItInKioq8Pf358yZMz/582trampwcHBg3bp1CqfmvA6sXr2a\nvXv3cuXKlW433s+ZM4fBgweTlpb2EqT76SP6BEVERPqEs7Mz7u7ubN68+WWL8sbS3t6OVCpl5syZ\n3SrAixcvUlxcTExMzEuQ7tVANIeKiIj0mb4elSfyfNy+fZuysjJycnJobGzsMaajra2tuEG+F0Ql\nKCIiIvKKUVVVxdKlSxkxYgQJCQn95oN8ExF9giIiIiIibyyiT1BERERE5I1FVIIiIiIiIm8sohIU\nEREREXljEZWgiIiIiMgbi6gERURERETeWEQlKCIiIiLyxvJ/QrMU0nb6oz8AAAAASUVORK5CYII=\n",
194 | "text/plain": [
195 | ""
196 | ]
197 | },
198 | "metadata": {},
199 | "output_type": "display_data"
200 | }
201 | ],
202 | "source": [
203 | "evaluation = Evaluation.evaluation_fun (SVM_CL, y_test, SVM_y_pred_class, x_test)\n",
204 | "evaluation.Accuracy()\n",
205 | "evaluation.Confusion_Matrix()\n",
206 | "evaluation.ROC_Curves()"
207 | ]
208 | },
209 | {
210 | "cell_type": "markdown",
211 | "metadata": {
212 | "collapsed": true
213 | },
214 | "source": [
215 | "## K-Means"
216 | ]
217 | },
218 | {
219 | "cell_type": "code",
220 | "execution_count": 17,
221 | "metadata": {},
222 | "outputs": [
223 | {
224 | "data": {
225 | "image/png": "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\nS1NSUpJmzpyp/fv3691339WiRYuUnZ2t0NBQSdIjjzyi4OBg5ebm6tChQyotLdXy5cuVm5srh8Mh\nSZo2bZrq6uq0cOFCVVVVacOGDdq4caPP6WcAAEwxfqHS+vXrVVhYaD9vO228cuVKTZ06VT179tTW\nrVtVWFiolpYWxcbGKjs7W08++aT9MwEBASouLta8efN0//33KygoSBkZGXrxxRftmT59+tiFPH78\neIWFhWn27Nk+hRkfH69NmzbpmWee0fr16xUVFaXCwkJupwEAtAuH1+u1vnoM3xQXBvifrpKVnP6n\nq2TtjJx89y8AAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAA\nGEKpAgBgCKUKAIAhlCoAAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAAGEKpAgBgCKUKAIAhlCoA\nAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAAGEKpAgBgCKUK\nAIAhlCoAAIZQqgAAGGK0VBsaGjR//nzdddddioqKUnJysp5++mn97W9/85nzer3KyclRXFyc4uLi\nlJOTI6/X6zNz/PhxZWVlKTo6WgkJCcrPz1dLS4vPzMGDBzVp0iRFRUUpKSlJhYWFsizLZ2bXrl0a\nN26cIiMjNWzYMK1fv95kZAAAbEZLta6uTnV1dSooKNDu3bv12muvaffu3Xr88cd95qZPn67KykqV\nlJSopKRElZWVmjFjhr2+tbVVWVlZamxs1Pbt27Vu3TqVlpbq2WeftWdOnTqlyZMnKyIiQmVlZXr5\n5Zf16quvasWKFfZMTU2NMjMzlZqaqvfff19PP/208vPz9fbbb5uMDQCAJKm7yRcbMmSIfv3rX9vP\nExIS9MILLygrK0unTp1SaGioqqqqtHPnTu3YsUOpqamSpGXLlmnixImqrq7W4MGDVVZWpsOHD+vA\ngQOKiYmRJBUUFGju3Ll6/vnnFRoaqs2bN+uLL77Q6tWrFRwcrCFDhujTTz/VqlWrNGfOHDkcDr3x\nxhuKiorS0qVLJUmJiYn66KOPtGLFCj300EMmowMA0P6fqZ4+fVqBgYEKCQmRJLlcLvXu3VsjR460\nZ0aNGqVevXpp79699kxiYqJdqJKUnp6us2fPqqKiwp65++67FRwc7DNTV1enY8eO2TNpaWk++5Oe\nnq59+/bpyy+/bJ/AAIAuy+iR6qW8Xq/+9V//VdnZ2ere/cKm3G63nE6nHA6HPedwONSvXz+53W57\nJjw83Oe1nE6nAgICfGaio6N9Ztp+xu12Kz4+Xm63W/fcc89lM+fOnZPH41FUVNQV97u6uvrrh76G\n9nrdb5uuklPqOlnJ6X+6Sta2M6Ad5bpKdcmSJSoqKrrmzLZt2zRmzBj7eWNjox599FH1799fL7zw\nwjfbyw7WHm9AR7+xnaWr5JS6TlZy+p+ukrUzcl5Xqc6aNUuZmZnXnLn4VG1jY6MyMjIkScXFxQoK\nCrLXRUREyOPxyLIs+2jVsiydPHlSERER9kzbqeA2Ho9Hra2tPjMnTpzwmWl7/lUz3bt3l9PpvJ7o\nAABct+sqVafTed0ldPr0aWVkZMiyLJWUlKh3794+61NTU9XY2CiXy2V/rupyudTU1GQ/T01NVVFR\nkWprazVgwABJUnl5uQIDA5WSkmLPLF68WM3NzXZpl5eXq3///ho4cKA988477/hsv7y8XMOHD1eP\nHj2uKw8AANfL6IVKp0+f1sMPPyyv16tVq1bpzJkzqq+vV319vX2PaWJiou69917l5eXJ5XLJ5XIp\nLy9PEyZMsA/T09LSlJSUpJkzZ2r//v169913tWjRImVnZys0NFSS9Mgjjyg4OFi5ubk6dOiQSktL\ntXz5cuXm5tpHwNOmTVNdXZ0WLlyoqqoqbdiwQRs3btScOXNMxgYAQJLhC5UqKir04YcfSpJGjBjh\ns+7iz1zXrl2r/Px8TZkyRZI0ceJEvfLKK/ZsQECAiouLNW/ePN1///0KCgpSRkaGXnzxRXumT58+\n2rp1q+bNm6fx48crLCxMs2fP9inM+Ph4bdq0Sc8884zWr1+vqKgoFRYWcjsNAKBdOLxer/XVY/im\nuDDA/3SVrOT0P10la2fk5Lt/AQAwhFIFAMAQShUAAEMoVQAADKFUAQAwhFIFAMAQShUA0OEs6/ru\n5rzeuW8LShUA0KGaz1nK2unRlqNnrjm35egZZe30qPncjVOs7fqr3wAAuFjzOUtTyzz6Q+1Z7aw9\nK0makhBy2dyWo2f0xPsNOm9JU8s8eivNqaDujsvmvm04UgUAdAjLspRdfqFQJem8JT3xfsNlR6wX\nF6ok/aH2rLLLPTfEqWBKFQDQIRwOh7IGhajbRQeclxbrpYUqSd0cUtagEPuXpXybUaoAgA4zJSFE\nr4/t61OscX/Zrx/eGa2bwsL0wzujFfeX/fa6bg7p9bF9r3iK+NuIUgUAdKiLizW+Zr+O/vIxdZPk\n0IVSOvrLxxRfs/+GK1SJC5UAAJ2grSh/+NRjki4UahtL0pFfPqZf/el/b6hClThSBQB0kikJIbra\np6QOXfmq4G87ShUA0Cm2HD2jq13Pa/3/+hsNpQoA6HBtV/ne+uRGSRdKtO0hSbc+ufGKt9t821Gq\nAIAOdfFtMzXxw5Tw5Ead14VCPS8p4cmNqokfdtX7WL/NKFUAQIe50n2of71lmH71p//Vaa9Xv/rT\n/+qvtwyz191oxUqpAgA6hGVZKv7zmcu+2OHi22audB/reUsq/vMZvlEJAIA2DodDG8Y7lT4gUNLV\nv9jh0mJNHxCoDeOdN8Q3KnGfKgCgwwR1d+itNKeyyz3KGhRy1dtm2pYX//mMNoy/Mb5MX6JUAQAd\nLKi7Q8X3fvWR55SEED18S/ANcYTahtO/AIAOd71FeSMVqkSpAgBgDKUKAIAhlCoAAIZQqgAAGEKp\nAgBgiMPr9X77v6ICAIAbAEeqAAAYQqkCAGAIpQoAgCGUKgAAhlCqAAAYQqm2s7Vr12ro0KGKjIzU\nuHHjtHv37s7eJR9//OMf9YMf/EBJSUkKCwvTW2+95bPesiy99NJLuu222xQVFaUHHnhAhw8f9pk5\ne/as5s+fr4SEBEVHR+sHP/iBamtrfWa8Xq9ycnIUFxenuLg45eTkyOv1+swcP35cWVlZio6OVkJC\ngvLz89XS0vKNM/7iF7/Q+PHjFRsbq0GDBikrK0uHDh3yu5yS9Prrr2v06NGKjY1VbGysvve97+n3\nv/+93+W81C9+8QuFhYVp/vz5fpf1pZdeUlhYmM/jO9/5jt/llKTPP/9cM2fO1KBBgxQZGamRI0dq\n165dN1RWSrUd/eY3v9HChQv105/+VO+//75SU1OVkZGh48ePd/au2ZqamjRkyBC9/PLLCg4Ovmz9\nL3/5S61cuVKFhYUqKytTeHi4Jk+erNOnT9szP/vZz7Rt2zatW7dO27dv1+nTp5WVlaXW1lZ7Zvr0\n6aqsrFRJSYlKSkpUWVmpGTNm2OtbW1uVlZWlxsZGbd++XevWrVNpaameffbZb5xx165devzxx/X7\n3/9epaWl6t69u/7lX/5FDQ0NfpVTkqKjo1VQUKD33ntP5eXlGjt2rKZOnaqPP/7Yr3Je7MMPP9Sb\nb76p5ORkn+X+lHXw4MGqqqqyHxf/5dxfcnq9Xk2YMEGWZWnTpk3au3evXnnlFYWHh99YWb1er8Wj\nfR4jRoywsrOzfZYlJCRYeXl5nb5vV3r06tXLWrlypf28oaHBioyMtJ577jl7WV1dndW7d29r2bJl\nltfrtY4dO2b16NHDWrNmjT3z8ccfWw6Hw9qyZYvl9XqtvXv3WpKsHTt22DO/+93vLEnWhx9+aHm9\nXmvz5s2Ww+GwPv74Y3vmtddeswIDA62//vWvRnN+9tlnVrdu3az//M//9OucbY+wsDBr2bJlfpnz\n2LFjVnx8vFVaWmr98z//s/XEE0/43Xu6YMECKykp6Yrr/Cnn008/bY0cOfKq62+UrByptpOWlhZV\nVFQoLS3NZ3laWpr27t3bSXv1jzl27Jjq6+t9MgQHB2v06NF2hoqKCn355Zc+MzExMUpMTLRnXC6X\nevfurZEjR9ozo0aNUq9evXxmEhMTFRMTY8+kp6fr7NmzqqioMJqrsbFR58+fV1hYmF/nbG1t1ZYt\nW9TU1KTU1FS/zPnUU0/poYce0tixY32W+1vWmpoa3XbbbRo6dKh+/OMfq6amxu9y/va3v9WIESM0\nbdo03Xrrrfrud7+rNWvWyLKsGyorv6S8nXg8HrW2tvqcupCk8PBwud3uTtqrf0x9fb0kXTFDXV2d\nJMntdisgIEBOp/OymbacbrdbTqfvLyR2OBzq16+fz8yl23E6nQoICDD+57Vw4ULdcccdSk1NleR/\nOQ8ePKj77rtPzc3N6tWrl379618rOTnZ/h+Gv+T81a9+paNHj2rNmjWXrfOn9/Sf/umftGrVKg0e\nPFgnT57U0qVLdd9992nPnj1+lbOmpkbr1q1Tbm6unnrqKR04cEALFiyQJOXk5NwwWSlVdCnPPPOM\n9uzZox07diggIKCzd6ddDB48WB988IFOnTqlt99+W7NmzdI777zT2btlVHV1tV544QXt2LFDPXr0\n6OzdaVff+973fJ7fddddGjZsmDZu3Ki77rqrk/bKvPPnz2v48OH6+c9/LkkaNmyYjh49qrVr1yon\nJ6eT9+76cfq3nbT9rebEiRM+y0+cOKGIiIhO2qt/TGRkpCRdM0NERIRaW1vl8XiuOePxeOzTONKF\nq/hOnjzpM3PpdtqO9k39ef3sZz/Tli1bVFpaqvj4eL/N2bNnTyUkJCglJUU///nPdccdd2jVqlV+\nldPlcsnj8WjUqFFyOp1yOp364x//qLVr18rpdOrmm2/2m6yX6tWrl2677TYdPXrUr97TyMhIJSYm\n+iz7znfSEWfvAAADWElEQVS+o88++8xe37bf18rR2Vkp1XbSs2dPpaSkqLy83Gd5eXm5z7n8b7OB\nAwcqMjLSJ0Nzc7P+53/+x86QkpKiHj16+MzU1taqqqrKnklNTVVjY6NcLpc943K51NTU5DNTVVXl\nc+l7eXm5AgMDlZKS8o2zLFiwwC7Ui29H8LecV3L+/Hm1tLT4Vc4HHnhAu3fv1gcffGA/hg8frilT\npuiDDz7Qrbfe6jdZL9Xc3Kzq6mpFRkb61Xs6atQoHTlyxGfZkSNHFBsbK+nG+e80YOHChYu/Rn5c\nh5tuukkvvfSSoqKiFBQUpKVLl2r37t1asWKF+vTp09m7J+nCRTuffPKJ6uvr9R//8R8aMmSIQkND\n1dLSoj59+qi1tVXLly/XoEGD1NraqmeffVb19fVavny5AgMDFRQUpM8//1xr165VcnKy/v73vysv\nL0+hoaEqKChQt27d1K9fP3300UcqKSnRHXfcodraWuXl5enOO++0L2OPj4/Xtm3bVFZWpuTkZH3y\nySeaN2+eMjIy9OCDD36jjPPmzdN//dd/6c0331RMTIyamprU1NQk6cJffhwOh1/klKTFixerZ8+e\nOn/+vGpra7V69Wpt2rRJixcvtrP5Q86goCCFh4f7PDZv3qy4uDhNnTrVr97T5557zn5Pjxw5ovnz\n5+vo0aNatmyZwsLC/CZnTEyMCgsL1a1bN0VFRem9997TkiVLlJeXpxEjRtw476mpS9t5XPlRVFRk\nxcbGWj179rSGDRtm/fa3v+30fbr4sW3bNkvSZY9HH33U8novXMa+YMECKzIy0goMDLRGjx5t7d69\n2+c16uvrrSeeeMLq27evFRwcbE2YMMHnUnSv12vV1NRYmZmZ1k033WTddNNNVmZmplVTU+Mzc+DA\nAWvChAlWcHCw1bdvXysnJ8eqr6//xhmvlE+StWDBAnvGH3J6vV7r0UcftWJiYqyePXta/fr1s8aN\nG2ffSuBPOa/0uPiWGn/K+vDDD1tRUVFWjx49rP79+1sPPvigtWfPHr/L6fV6reLiYis5OdkKDAy0\nBg0aZL388stWQ0PDDZWV36cKAIAhfKYKAIAhlCoAAIZQqgAAGEKpAgBgCKUKAIAhlCoAAIZQqgAA\nGEKpAgBgCKUKAIAh/weyR4j9bxpshQAAAABJRU5ErkJggg==\n",
226 | "text/plain": [
227 | ""
228 | ]
229 | },
230 | "metadata": {},
231 | "output_type": "display_data"
232 | }
233 | ],
234 | "source": [
235 | "KM_CL = KMeans(n_clusters =2)\n",
236 | "KM_CL.fit(X)\n",
237 | "centroids = KM_CL.cluster_centers_\n",
238 | "labels = KM_CL.labels_\n",
239 | "\n",
240 | "colors =10* [\"g.\", \"r.\",\"c.\",\"b.\",\"k.\"]\n",
241 | "\n",
242 | "for i in range(len(X)):\n",
243 | " plt.plot(X[i][0] , X[i][1], colors[labels[i]], markersize=10)\n",
244 | "plt.scatter(centroids[:,0],centroids[:,1], marker='x', s=150, linewidths=5)\n",
245 | "plt.show()"
246 | ]
247 | },
248 | {
249 | "cell_type": "code",
250 | "execution_count": 21,
251 | "metadata": {},
252 | "outputs": [
253 | {
254 | "name": "stdout",
255 | "output_type": "stream",
256 | "text": [
257 | "0.638054363376\n",
258 | "('Accuracy: ', 0.94285714285714284)\n",
259 | "('Null Accuracy: ', 0.6535714285714286)\n",
260 | "('TP :', 88)\n",
261 | "('TN', 176)\n",
262 | "('FP', 7)\n",
263 | "('FN', 9)\n",
264 | "('Misclassifier Rate :', 0.057142857142857141)\n",
265 | "(' Sensitivity or recall rate :', 0.90721649484536082)\n",
266 | "('Specificity: ', 0.96174863387978138)\n",
267 | "('FALSE Positive Rate: ', 0.03825136612021858)\n",
268 | "('Precision: ', 0.9263157894736842)\n"
269 | ]
270 | }
271 | ],
272 | "source": [
273 | "correct = 0\n",
274 | "for i in range(len(X)):\n",
275 | " predict_me = np.array(X[i].astype(float))\n",
276 | " predict_me = predict_me.reshape(-1 , len(predict_me))\n",
277 | " # print(predict_me)\n",
278 | " prediction = KM_CL.predict(predict_me)\n",
279 | " if prediction[0] == Y[i]:\n",
280 | " correct +=1\n",
281 | " \n",
282 | "print(correct / float(len(X)))\n",
283 | "evaluation = Evaluation.evaluation_fun (LR_CL, y_test, LR_y_pred_class, x_test)\n",
284 | "evaluation.Accuracy()\n",
285 | "evaluation.Confusion_Matrix()"
286 | ]
287 | },
288 | {
289 | "cell_type": "markdown",
290 | "metadata": {},
291 | "source": [
292 | "## LinearRegression"
293 | ]
294 | },
295 | {
296 | "cell_type": "code",
297 | "execution_count": 19,
298 | "metadata": {
299 | "collapsed": true
300 | },
301 | "outputs": [],
302 | "source": [
303 | "LR_CL = LinearRegression()\n",
304 | "\n",
305 | "LR_CL.fit(x_train, y_train)\n",
306 | "# with open('linerregression.pickle','wb') as f:\n",
307 | "# pickle.dump(clf, f)\n",
308 | "# pickle_in = open('linerregression.pickle', 'rb') \n",
309 | "# clf = pickle.load(pickle_in)\n",
310 | "LR_y_pred_class = Knn_Cl.predict(x_test)"
311 | ]
312 | },
313 | {
314 | "cell_type": "code",
315 | "execution_count": 20,
316 | "metadata": {},
317 | "outputs": [
318 | {
319 | "name": "stdout",
320 | "output_type": "stream",
321 | "text": [
322 | "('Accuracy: ', 0.94285714285714284)\n",
323 | "('Null Accuracy: ', 0.6535714285714286)\n",
324 | "('TP :', 88)\n",
325 | "('TN', 176)\n",
326 | "('FP', 7)\n",
327 | "('FN', 9)\n",
328 | "('Misclassifier Rate :', 0.057142857142857141)\n",
329 | "(' Sensitivity or recall rate :', 0.90721649484536082)\n",
330 | "('Specificity: ', 0.96174863387978138)\n",
331 | "('FALSE Positive Rate: ', 0.03825136612021858)\n",
332 | "('Precision: ', 0.9263157894736842)\n"
333 | ]
334 | }
335 | ],
336 | "source": [
337 | "evaluation = Evaluation.evaluation_fun (LR_CL, y_test, LR_y_pred_class, x_test)\n",
338 | "evaluation.Accuracy()\n",
339 | "evaluation.Confusion_Matrix()\n",
340 | "# evaluation.ROC_Curves()"
341 | ]
342 | },
343 | {
344 | "cell_type": "code",
345 | "execution_count": 11,
346 | "metadata": {},
347 | "outputs": [
348 | {
349 | "ename": "ValueError",
350 | "evalue": "too many values to unpack",
351 | "output_type": "error",
352 | "traceback": [
353 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
354 | "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
355 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mvoted_classifier\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVoteClassifier\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mKnn_Cl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSVM_CL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mKM_CL\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\" Voted_classifier accuracy percent\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnltk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maccuracy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvoted_classifier\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 30\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Classification :\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvoted_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"confidence %:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvoted_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconfidence\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Classification :\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvoted_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"confidence %:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvoted_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconfidence\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
356 | "\u001b[0;32m/home/mu7ammad/anaconda2/lib/python2.7/site-packages/nltk/classify/util.pyc\u001b[0m in \u001b[0;36maccuracy\u001b[0;34m(classifier, gold)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0maccuracy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclassifier\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 87\u001b[0;31m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclassifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify_many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfs\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgold\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 88\u001b[0m \u001b[0mcorrect\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0ml\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgold\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcorrect\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
357 | "\u001b[0;31mValueError\u001b[0m: too many values to unpack"
358 | ]
359 | }
360 | ],
361 | "source": [
362 | "# Combining Algos with a Vote\n",
363 | "\n",
364 | "from nltk.classify import ClassifierI\n",
365 | "from statistics import mode\n",
366 | "import nltk\n",
367 | "class VoteClassifier(ClassifierI):\n",
368 | " def __init__ (self, *classifiers):\n",
369 | " self._classifiers = classifiers\n",
370 | " \n",
371 | " def classify(self, features):\n",
372 | " votes = []\n",
373 | " for c in self._classifiers:\n",
374 | " v = c.classify(features)\n",
375 | " votes.append(v)\n",
376 | " return mode(votes)\n",
377 | " \n",
378 | " def confidence(self, features):\n",
379 | " votes = []\n",
380 | " for c in self._classifiers:\n",
381 | " v = c.classify(features)\n",
382 | " votes.append(v)\n",
383 | " \n",
384 | " choice_votes = votes.count(mode(votes))\n",
385 | " print(choice_votes)\n",
386 | " conf = float(choice_votes) / len(votes)\n",
387 | " return conf\n",
388 | "\n",
389 | "voted_classifier = VoteClassifier(Knn_Cl, SVM_CL, KM_CL)\n",
390 | "print(\" Voted_classifier accuracy percent\", (nltk.classify.accuracy(voted_classifier, x_test)) *100)\n",
391 | "print(\"Classification :\", voted_classifier.classify(x_test[0][0]), \"confidence %:\", float(voted_classifier.confidence(x_test[0][0])*100))\n",
392 | "print(\"Classification :\", voted_classifier.classify(x_test[1][0]), \"confidence %:\", float(voted_classifier.confidence(x_test[1][0])*100))\n",
393 | "print(\"Classification :\", voted_classifier.classify(x_test[2][0]), \"confidence %:\", float(voted_classifier.confidence(x_test[2][0])*100))\n",
394 | "print(\"Classification :\", voted_classifier.classify(x_test[3][0]), \"confidence %:\",float( voted_classifier.confidence(x_test[3][0])*100))\n",
395 | "print(\"Classification :\", voted_classifier.classify(x_test[4][0]), \"confidence %:\", float(voted_classifier.confidence(x_test[4][0])*100))\n",
396 | "print(\"Classification :\", voted_classifier.classify(x_test[5][0]), \"confidence %:\", float(voted_classifier.confidence(x_test[5][0])*100))"
397 | ]
398 | },
399 | {
400 | "cell_type": "code",
401 | "execution_count": null,
402 | "metadata": {
403 | "collapsed": true
404 | },
405 | "outputs": [],
406 | "source": []
407 | }
408 | ],
409 | "metadata": {
410 | "kernelspec": {
411 | "display_name": "Python 2",
412 | "language": "python",
413 | "name": "python2"
414 | },
415 | "language_info": {
416 | "codemirror_mode": {
417 | "name": "ipython",
418 | "version": 2
419 | },
420 | "file_extension": ".py",
421 | "mimetype": "text/x-python",
422 | "name": "python",
423 | "nbconvert_exporter": "python",
424 | "pygments_lexer": "ipython2",
425 | "version": "2.7.13"
426 | }
427 | },
428 | "nbformat": 4,
429 | "nbformat_minor": 2
430 | }
431 |
--------------------------------------------------------------------------------
/Preprocessing & Feature.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## This notebook handling Preprocessing and Feature Manipulations"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "# import required libs\n",
17 | "\n",
18 | "from preprocessing import Preprocessing\n",
19 | "from segmentaion import Segmentation\n",
20 | "from matplotlib import pyplot as plt\n",
21 | "from skimage import io\n",
22 | "%matplotlib inline\n",
23 | "import numpy as np\n",
24 | "from skimage.feature import greycomatrix, greycoprops\n",
25 | "from skimage import data\n",
26 | "from skimage.color import rgb2gray"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "### # Run preprocessing and Segmentation on images"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": null,
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "# you can make a loop to handling all images at once \n",
43 | "preprocessing = Preprocessing()\n",
44 | "preprocessing.preproces('/home/mu7ammad/workspace/Pythonwork/nmpy/GP/im_Pr/SG/G_P/Cl/ab6.jpg')\n",
45 | "preprocessing.binarization()\n",
46 | "preprocessing.removingSkul()\n",
47 | "preprocessing.enhanceImage()\n",
48 | "preprocessing.segmentation()\n",
49 | "image = preprocessing.getInfectedRegion()"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": null,
55 | "metadata": {},
56 | "outputs": [],
57 | "source": [
58 | "# read and show image \n",
59 | "im = io.imread('tmp/tumourImage.jpg')\n",
60 | "plt.imshow(im, 'gray')"
61 | ]
62 | },
63 | {
64 | "cell_type": "markdown",
65 | "metadata": {},
66 | "source": [
67 | "### Extract GLCM Texture Features"
68 | ]
69 | },
70 | {
71 | "cell_type": "code",
72 | "execution_count": null,
73 | "metadata": {},
74 | "outputs": [],
75 | "source": [
76 | "# GLCM Texture Features\n",
77 | "ds = []\n",
78 | "cr = []\n",
79 | "cn = []\n",
80 | "am = []\n",
81 | "en = []\n",
82 | "ho = []\n",
83 | "\n",
84 | "glcm = greycomatrix(im, [5], [0], symmetric=True, normed=True)\n",
85 | "ds.append(greycoprops(glcm, 'dissimilarity')[0,0])\n",
86 | "cr.append(greycoprops(glcm, 'correlation')[0,0])\n",
87 | "cn.append(greycoprops(glcm, 'contrast')[0,0])\n",
88 | "am.append(greycoprops(glcm, 'ASM')[0,0])\n",
89 | "en.append(greycoprops(glcm, 'energy')[0,0])\n",
90 | "ho.append(greycoprops(glcm, 'homogeneity')[0,0])\n",
91 | " \n",
92 | " \n",
93 | "print('dissimilarity',ds)\n",
94 | "print('correlation',cr)\n",
95 | "print('contrast',cn)\n",
96 | "print('ASM',am)\n",
97 | "print('energy',en)\n",
98 | "print('homogeneity',ho)"
99 | ]
100 | },
101 | {
102 | "cell_type": "markdown",
103 | "metadata": {},
104 | "source": [
105 | "## This is an example of features we extract"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": null,
111 | "metadata": {},
112 | "outputs": [],
113 | "source": [
114 | "ab5\n",
115 | "('dissimilarity', [21.110660774520827])\n",
116 | "('correlation', [0.83426829249573753])\n",
117 | "('contrast', [5321.9157231388745])\n",
118 | "('ASM', [0.34060852538803205])\n",
119 | "('energy', [0.58361676242893512])\n",
120 | "('homogeneity', [0.85598676802301221])\n",
121 | "ab4\n",
122 | "('dissimilarity', [17.544127747252752])\n",
123 | "('correlation', [0.81400737463685935])\n",
124 | "('contrast', [4425.5988201812561])\n",
125 | "('ASM', [0.50246861831414891])\n",
126 | "('energy', [0.70885020865775927])\n",
127 | "('homogeneity', [0.88572655336637995])\n",
128 | "ab6\n",
129 | "('dissimilarity', [13.017361750336331])\n",
130 | "('correlation', [0.87518943465934507])\n",
131 | "('contrast', [3287.6100757629397])\n",
132 | "('ASM', [0.50099757475878692])\n",
133 | "('energy', [0.70781182157321088])\n",
134 | "('homogeneity', [0.91962504352100038])"
135 | ]
136 | }
137 | ],
138 | "metadata": {
139 | "kernelspec": {
140 | "display_name": "Python 3",
141 | "language": "python",
142 | "name": "python3"
143 | },
144 | "language_info": {
145 | "codemirror_mode": {
146 | "name": "ipython",
147 | "version": 3
148 | },
149 | "file_extension": ".py",
150 | "mimetype": "text/x-python",
151 | "name": "python",
152 | "nbconvert_exporter": "python",
153 | "pygments_lexer": "ipython3",
154 | "version": "3.6.4"
155 | }
156 | },
157 | "nbformat": 4,
158 | "nbformat_minor": 2
159 | }
160 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Study-of-Detection-Brain-Tumor-with-machine-learning
2 | Tumor is an uncontrolled growth of tissues in any part of the body. Tumors are of different types and hence they have different treatments. Detection of tumor in the earlier stages makes the treatment possible. Here we review different segmentation methods associated with feature extraction from Magnetic Resonance Imaging (MRI) of brain. We also discuss different machine learning and classification algorithms that use to classify normal and cancerous tissues. Finally, we propose an automatic tumor detection system
3 |
--------------------------------------------------------------------------------
/Training_testing.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "import numpy as np\n",
12 | "from sklearn import preprocessing, neighbors, svm\n",
13 | "from sklearn.cluster import KMeans\n",
14 | "from sklearn.model_selection import train_test_split\n",
15 | "import pandas as pd\n",
16 | "import warnings\n",
17 | "from matplotlib import pyplot as plt\n",
18 | "from matplotlib import style\n",
19 | "from collections import Counter\n",
20 | "import pickle\n",
21 | "import random\n",
22 | "style.use('fivethirtyeight')"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": 12,
28 | "metadata": {},
29 | "outputs": [
30 | {
31 | "name": "stdout",
32 | "output_type": "stream",
33 | "text": [
34 | "0.857142857143\n"
35 | ]
36 | }
37 | ],
38 | "source": [
39 | "# Preparing Data\n",
40 | "df = pd.read_csv('Feature_all_optomized.csv')\n",
41 | "\n",
42 | "# define train and test data\n",
43 | "# X = np.array(df.drop(['class'], 1)) # put every thing in array except 'class' label\n",
44 | "Y = np.array(df['class']) # array have 'class' only\n",
45 | "fil = open('GaussianRandomProjection.pickle', 'rb')\n",
46 | "X = pickle.load(fil)\n",
47 | "fil.close()\n",
48 | "# split data in train and test groups\n",
49 | "x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.4)\n",
50 | "\n",
51 | "# implementing the k-nearest neighbors classifier\n",
52 | "clf = neighbors.KNeighborsClassifier()\n",
53 | "clf.fit(x_train, y_train)\n",
54 | "# classifier_f = open('KN_algo.pickle','wb')\n",
55 | "# pickle.dump(clf, classifier_f)\n",
56 | "# classifier_f.close() \n",
57 | "# test the accuracy of algorithm|\n",
58 | "accuracy = clf.score(x_test, y_test)\n",
59 | "print(accuracy)"
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": 5,
65 | "metadata": {
66 | "collapsed": true
67 | },
68 | "outputs": [],
69 | "source": [
70 | "# save classifier\n",
71 | "classifier_f = open('KN_algo.pickle','wb')\n",
72 | "pickle.dump(clf, classifier_f)\n",
73 | "classifier_f.close() "
74 | ]
75 | },
76 | {
77 | "cell_type": "code",
78 | "execution_count": null,
79 | "metadata": {
80 | "collapsed": true
81 | },
82 | "outputs": [],
83 | "source": [
84 | "# make a prediction\n",
85 | "\n",
86 | "ex_measure = np.array([0.185655,157.536530,123.564873,13242.350111,0.566160,52.502389,0.430877, 0.653675,1.391882,5.375214])\n",
87 | "# print(ex_measure)\n",
88 | " \n",
89 | "ex_measure = ex_measure.reshape(1, -1)\n",
90 | "# print(ex_measure)\n",
91 | "prediction = clf.predict(ex_measure)\n",
92 | "\n",
93 | "print(prediction)"
94 | ]
95 | },
96 | {
97 | "cell_type": "markdown",
98 | "metadata": {},
99 | "source": [
100 | "## SVM Classifier"
101 | ]
102 | },
103 | {
104 | "cell_type": "code",
105 | "execution_count": 14,
106 | "metadata": {},
107 | "outputs": [
108 | {
109 | "name": "stdout",
110 | "output_type": "stream",
111 | "text": [
112 | "0.857142857143\n"
113 | ]
114 | }
115 | ],
116 | "source": [
117 | "# implementing the svm classifier\n",
118 | "clf1 = svm.SVC()\n",
119 | "clf1.fit(x_train,y_train)\n",
120 | "\n",
121 | "# test the accuracy of algorithm\n",
122 | "accuracy = clf1.score(x_test, y_test)\n",
123 | "print(accuracy)"
124 | ]
125 | },
126 | {
127 | "cell_type": "code",
128 | "execution_count": 56,
129 | "metadata": {
130 | "collapsed": true
131 | },
132 | "outputs": [],
133 | "source": [
134 | "# save classifier\n",
135 | "classifier_f = open('SVM.pickle','wb')\n",
136 | "pickle.dump(clf1, classifier_f)\n",
137 | "classifier_f.close() "
138 | ]
139 | },
140 | {
141 | "cell_type": "code",
142 | "execution_count": 36,
143 | "metadata": {},
144 | "outputs": [
145 | {
146 | "name": "stdout",
147 | "output_type": "stream",
148 | "text": [
149 | "[1]\n"
150 | ]
151 | }
152 | ],
153 | "source": [
154 | "ex_measure = np.array([0.185655,157.536530,123.564873,13242.350111,0.566160,52.502389,0.430877, 0.653675,1.391882,5.375214])\n",
155 | "# print(ex_measure)\n",
156 | " \n",
157 | "ex_measure = ex_measure.reshape(1, -1)\n",
158 | "# print(ex_measure)\n",
159 | "prediction = clf1.predict(ex_measure)\n",
160 | "\n",
161 | "print(prediction)"
162 | ]
163 | },
164 | {
165 | "cell_type": "markdown",
166 | "metadata": {},
167 | "source": [
168 | "## KMeans"
169 | ]
170 | },
171 | {
172 | "cell_type": "code",
173 | "execution_count": 15,
174 | "metadata": {},
175 | "outputs": [
176 | {
177 | "data": {
178 | "image/png": "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\nwLj/D+JcAwzlpzjwAAAAAElFTkSuQmCC\n",
179 | "text/plain": [
180 | ""
181 | ]
182 | },
183 | "metadata": {},
184 | "output_type": "display_data"
185 | }
186 | ],
187 | "source": [
188 | "clf = KMeans(n_clusters =2)\n",
189 | "clf.fit(X)\n",
190 | "centroids = clf.cluster_centers_\n",
191 | "labels = clf.labels_\n",
192 | "\n",
193 | "colors =10* [\"g.\", \"r.\",\"c.\",\"b.\",\"k.\"]\n",
194 | "\n",
195 | "for i in range(len(X)):\n",
196 | " plt.plot(X[i][0] , X[i][1], colors[labels[i]], markersize=10)\n",
197 | "plt.scatter(centroids[:,0],centroids[:,1], marker='x', s=150, linewidths=5)\n",
198 | "plt.show()"
199 | ]
200 | },
201 | {
202 | "cell_type": "code",
203 | "execution_count": 20,
204 | "metadata": {},
205 | "outputs": [
206 | {
207 | "name": "stdout",
208 | "output_type": "stream",
209 | "text": [
210 | "0.529411764706\n"
211 | ]
212 | }
213 | ],
214 | "source": [
215 | "# data = preprocessing.scale(X)\n",
216 | "data = X\n",
217 | "clf = KMeans(n_clusters=2)\n",
218 | "clf.fit(data)\n",
219 | "# print(clf)\n",
220 | "\n",
221 | "correct = 0\n",
222 | "for i in range(len(data)):\n",
223 | " predict_me = np.array(data[i].astype(float))\n",
224 | " predict_me = predict_me.reshape(-1 , len(predict_me))\n",
225 | " # print(predict_me)\n",
226 | " prediction = clf.predict(predict_me)\n",
227 | " if prediction[0] == Y[i]:\n",
228 | " correct +=1\n",
229 | " \n",
230 | "print(correct / float(len(X)))"
231 | ]
232 | },
233 | {
234 | "cell_type": "code",
235 | "execution_count": 57,
236 | "metadata": {
237 | "collapsed": true
238 | },
239 | "outputs": [],
240 | "source": [
241 | "# save classifier\n",
242 | "classifier_f = open('Kmean.pickle','wb')\n",
243 | "pickle.dump(clf, classifier_f)\n",
244 | "classifier_f.close() "
245 | ]
246 | },
247 | {
248 | "cell_type": "code",
249 | "execution_count": 5,
250 | "metadata": {
251 | "collapsed": true
252 | },
253 | "outputs": [],
254 | "source": [
255 | "# new data with Feature Reduction\n",
256 | "\n",
257 | "fil = open('pca_trans_data.pickle', 'rb')\n",
258 | "data = pickle.load(fil)\n",
259 | "fil.close()"
260 | ]
261 | },
262 | {
263 | "cell_type": "code",
264 | "execution_count": 21,
265 | "metadata": {},
266 | "outputs": [
267 | {
268 | "name": "stdout",
269 | "output_type": "stream",
270 | "text": [
271 | "0.470588235294\n"
272 | ]
273 | }
274 | ],
275 | "source": [
276 | "clf = KMeans(n_clusters=2)\n",
277 | "clf.fit(data)\n",
278 | "# print(clf)\n",
279 | "\n",
280 | "correct = 0\n",
281 | "for i in range(len(data)):\n",
282 | " predict_me = np.array(data[i].astype(float))\n",
283 | " predict_me = predict_me.reshape(-1 , len(predict_me))\n",
284 | " # print(predict_me)\n",
285 | " prediction = clf.predict(predict_me)\n",
286 | " if prediction[0] == Y[i]:\n",
287 | " correct +=1\n",
288 | " \n",
289 | "print(correct / float(len(X)))"
290 | ]
291 | },
292 | {
293 | "cell_type": "code",
294 | "execution_count": 15,
295 | "metadata": {},
296 | "outputs": [
297 | {
298 | "name": "stdout",
299 | "output_type": "stream",
300 | "text": [
301 | "1.0\n"
302 | ]
303 | }
304 | ],
305 | "source": [
306 | "fil = open('y.pickle', 'rb')\n",
307 | "Y = pickle.load(fil)\n",
308 | "fil.close()\n",
309 | "x_train, x_test, y_train, y_test = train_test_split(data, Y, test_size = 0.3)\n",
310 | "# implementing the k-nearest neighbors classifier\n",
311 | "clf = neighbors.KNeighborsClassifier()\n",
312 | "clf.fit(x_train, y_train)\n",
313 | "classifier_f = open('KN_algo.pickle','wb')\n",
314 | "pickle.dump(clf, classifier_f)\n",
315 | "classifier_f.close() \n",
316 | "# test the accuracy of algorithm|\n",
317 | "accuracy = clf.score(x_test, y_test)\n",
318 | "print(accuracy)"
319 | ]
320 | },
321 | {
322 | "cell_type": "code",
323 | "execution_count": 22,
324 | "metadata": {},
325 | "outputs": [
326 | {
327 | "name": "stdout",
328 | "output_type": "stream",
329 | "text": [
330 | "0.857142857143\n"
331 | ]
332 | }
333 | ],
334 | "source": [
335 | "# implementing the svm classifier\n",
336 | "clf1 = svm.SVC()\n",
337 | "clf1.fit(x_train,y_train)\n",
338 | "\n",
339 | "# test the accuracy of algorithm\n",
340 | "accuracy = clf1.score(x_test, y_test)\n",
341 | "print(accuracy)"
342 | ]
343 | },
344 | {
345 | "cell_type": "code",
346 | "execution_count": null,
347 | "metadata": {
348 | "collapsed": true
349 | },
350 | "outputs": [],
351 | "source": []
352 | }
353 | ],
354 | "metadata": {
355 | "kernelspec": {
356 | "display_name": "Python 2",
357 | "language": "python",
358 | "name": "python2"
359 | },
360 | "language_info": {
361 | "codemirror_mode": {
362 | "name": "ipython",
363 | "version": 2
364 | },
365 | "file_extension": ".py",
366 | "mimetype": "text/x-python",
367 | "name": "python",
368 | "nbconvert_exporter": "python",
369 | "pygments_lexer": "ipython2",
370 | "version": "2.7.13"
371 | }
372 | },
373 | "nbformat": 4,
374 | "nbformat_minor": 2
375 | }
376 |
--------------------------------------------------------------------------------
/preprocessing.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Sat Apr 22 15:42:10 2017
5 |
6 | @author: mu7ammad
7 | """
8 |
9 | import cv2
10 | import numpy as np
11 |
12 | from segmentaion import Segmentation
13 |
14 | class Preprocessing(object):
15 | grayImage = ''
16 | image = ''
17 | closing1 = ''
18 | thresh1 = ''
19 | NO_skull = ''
20 | erosion = ''
21 | blur = ''
22 | no_noise = ''
23 | edge = ''
24 | tumourImage = ''
25 |
26 | def preproces(self, originalImageUrl):
27 | image = cv2.imread(str(originalImageUrl));
28 | self.grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
29 |
30 | self.image = Segmentation(self.grayImage)
31 |
32 | # binarization
33 | def binarization(self):
34 | self.closing1, self.thresh1 = self.image.binarization()
35 | #plt.imshow(closing1,'gray')
36 |
37 | # removing_skul
38 | def removingSkul(self):
39 | self.NO_skull, self.erosion = self.image.removing_skul(self.closing1)
40 | #plt.imshow(NO_skull,'gray')
41 |
42 | # enhance image to segmentation
43 | def enhanceImage(self):
44 | self.blur = self.image.enhance_image_t_seg(self.NO_skull)
45 | #plt.imshow(blur,'gray')
46 |
47 | # Segmentation
48 | def segmentation(self):
49 | self.no_noise, self.thresh2 = self.image.to_Segmentation(self.blur)
50 | #plt.imshow(no_noise,'gray')
51 |
52 | self.edge = self.image.Edge_Detection(self.thresh2)
53 |
54 | # Plot
55 | #segm.Show_plots(img,thresh1,closing1,erosion,blur,NO_skull,no_noise)
56 |
57 | def getInfectedRegion(self):
58 | col1 = 0
59 | col2 = 0
60 | row1 = 0
61 | row2 = 0
62 |
63 | for i in xrange(self.no_noise.shape[1]):
64 | for j in xrange(self.no_noise.shape[0]):
65 | if self.no_noise.item(j, i) > 0:
66 | if col1 == 0 & col2 == 0:
67 | col1 = j
68 | row1 = i
69 | else:
70 | if col1 > j:
71 | col1 = j
72 | else:
73 | if col2 < j:
74 | col2 = j
75 |
76 | if row1 > i:
77 | row1 = i
78 | else:
79 | if row2 < i:
80 | row2 = i
81 |
82 | # draw rectangle to select tumour region
83 | cv2.rectangle(self.no_noise, (row1, col1), (row2, col2), (255,0,0), 2)
84 |
85 | # save again for good preview
86 | cv2.imwrite("./tmp/no_noise.jpg", self.no_noise)
87 |
88 | # tumourImage
89 | self.tumourImage = self.no_noise[col1:col2, row1:row2]
90 | cv2.imwrite("./tmp/tumourImage.jpg", self.tumourImage)
91 | return col1, col2, row1, row2
92 |
93 |
94 |
95 |
96 | preprocessing = Preprocessing()
97 |
98 | preprocessing.preproces('/home/mu7ammad/workspace/Pythonwork/segmentation/images/FLAIR/img10.jpg')
99 | preprocessing.binarization()
100 | preprocessing.removingSkul()
101 | preprocessing.enhanceImage()
102 | preprocessing.segmentation()
103 | preprocessing.getInfectedRegion()
--------------------------------------------------------------------------------
/segmentaion.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Sat Apr 22 14:51:51 2017
5 |
6 | @author: mu7ammad
7 | """
8 |
9 | import cv2
10 | import numpy as np
11 | from matplotlib import pyplot as plt
12 |
13 | kernel = np.ones((7,7),np.uint8)
14 |
15 | class Segmentation(object):
16 |
17 | def __init__(self, Image):
18 | self.Image = Image
19 |
20 | def binarization(self):
21 | ret, thresh1 = cv2.threshold(self.Image,30,255,cv2.THRESH_BINARY)
22 | # convert to white
23 | closing1 = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel)
24 |
25 | # save to /tmp folder
26 | cv2.imwrite("./tmp/thresh1.jpg", thresh1)
27 | cv2.imwrite("./tmp/closing1.jpg", closing1)
28 |
29 | return closing1, thresh1
30 |
31 | # removing skul
32 | def removing_skul(self, closing1):
33 | erosion = cv2.erode(closing1,kernel,iterations = 6)
34 | NO_skull = self.Image * (-erosion)
35 |
36 | # save to /tmp folder
37 | cv2.imwrite("./tmp/NO_skull.jpg", NO_skull)
38 | cv2.imwrite("./tmp/erosion.jpg", erosion)
39 |
40 | return NO_skull, erosion
41 |
42 | # enhance image to segmentation
43 | def enhance_image_t_seg(self, NO_skull):
44 | median = cv2.medianBlur(NO_skull,5)
45 | blur = cv2.GaussianBlur(median,(5,5),0)
46 |
47 | # save to /tmp folder
48 | cv2.imwrite("./tmp/blur.jpg", blur)
49 |
50 | return blur
51 |
52 | def to_Segmentation(self, blur):
53 | ret, thresh2 = cv2.threshold(blur,120,255,cv2.THRESH_BINARY)
54 | img = thresh2
55 | # Remove noise
56 | no_noise = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
57 |
58 | # save to /tmp folder
59 | cv2.imwrite("./tmp/no_noise.jpg", no_noise)
60 | cv2.imwrite("./tmp/thresh2.jpg", thresh2)
61 |
62 | return no_noise, thresh2
63 |
64 | # edge detection
65 | def Edge_Detection(self,thresh2):
66 | edges = cv2.Canny(thresh2,100,200)
67 |
68 | # save to /tmp folder
69 | cv2.imwrite("./tmp/edges.jpg", edges)
70 |
71 | return edges
72 |
73 |
--------------------------------------------------------------------------------