├── .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 | " \n", 31 | " \n", 32 | " \n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | "
ASMMeanStandard deviationareaclasscontrastconvex_areacorrelationdissimilarityeccentricityenergyeuler_numberextenthomogeneitykurtosisorientationskewsolidity
00.28576168.32948380.14367311649.13102910.9495746.3891740.0000000.53456611.0000000.644000-1.0261020.7853980.4377331.000000
10.70525520.81701853.09957641513.96473010.9093894.2055550.9606590.83979511.0000000.86863718.922656-0.6927243.2114721.000000
20.19913065.61031069.660937211148.32365010.88189710.9310321.0000000.44624011.0000000.5573201.4640320.7853980.4285161.000000
30.48544532.53940959.810339111172.74144210.83671810.1375090.0000000.69673911.0000000.7429906.6168610.7853982.1191951.000000
40.15631471.76043568.979068111211.99181610.87251511.2406190.0000000.39536611.0000000.5286197.1268890.785398-0.6202391.000000
50.46367450.10269184.501250411238.50437210.91378311.0611520.7905690.68093611.0000000.7117755.3392530.7853981.5645111.000000
60.9078634.98814125.98860311172.60749510.8723681.5546130.0000000.95281811.0000000.9587567.7747380.7853981.4056811.000000
70.26056470.58355981.06965811842.72255660.9361468.9491300.0000000.51045410.5555560.5844181.1428130.7853980.4593090.833333
80.57306936.02304773.13152211805.43321010.9251227.7885820.0000000.75701311.0000000.78096410.3739860.7853982.3274611.000000
90.63350427.14266661.11155311533.78433210.9290965.0005030.0000000.79592911.0000000.8259719.3953300.7853982.1657541.000000
100.26173550.15522763.147629411453.74763810.81877113.0079350.9851710.51160111.0000000.6086320.5589930.3926990.7302811.000000
110.07471269.45148464.199162113221.85823510.60583727.8028030.0000000.27333511.0000000.3696460.1624130.785398-0.3013081.000000
120.75981113.88444146.267787211132.55621010.7378798.2927011.0000000.87167111.0000000.8818979.690550-0.0000002.3620781.000000
130.58949430.93488165.63776611801.29979210.9078537.1108360.0000000.76778511.0000000.8004478.0485180.7853982.6314911.000000
140.38447948.08042780.484196112133.20092520.83673017.7143240.0000000.62006411.0000000.6563421.6111230.7853981.4704781.000000
150.77870310.49127537.39346921843.00928310.6980836.5455411.0000000.88244211.0000000.89501310.229401-0.7853982.6335801.000000
160.39825556.22465585.979169111399.58837510.90624512.2599830.0000000.63107411.0000000.6857648.2181210.7853981.5750651.000000
170.40234548.68384869.52441011515.75325910.9466915.8913010.0000000.63430611.0000000.6908904.3645550.7853981.4861351.000000
180.39540767.114374101.077298111072.19506510.9476509.9317250.0000000.62881411.0000000.76924318.2740500.7853982.3083841.000000
190.26053967.17877279.594214111045.07989310.91796110.3197260.0000000.51043011.0000000.5816423.3351640.7853980.9470101.000000
200.70340619.26023954.118630311107.35842610.8129297.7604130.9737230.83869311.0000000.86056317.806775-1.0793993.5259761.000000
210.9106974.00349824.20729931471.46351330.5716873.3995590.8164970.95430411.0000000.95850816.8620820.7853982.5737821.000000
220.09324991.54286281.020293212710.33074610.79294523.0969671.0000000.30536811.0000000.385155-1.115229-0.000000-0.1799781.000000
230.71527715.16623047.731062111202.50328610.7391049.0862710.0000000.84574111.0000000.86105714.3640300.7853983.2596541.000000
240.68536613.87037241.349537111111.53715910.6782968.6190040.0000000.82786811.0000000.85338311.4686120.7853983.2583441.000000
250.9675291.93903416.4401562176.47753810.8548980.7101961.0000000.98363111.0000000.98484437.328373-0.0000004.8122841.000000
260.76761113.88278645.32639721676.98791210.8368825.4363531.0000000.87613411.0000000.8897526.269088-1.5707961.9021581.000000
270.9301752.46291417.64267010206.90246110.6678641.7040950.0000000.96445611.0000000.97001527.8551530.7853984.0237201.000000
280.26162068.57573880.258912101070.37270110.9171879.5891950.0000000.51148811.0000000.603616-1.2506910.7853980.4101811.000000
290.9026524.93186626.00058710339.06014220.6987882.5873530.0000000.95008011.0000000.956115-2.0633680.7853980.3306691.000000
300.73437413.27157541.04560410764.44045810.7745566.0754850.0000000.85695611.0000000.87798610.3714500.7853982.7329541.000000
310.7966518.85096636.16790110744.44961120.7194895.8445010.0000000.89255310.5000000.9070069.4799980.7853982.4406521.000000
320.55679729.83525467.609871301915.34623710.79215514.0929740.8164970.74618811.0000000.7782986.931407-1.5707962.4708761.000000
330.41727737.40268062.858996101324.23607210.83356411.8148290.0000000.64597011.0000000.6957183.7265470.7853981.5984541.000000
\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 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | "
ASMMeanStandard deviationareaclasscontrastconvex_areacorrelationdissimilarityeccentricityenergyhomogeneitykurtosisorientationskew
01.0921412.6242243.8402210.97006110.9390400.9700619.0554331.0835130.0000002.6691513.858496-0.1242021.1575960.338596
12.6953910.7994872.5443573.88024510.7435070.9700618.6722120.7132021.9949294.1931905.2044002.290448-1.0210042.484145
20.7610492.5197933.3379221.94012211.6611770.9700618.4100371.8537472.0766242.2281283.3391600.1772101.1575960.331467
31.8553071.2496902.8659140.97006111.6965000.9700617.9792041.7191770.0000003.4788974.4515930.8009221.1575961.639244
40.5974122.7559913.3052500.97006111.7532800.9700618.3205751.9062490.0000001.9741073.1672000.8626571.157596-0.479769
\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 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | " \n", 1157 | " \n", 1158 | " \n", 1159 | " \n", 1160 | " \n", 1161 | " \n", 1162 | " \n", 1163 | " \n", 1164 | " \n", 1165 | " \n", 1166 | " \n", 1167 | " \n", 1168 | " \n", 1169 | " \n", 1170 | " \n", 1171 | " \n", 1172 | " \n", 1173 | " \n", 1174 | " \n", 1175 | " \n", 1176 | " \n", 1177 | " \n", 1178 | " \n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | " \n", 1287 | " \n", 1288 | " \n", 1289 | " \n", 1290 | " \n", 1291 | " \n", 1292 | " \n", 1293 | " \n", 1294 | " \n", 1295 | " \n", 1296 | " \n", 1297 | "
ASMMeanStandard deviationareaclasscontrastconvex_areacorrelationdissimilarityeccentricityenergyhomogeneitykurtosisorientationskew
273.6754420.1038960.7595601.32287600.3516652.049397.7774570.3677190.0000005.7114226.9873962.7667570.8819173.038178
281.0337492.8928253.4553441.32287601.8192762.0493910.6808912.0692080.0000003.0289854.348078-0.1242270.8819170.309714
293.5666900.2080481.1193891.32287600.5762894.098788.1375770.5583130.0000005.6262916.887265-0.2049470.8819170.249677
302.9017660.5598531.7671151.32287601.2992932.049399.0199121.3110000.0000005.0748206.3244731.0301610.8819172.063564
313.1478420.3733721.5571171.32287601.2653164.098788.3786471.2611580.0000005.2856206.5335160.9416160.8819171.842856
322.2000981.2585822.9107723.96862703.2554482.049399.2248523.0410572.6457514.4188625.6063830.688473-1.7638341.865677
331.6488051.5778092.7062351.32287602.2507592.049399.7070772.5494670.0000003.8253755.0115260.3701450.8819171.206940
\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": "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\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 | --------------------------------------------------------------------------------