├── README.md └── Breast_Cancer_Classification_with_NN.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Breast_cancer_classification_with_NN -------------------------------------------------------------------------------- /Breast_Cancer_Classification_with_NN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "7dbb63c8", 6 | "metadata": {}, 7 | "source": [ 8 | "# Breast Cancer Classification with NN" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "2cda65cb", 14 | "metadata": {}, 15 | "source": [ 16 | "### Importing Dependencies" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "id": "67fab22d", 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "import numpy as np\n", 27 | "import pandas as pd\n", 28 | "import matplotlib.pyplot as plt\n", 29 | "import sklearn.datasets\n", 30 | "from sklearn.model_selection import train_test_split" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "id": "7a224747", 36 | "metadata": {}, 37 | "source": [ 38 | "### Data Collection and Processing" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "id": "f5cc06e5", 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "breast_cancer_dataset = sklearn.datasets.load_breast_cancer()" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 3, 54 | "id": "185c187a", 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "name": "stdout", 59 | "output_type": "stream", 60 | "text": [ 61 | "{'data': array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", 62 | " 1.189e-01],\n", 63 | " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", 64 | " 8.902e-02],\n", 65 | " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", 66 | " 8.758e-02],\n", 67 | " ...,\n", 68 | " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", 69 | " 7.820e-02],\n", 70 | " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", 71 | " 1.240e-01],\n", 72 | " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", 73 | " 7.039e-02]]), 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,\n", 74 | " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", 75 | " 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0,\n", 76 | " 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", 77 | " 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", 78 | " 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n", 79 | " 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n", 80 | " 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1,\n", 81 | " 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n", 82 | " 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,\n", 83 | " 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,\n", 84 | " 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 85 | " 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,\n", 86 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,\n", 87 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,\n", 88 | " 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,\n", 89 | " 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n", 90 | " 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,\n", 91 | " 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,\n", 92 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n", 93 | " 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n", 94 | " 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", 95 | " 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\n", 96 | " 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", 97 | " 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 98 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1]), 'frame': None, 'target_names': array(['malignant', 'benign'], dtype='\n", 136 | "\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 | "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst radiusworst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimension
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...25.3817.33184.602019.00.16220.66560.71190.26540.46010.11890
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...24.9923.41158.801956.00.12380.18660.24160.18600.27500.08902
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...23.5725.53152.501709.00.14440.42450.45040.24300.36130.08758
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...14.9126.5098.87567.70.20980.86630.68690.25750.66380.17300
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...22.5416.67152.201575.00.13740.20500.40000.16250.23640.07678
\n", 299 | "

5 rows × 30 columns

\n", 300 | "" 301 | ], 302 | "text/plain": [ 303 | " mean radius mean texture mean perimeter mean area mean smoothness \\\n", 304 | "0 17.99 10.38 122.80 1001.0 0.11840 \n", 305 | "1 20.57 17.77 132.90 1326.0 0.08474 \n", 306 | "2 19.69 21.25 130.00 1203.0 0.10960 \n", 307 | "3 11.42 20.38 77.58 386.1 0.14250 \n", 308 | "4 20.29 14.34 135.10 1297.0 0.10030 \n", 309 | "\n", 310 | " mean compactness mean concavity mean concave points mean symmetry \\\n", 311 | "0 0.27760 0.3001 0.14710 0.2419 \n", 312 | "1 0.07864 0.0869 0.07017 0.1812 \n", 313 | "2 0.15990 0.1974 0.12790 0.2069 \n", 314 | "3 0.28390 0.2414 0.10520 0.2597 \n", 315 | "4 0.13280 0.1980 0.10430 0.1809 \n", 316 | "\n", 317 | " mean fractal dimension ... worst radius worst texture worst perimeter \\\n", 318 | "0 0.07871 ... 25.38 17.33 184.60 \n", 319 | "1 0.05667 ... 24.99 23.41 158.80 \n", 320 | "2 0.05999 ... 23.57 25.53 152.50 \n", 321 | "3 0.09744 ... 14.91 26.50 98.87 \n", 322 | "4 0.05883 ... 22.54 16.67 152.20 \n", 323 | "\n", 324 | " worst area worst smoothness worst compactness worst concavity \\\n", 325 | "0 2019.0 0.1622 0.6656 0.7119 \n", 326 | "1 1956.0 0.1238 0.1866 0.2416 \n", 327 | "2 1709.0 0.1444 0.4245 0.4504 \n", 328 | "3 567.7 0.2098 0.8663 0.6869 \n", 329 | "4 1575.0 0.1374 0.2050 0.4000 \n", 330 | "\n", 331 | " worst concave points worst symmetry worst fractal dimension \n", 332 | "0 0.2654 0.4601 0.11890 \n", 333 | "1 0.1860 0.2750 0.08902 \n", 334 | "2 0.2430 0.3613 0.08758 \n", 335 | "3 0.2575 0.6638 0.17300 \n", 336 | "4 0.1625 0.2364 0.07678 \n", 337 | "\n", 338 | "[5 rows x 30 columns]" 339 | ] 340 | }, 341 | "execution_count": 5, 342 | "metadata": {}, 343 | "output_type": "execute_result" 344 | } 345 | ], 346 | "source": [ 347 | "data_frame.head()" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 6, 353 | "id": "b9995d57", 354 | "metadata": {}, 355 | "outputs": [], 356 | "source": [ 357 | "# adding target column to dataframe\n", 358 | "data_frame[\"label\"] = breast_cancer_dataset.target" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 7, 364 | "id": "548a7537", 365 | "metadata": {}, 366 | "outputs": [ 367 | { 368 | "data": { 369 | "text/html": [ 370 | "
\n", 371 | "\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 | "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensionlabel
56421.5622.39142.001479.00.111000.115900.243900.138900.17260.05623...26.40166.102027.00.141000.211300.41070.22160.20600.071150
56520.1328.25131.201261.00.097800.103400.144000.097910.17520.05533...38.25155.001731.00.116600.192200.32150.16280.25720.066370
56616.6028.08108.30858.10.084550.102300.092510.053020.15900.05648...34.12126.701124.00.113900.309400.34030.14180.22180.078200
56720.6029.33140.101265.00.117800.277000.351400.152000.23970.07016...39.42184.601821.00.165000.868100.93870.26500.40870.124000
5687.7624.5447.92181.00.052630.043620.000000.000000.15870.05884...30.3759.16268.60.089960.064440.00000.00000.28710.070391
\n", 534 | "

5 rows × 31 columns

\n", 535 | "
" 536 | ], 537 | "text/plain": [ 538 | " mean radius mean texture mean perimeter mean area mean smoothness \\\n", 539 | "564 21.56 22.39 142.00 1479.0 0.11100 \n", 540 | "565 20.13 28.25 131.20 1261.0 0.09780 \n", 541 | "566 16.60 28.08 108.30 858.1 0.08455 \n", 542 | "567 20.60 29.33 140.10 1265.0 0.11780 \n", 543 | "568 7.76 24.54 47.92 181.0 0.05263 \n", 544 | "\n", 545 | " mean compactness mean concavity mean concave points mean symmetry \\\n", 546 | "564 0.11590 0.24390 0.13890 0.1726 \n", 547 | "565 0.10340 0.14400 0.09791 0.1752 \n", 548 | "566 0.10230 0.09251 0.05302 0.1590 \n", 549 | "567 0.27700 0.35140 0.15200 0.2397 \n", 550 | "568 0.04362 0.00000 0.00000 0.1587 \n", 551 | "\n", 552 | " mean fractal dimension ... worst texture worst perimeter worst area \\\n", 553 | "564 0.05623 ... 26.40 166.10 2027.0 \n", 554 | "565 0.05533 ... 38.25 155.00 1731.0 \n", 555 | "566 0.05648 ... 34.12 126.70 1124.0 \n", 556 | "567 0.07016 ... 39.42 184.60 1821.0 \n", 557 | "568 0.05884 ... 30.37 59.16 268.6 \n", 558 | "\n", 559 | " worst smoothness worst compactness worst concavity \\\n", 560 | "564 0.14100 0.21130 0.4107 \n", 561 | "565 0.11660 0.19220 0.3215 \n", 562 | "566 0.11390 0.30940 0.3403 \n", 563 | "567 0.16500 0.86810 0.9387 \n", 564 | "568 0.08996 0.06444 0.0000 \n", 565 | "\n", 566 | " worst concave points worst symmetry worst fractal dimension label \n", 567 | "564 0.2216 0.2060 0.07115 0 \n", 568 | "565 0.1628 0.2572 0.06637 0 \n", 569 | "566 0.1418 0.2218 0.07820 0 \n", 570 | "567 0.2650 0.4087 0.12400 0 \n", 571 | "568 0.0000 0.2871 0.07039 1 \n", 572 | "\n", 573 | "[5 rows x 31 columns]" 574 | ] 575 | }, 576 | "execution_count": 7, 577 | "metadata": {}, 578 | "output_type": "execute_result" 579 | } 580 | ], 581 | "source": [ 582 | "data_frame.tail()" 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "execution_count": 8, 588 | "id": "abd815ef", 589 | "metadata": {}, 590 | "outputs": [ 591 | { 592 | "data": { 593 | "text/plain": [ 594 | "(569, 31)" 595 | ] 596 | }, 597 | "execution_count": 8, 598 | "metadata": {}, 599 | "output_type": "execute_result" 600 | } 601 | ], 602 | "source": [ 603 | "data_frame.shape" 604 | ] 605 | }, 606 | { 607 | "cell_type": "code", 608 | "execution_count": 9, 609 | "id": "fb0b4f10", 610 | "metadata": {}, 611 | "outputs": [ 612 | { 613 | "name": "stdout", 614 | "output_type": "stream", 615 | "text": [ 616 | "\n", 617 | "RangeIndex: 569 entries, 0 to 568\n", 618 | "Data columns (total 31 columns):\n", 619 | " # Column Non-Null Count Dtype \n", 620 | "--- ------ -------------- ----- \n", 621 | " 0 mean radius 569 non-null float64\n", 622 | " 1 mean texture 569 non-null float64\n", 623 | " 2 mean perimeter 569 non-null float64\n", 624 | " 3 mean area 569 non-null float64\n", 625 | " 4 mean smoothness 569 non-null float64\n", 626 | " 5 mean compactness 569 non-null float64\n", 627 | " 6 mean concavity 569 non-null float64\n", 628 | " 7 mean concave points 569 non-null float64\n", 629 | " 8 mean symmetry 569 non-null float64\n", 630 | " 9 mean fractal dimension 569 non-null float64\n", 631 | " 10 radius error 569 non-null float64\n", 632 | " 11 texture error 569 non-null float64\n", 633 | " 12 perimeter error 569 non-null float64\n", 634 | " 13 area error 569 non-null float64\n", 635 | " 14 smoothness error 569 non-null float64\n", 636 | " 15 compactness error 569 non-null float64\n", 637 | " 16 concavity error 569 non-null float64\n", 638 | " 17 concave points error 569 non-null float64\n", 639 | " 18 symmetry error 569 non-null float64\n", 640 | " 19 fractal dimension error 569 non-null float64\n", 641 | " 20 worst radius 569 non-null float64\n", 642 | " 21 worst texture 569 non-null float64\n", 643 | " 22 worst perimeter 569 non-null float64\n", 644 | " 23 worst area 569 non-null float64\n", 645 | " 24 worst smoothness 569 non-null float64\n", 646 | " 25 worst compactness 569 non-null float64\n", 647 | " 26 worst concavity 569 non-null float64\n", 648 | " 27 worst concave points 569 non-null float64\n", 649 | " 28 worst symmetry 569 non-null float64\n", 650 | " 29 worst fractal dimension 569 non-null float64\n", 651 | " 30 label 569 non-null int32 \n", 652 | "dtypes: float64(30), int32(1)\n", 653 | "memory usage: 135.7 KB\n" 654 | ] 655 | } 656 | ], 657 | "source": [ 658 | "# getting information of dataset\n", 659 | "data_frame.info()" 660 | ] 661 | }, 662 | { 663 | "cell_type": "code", 664 | "execution_count": 10, 665 | "id": "7310971a", 666 | "metadata": {}, 667 | "outputs": [ 668 | { 669 | "data": { 670 | "text/plain": [ 671 | "mean radius 0\n", 672 | "mean texture 0\n", 673 | "mean perimeter 0\n", 674 | "mean area 0\n", 675 | "mean smoothness 0\n", 676 | "mean compactness 0\n", 677 | "mean concavity 0\n", 678 | "mean concave points 0\n", 679 | "mean symmetry 0\n", 680 | "mean fractal dimension 0\n", 681 | "radius error 0\n", 682 | "texture error 0\n", 683 | "perimeter error 0\n", 684 | "area error 0\n", 685 | "smoothness error 0\n", 686 | "compactness error 0\n", 687 | "concavity error 0\n", 688 | "concave points error 0\n", 689 | "symmetry error 0\n", 690 | "fractal dimension error 0\n", 691 | "worst radius 0\n", 692 | "worst texture 0\n", 693 | "worst perimeter 0\n", 694 | "worst area 0\n", 695 | "worst smoothness 0\n", 696 | "worst compactness 0\n", 697 | "worst concavity 0\n", 698 | "worst concave points 0\n", 699 | "worst symmetry 0\n", 700 | "worst fractal dimension 0\n", 701 | "label 0\n", 702 | "dtype: int64" 703 | ] 704 | }, 705 | "execution_count": 10, 706 | "metadata": {}, 707 | "output_type": "execute_result" 708 | } 709 | ], 710 | "source": [ 711 | "# checking null values\n", 712 | "data_frame.isnull().sum()" 713 | ] 714 | }, 715 | { 716 | "cell_type": "code", 717 | "execution_count": 11, 718 | "id": "2cbe26fc", 719 | "metadata": {}, 720 | "outputs": [ 721 | { 722 | "data": { 723 | "text/html": [ 724 | "
\n", 725 | "\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 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensionlabel
count569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000...569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000
mean14.12729219.28964991.969033654.8891040.0963600.1043410.0887990.0489190.1811620.062798...25.677223107.261213880.5831280.1323690.2542650.2721880.1146060.2900760.0839460.627417
std3.5240494.30103624.298981351.9141290.0140640.0528130.0797200.0388030.0274140.007060...6.14625833.602542569.3569930.0228320.1573360.2086240.0657320.0618670.0180610.483918
min6.9810009.71000043.790000143.5000000.0526300.0193800.0000000.0000000.1060000.049960...12.02000050.410000185.2000000.0711700.0272900.0000000.0000000.1565000.0550400.000000
25%11.70000016.17000075.170000420.3000000.0863700.0649200.0295600.0203100.1619000.057700...21.08000084.110000515.3000000.1166000.1472000.1145000.0649300.2504000.0714600.000000
50%13.37000018.84000086.240000551.1000000.0958700.0926300.0615400.0335000.1792000.061540...25.41000097.660000686.5000000.1313000.2119000.2267000.0999300.2822000.0800401.000000
75%15.78000021.800000104.100000782.7000000.1053000.1304000.1307000.0740000.1957000.066120...29.720000125.4000001084.0000000.1460000.3391000.3829000.1614000.3179000.0920801.000000
max28.11000039.280000188.5000002501.0000000.1634000.3454000.4268000.2012000.3040000.097440...49.540000251.2000004254.0000000.2226001.0580001.2520000.2910000.6638000.2075001.000000
\n", 960 | "

8 rows × 31 columns

\n", 961 | "
" 962 | ], 963 | "text/plain": [ 964 | " mean radius mean texture mean perimeter mean area \\\n", 965 | "count 569.000000 569.000000 569.000000 569.000000 \n", 966 | "mean 14.127292 19.289649 91.969033 654.889104 \n", 967 | "std 3.524049 4.301036 24.298981 351.914129 \n", 968 | "min 6.981000 9.710000 43.790000 143.500000 \n", 969 | "25% 11.700000 16.170000 75.170000 420.300000 \n", 970 | "50% 13.370000 18.840000 86.240000 551.100000 \n", 971 | "75% 15.780000 21.800000 104.100000 782.700000 \n", 972 | "max 28.110000 39.280000 188.500000 2501.000000 \n", 973 | "\n", 974 | " mean smoothness mean compactness mean concavity mean concave points \\\n", 975 | "count 569.000000 569.000000 569.000000 569.000000 \n", 976 | "mean 0.096360 0.104341 0.088799 0.048919 \n", 977 | "std 0.014064 0.052813 0.079720 0.038803 \n", 978 | "min 0.052630 0.019380 0.000000 0.000000 \n", 979 | "25% 0.086370 0.064920 0.029560 0.020310 \n", 980 | "50% 0.095870 0.092630 0.061540 0.033500 \n", 981 | "75% 0.105300 0.130400 0.130700 0.074000 \n", 982 | "max 0.163400 0.345400 0.426800 0.201200 \n", 983 | "\n", 984 | " mean symmetry mean fractal dimension ... worst texture \\\n", 985 | "count 569.000000 569.000000 ... 569.000000 \n", 986 | "mean 0.181162 0.062798 ... 25.677223 \n", 987 | "std 0.027414 0.007060 ... 6.146258 \n", 988 | "min 0.106000 0.049960 ... 12.020000 \n", 989 | "25% 0.161900 0.057700 ... 21.080000 \n", 990 | "50% 0.179200 0.061540 ... 25.410000 \n", 991 | "75% 0.195700 0.066120 ... 29.720000 \n", 992 | "max 0.304000 0.097440 ... 49.540000 \n", 993 | "\n", 994 | " worst perimeter worst area worst smoothness worst compactness \\\n", 995 | "count 569.000000 569.000000 569.000000 569.000000 \n", 996 | "mean 107.261213 880.583128 0.132369 0.254265 \n", 997 | "std 33.602542 569.356993 0.022832 0.157336 \n", 998 | "min 50.410000 185.200000 0.071170 0.027290 \n", 999 | "25% 84.110000 515.300000 0.116600 0.147200 \n", 1000 | "50% 97.660000 686.500000 0.131300 0.211900 \n", 1001 | "75% 125.400000 1084.000000 0.146000 0.339100 \n", 1002 | "max 251.200000 4254.000000 0.222600 1.058000 \n", 1003 | "\n", 1004 | " worst concavity worst concave points worst symmetry \\\n", 1005 | "count 569.000000 569.000000 569.000000 \n", 1006 | "mean 0.272188 0.114606 0.290076 \n", 1007 | "std 0.208624 0.065732 0.061867 \n", 1008 | "min 0.000000 0.000000 0.156500 \n", 1009 | "25% 0.114500 0.064930 0.250400 \n", 1010 | "50% 0.226700 0.099930 0.282200 \n", 1011 | "75% 0.382900 0.161400 0.317900 \n", 1012 | "max 1.252000 0.291000 0.663800 \n", 1013 | "\n", 1014 | " worst fractal dimension label \n", 1015 | "count 569.000000 569.000000 \n", 1016 | "mean 0.083946 0.627417 \n", 1017 | "std 0.018061 0.483918 \n", 1018 | "min 0.055040 0.000000 \n", 1019 | "25% 0.071460 0.000000 \n", 1020 | "50% 0.080040 1.000000 \n", 1021 | "75% 0.092080 1.000000 \n", 1022 | "max 0.207500 1.000000 \n", 1023 | "\n", 1024 | "[8 rows x 31 columns]" 1025 | ] 1026 | }, 1027 | "execution_count": 11, 1028 | "metadata": {}, 1029 | "output_type": "execute_result" 1030 | } 1031 | ], 1032 | "source": [ 1033 | "# statistical measures of dataset\n", 1034 | "data_frame.describe()" 1035 | ] 1036 | }, 1037 | { 1038 | "cell_type": "code", 1039 | "execution_count": 12, 1040 | "id": "b7177f0a", 1041 | "metadata": {}, 1042 | "outputs": [ 1043 | { 1044 | "data": { 1045 | "text/plain": [ 1046 | "1 357\n", 1047 | "0 212\n", 1048 | "Name: label, dtype: int64" 1049 | ] 1050 | }, 1051 | "execution_count": 12, 1052 | "metadata": {}, 1053 | "output_type": "execute_result" 1054 | } 1055 | ], 1056 | "source": [ 1057 | "# distribution of data\n", 1058 | "data_frame[\"label\"].value_counts()" 1059 | ] 1060 | }, 1061 | { 1062 | "cell_type": "code", 1063 | "execution_count": 13, 1064 | "id": "19911c84", 1065 | "metadata": {}, 1066 | "outputs": [ 1067 | { 1068 | "data": { 1069 | "text/html": [ 1070 | "
\n", 1071 | "\n", 1084 | "\n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 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 | "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst radiusworst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimension
label
017.46283021.604906115.365377978.3764150.1028980.1451880.1607750.0879900.1929090.062680...21.13481129.318208141.3703301422.2863210.1448450.3748240.4506060.1822370.3234680.091530
112.14652417.91476278.075406462.7901960.0924780.0800850.0460580.0257170.1741860.062867...13.37980123.51507087.005938558.8994400.1249590.1826730.1662380.0744440.2702460.079442
\n", 1186 | "

2 rows × 30 columns

\n", 1187 | "
" 1188 | ], 1189 | "text/plain": [ 1190 | " mean radius mean texture mean perimeter mean area mean smoothness \\\n", 1191 | "label \n", 1192 | "0 17.462830 21.604906 115.365377 978.376415 0.102898 \n", 1193 | "1 12.146524 17.914762 78.075406 462.790196 0.092478 \n", 1194 | "\n", 1195 | " mean compactness mean concavity mean concave points mean symmetry \\\n", 1196 | "label \n", 1197 | "0 0.145188 0.160775 0.087990 0.192909 \n", 1198 | "1 0.080085 0.046058 0.025717 0.174186 \n", 1199 | "\n", 1200 | " mean fractal dimension ... worst radius worst texture \\\n", 1201 | "label ... \n", 1202 | "0 0.062680 ... 21.134811 29.318208 \n", 1203 | "1 0.062867 ... 13.379801 23.515070 \n", 1204 | "\n", 1205 | " worst perimeter worst area worst smoothness worst compactness \\\n", 1206 | "label \n", 1207 | "0 141.370330 1422.286321 0.144845 0.374824 \n", 1208 | "1 87.005938 558.899440 0.124959 0.182673 \n", 1209 | "\n", 1210 | " worst concavity worst concave points worst symmetry \\\n", 1211 | "label \n", 1212 | "0 0.450606 0.182237 0.323468 \n", 1213 | "1 0.166238 0.074444 0.270246 \n", 1214 | "\n", 1215 | " worst fractal dimension \n", 1216 | "label \n", 1217 | "0 0.091530 \n", 1218 | "1 0.079442 \n", 1219 | "\n", 1220 | "[2 rows x 30 columns]" 1221 | ] 1222 | }, 1223 | "execution_count": 13, 1224 | "metadata": {}, 1225 | "output_type": "execute_result" 1226 | } 1227 | ], 1228 | "source": [ 1229 | "# mean values\n", 1230 | "data_frame.groupby(\"label\").mean()" 1231 | ] 1232 | }, 1233 | { 1234 | "cell_type": "code", 1235 | "execution_count": 14, 1236 | "id": "52e48efe", 1237 | "metadata": {}, 1238 | "outputs": [], 1239 | "source": [ 1240 | "# separating features and target\n", 1241 | "X = data_frame.drop(columns = \"label\", axis = 1)\n", 1242 | "Y = data_frame[\"label\"]" 1243 | ] 1244 | }, 1245 | { 1246 | "cell_type": "code", 1247 | "execution_count": 15, 1248 | "id": "d3b94af9", 1249 | "metadata": {}, 1250 | "outputs": [ 1251 | { 1252 | "name": "stdout", 1253 | "output_type": "stream", 1254 | "text": [ 1255 | " mean radius mean texture mean perimeter mean area mean smoothness \\\n", 1256 | "0 17.99 10.38 122.80 1001.0 0.11840 \n", 1257 | "1 20.57 17.77 132.90 1326.0 0.08474 \n", 1258 | "2 19.69 21.25 130.00 1203.0 0.10960 \n", 1259 | "3 11.42 20.38 77.58 386.1 0.14250 \n", 1260 | "4 20.29 14.34 135.10 1297.0 0.10030 \n", 1261 | ".. ... ... ... ... ... \n", 1262 | "564 21.56 22.39 142.00 1479.0 0.11100 \n", 1263 | "565 20.13 28.25 131.20 1261.0 0.09780 \n", 1264 | "566 16.60 28.08 108.30 858.1 0.08455 \n", 1265 | "567 20.60 29.33 140.10 1265.0 0.11780 \n", 1266 | "568 7.76 24.54 47.92 181.0 0.05263 \n", 1267 | "\n", 1268 | " mean compactness mean concavity mean concave points mean symmetry \\\n", 1269 | "0 0.27760 0.30010 0.14710 0.2419 \n", 1270 | "1 0.07864 0.08690 0.07017 0.1812 \n", 1271 | "2 0.15990 0.19740 0.12790 0.2069 \n", 1272 | "3 0.28390 0.24140 0.10520 0.2597 \n", 1273 | "4 0.13280 0.19800 0.10430 0.1809 \n", 1274 | ".. ... ... ... ... \n", 1275 | "564 0.11590 0.24390 0.13890 0.1726 \n", 1276 | "565 0.10340 0.14400 0.09791 0.1752 \n", 1277 | "566 0.10230 0.09251 0.05302 0.1590 \n", 1278 | "567 0.27700 0.35140 0.15200 0.2397 \n", 1279 | "568 0.04362 0.00000 0.00000 0.1587 \n", 1280 | "\n", 1281 | " mean fractal dimension ... worst radius worst texture \\\n", 1282 | "0 0.07871 ... 25.380 17.33 \n", 1283 | "1 0.05667 ... 24.990 23.41 \n", 1284 | "2 0.05999 ... 23.570 25.53 \n", 1285 | "3 0.09744 ... 14.910 26.50 \n", 1286 | "4 0.05883 ... 22.540 16.67 \n", 1287 | ".. ... ... ... ... \n", 1288 | "564 0.05623 ... 25.450 26.40 \n", 1289 | "565 0.05533 ... 23.690 38.25 \n", 1290 | "566 0.05648 ... 18.980 34.12 \n", 1291 | "567 0.07016 ... 25.740 39.42 \n", 1292 | "568 0.05884 ... 9.456 30.37 \n", 1293 | "\n", 1294 | " worst perimeter worst area worst smoothness worst compactness \\\n", 1295 | "0 184.60 2019.0 0.16220 0.66560 \n", 1296 | "1 158.80 1956.0 0.12380 0.18660 \n", 1297 | "2 152.50 1709.0 0.14440 0.42450 \n", 1298 | "3 98.87 567.7 0.20980 0.86630 \n", 1299 | "4 152.20 1575.0 0.13740 0.20500 \n", 1300 | ".. ... ... ... ... \n", 1301 | "564 166.10 2027.0 0.14100 0.21130 \n", 1302 | "565 155.00 1731.0 0.11660 0.19220 \n", 1303 | "566 126.70 1124.0 0.11390 0.30940 \n", 1304 | "567 184.60 1821.0 0.16500 0.86810 \n", 1305 | "568 59.16 268.6 0.08996 0.06444 \n", 1306 | "\n", 1307 | " worst concavity worst concave points worst symmetry \\\n", 1308 | "0 0.7119 0.2654 0.4601 \n", 1309 | "1 0.2416 0.1860 0.2750 \n", 1310 | "2 0.4504 0.2430 0.3613 \n", 1311 | "3 0.6869 0.2575 0.6638 \n", 1312 | "4 0.4000 0.1625 0.2364 \n", 1313 | ".. ... ... ... \n", 1314 | "564 0.4107 0.2216 0.2060 \n", 1315 | "565 0.3215 0.1628 0.2572 \n", 1316 | "566 0.3403 0.1418 0.2218 \n", 1317 | "567 0.9387 0.2650 0.4087 \n", 1318 | "568 0.0000 0.0000 0.2871 \n", 1319 | "\n", 1320 | " worst fractal dimension \n", 1321 | "0 0.11890 \n", 1322 | "1 0.08902 \n", 1323 | "2 0.08758 \n", 1324 | "3 0.17300 \n", 1325 | "4 0.07678 \n", 1326 | ".. ... \n", 1327 | "564 0.07115 \n", 1328 | "565 0.06637 \n", 1329 | "566 0.07820 \n", 1330 | "567 0.12400 \n", 1331 | "568 0.07039 \n", 1332 | "\n", 1333 | "[569 rows x 30 columns]\n", 1334 | "0 0\n", 1335 | "1 0\n", 1336 | "2 0\n", 1337 | "3 0\n", 1338 | "4 0\n", 1339 | " ..\n", 1340 | "564 0\n", 1341 | "565 0\n", 1342 | "566 0\n", 1343 | "567 0\n", 1344 | "568 1\n", 1345 | "Name: label, Length: 569, dtype: int32\n" 1346 | ] 1347 | } 1348 | ], 1349 | "source": [ 1350 | "print(X)\n", 1351 | "print(Y)" 1352 | ] 1353 | }, 1354 | { 1355 | "cell_type": "markdown", 1356 | "id": "b882a92b", 1357 | "metadata": {}, 1358 | "source": [ 1359 | "#### Data Standardization" 1360 | ] 1361 | }, 1362 | { 1363 | "cell_type": "code", 1364 | "execution_count": 16, 1365 | "id": "9a40be69", 1366 | "metadata": {}, 1367 | "outputs": [], 1368 | "source": [ 1369 | "from sklearn.preprocessing import StandardScaler" 1370 | ] 1371 | }, 1372 | { 1373 | "cell_type": "code", 1374 | "execution_count": 17, 1375 | "id": "1e2f152e", 1376 | "metadata": {}, 1377 | "outputs": [], 1378 | "source": [ 1379 | "scaler = StandardScaler()" 1380 | ] 1381 | }, 1382 | { 1383 | "cell_type": "code", 1384 | "execution_count": 18, 1385 | "id": "83a72223", 1386 | "metadata": {}, 1387 | "outputs": [], 1388 | "source": [ 1389 | "standardized_data = scaler.fit_transform(X)" 1390 | ] 1391 | }, 1392 | { 1393 | "cell_type": "code", 1394 | "execution_count": 19, 1395 | "id": "4a0720ca", 1396 | "metadata": {}, 1397 | "outputs": [ 1398 | { 1399 | "name": "stdout", 1400 | "output_type": "stream", 1401 | "text": [ 1402 | "[[ 1.09706398 -2.07333501 1.26993369 ... 2.29607613 2.75062224\n", 1403 | " 1.93701461]\n", 1404 | " [ 1.82982061 -0.35363241 1.68595471 ... 1.0870843 -0.24388967\n", 1405 | " 0.28118999]\n", 1406 | " [ 1.57988811 0.45618695 1.56650313 ... 1.95500035 1.152255\n", 1407 | " 0.20139121]\n", 1408 | " ...\n", 1409 | " [ 0.70228425 2.0455738 0.67267578 ... 0.41406869 -1.10454895\n", 1410 | " -0.31840916]\n", 1411 | " [ 1.83834103 2.33645719 1.98252415 ... 2.28998549 1.91908301\n", 1412 | " 2.21963528]\n", 1413 | " [-1.80840125 1.22179204 -1.81438851 ... -1.74506282 -0.04813821\n", 1414 | " -0.75120669]]\n" 1415 | ] 1416 | } 1417 | ], 1418 | "source": [ 1419 | "print(standardized_data)" 1420 | ] 1421 | }, 1422 | { 1423 | "cell_type": "code", 1424 | "execution_count": 20, 1425 | "id": "87980ccc", 1426 | "metadata": {}, 1427 | "outputs": [ 1428 | { 1429 | "name": "stdout", 1430 | "output_type": "stream", 1431 | "text": [ 1432 | "[[ 1.09706398 -2.07333501 1.26993369 ... 2.29607613 2.75062224\n", 1433 | " 1.93701461]\n", 1434 | " [ 1.82982061 -0.35363241 1.68595471 ... 1.0870843 -0.24388967\n", 1435 | " 0.28118999]\n", 1436 | " [ 1.57988811 0.45618695 1.56650313 ... 1.95500035 1.152255\n", 1437 | " 0.20139121]\n", 1438 | " ...\n", 1439 | " [ 0.70228425 2.0455738 0.67267578 ... 0.41406869 -1.10454895\n", 1440 | " -0.31840916]\n", 1441 | " [ 1.83834103 2.33645719 1.98252415 ... 2.28998549 1.91908301\n", 1442 | " 2.21963528]\n", 1443 | " [-1.80840125 1.22179204 -1.81438851 ... -1.74506282 -0.04813821\n", 1444 | " -0.75120669]]\n" 1445 | ] 1446 | } 1447 | ], 1448 | "source": [ 1449 | "# updating features with standardized data\n", 1450 | "X = standardized_data\n", 1451 | "print(X)" 1452 | ] 1453 | }, 1454 | { 1455 | "cell_type": "code", 1456 | "execution_count": 21, 1457 | "id": "096d41d3", 1458 | "metadata": {}, 1459 | "outputs": [ 1460 | { 1461 | "name": "stdout", 1462 | "output_type": "stream", 1463 | "text": [ 1464 | "0 0\n", 1465 | "1 0\n", 1466 | "2 0\n", 1467 | "3 0\n", 1468 | "4 0\n", 1469 | " ..\n", 1470 | "564 0\n", 1471 | "565 0\n", 1472 | "566 0\n", 1473 | "567 0\n", 1474 | "568 1\n", 1475 | "Name: label, Length: 569, dtype: int32\n" 1476 | ] 1477 | } 1478 | ], 1479 | "source": [ 1480 | "print(Y)" 1481 | ] 1482 | }, 1483 | { 1484 | "cell_type": "markdown", 1485 | "id": "79bf7648", 1486 | "metadata": {}, 1487 | "source": [ 1488 | "### Split Train and Test data" 1489 | ] 1490 | }, 1491 | { 1492 | "cell_type": "code", 1493 | "execution_count": 29, 1494 | "id": "a4b5e395", 1495 | "metadata": {}, 1496 | "outputs": [], 1497 | "source": [ 1498 | "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 2)" 1499 | ] 1500 | }, 1501 | { 1502 | "cell_type": "code", 1503 | "execution_count": 30, 1504 | "id": "ba92150d", 1505 | "metadata": {}, 1506 | "outputs": [ 1507 | { 1508 | "name": "stdout", 1509 | "output_type": "stream", 1510 | "text": [ 1511 | "Total data: (569, 30)\n", 1512 | "Train data: (455, 30)\n", 1513 | "Test data: (114, 30)\n" 1514 | ] 1515 | } 1516 | ], 1517 | "source": [ 1518 | "print(\"Total data: \", X.shape)\n", 1519 | "print(\"Train data: \", X_train.shape)\n", 1520 | "print(\"Test data: \", X_test.shape)" 1521 | ] 1522 | }, 1523 | { 1524 | "cell_type": "markdown", 1525 | "id": "f81c4e85", 1526 | "metadata": {}, 1527 | "source": [ 1528 | "### Building Neural Network" 1529 | ] 1530 | }, 1531 | { 1532 | "cell_type": "markdown", 1533 | "id": "012dd59e", 1534 | "metadata": {}, 1535 | "source": [ 1536 | "#### Importing Tensorflow and Keras" 1537 | ] 1538 | }, 1539 | { 1540 | "cell_type": "code", 1541 | "execution_count": 24, 1542 | "id": "17fdc50c", 1543 | "metadata": {}, 1544 | "outputs": [], 1545 | "source": [ 1546 | "import tensorflow as tf\n", 1547 | "tf.random.set_seed(3)\n", 1548 | "from tensorflow import keras" 1549 | ] 1550 | }, 1551 | { 1552 | "cell_type": "code", 1553 | "execution_count": 27, 1554 | "id": "292c2393", 1555 | "metadata": {}, 1556 | "outputs": [], 1557 | "source": [ 1558 | "# setting up the layers of Neural Network\n", 1559 | "\n", 1560 | "model = keras.Sequential([\n", 1561 | " \n", 1562 | " keras.layers.Flatten(input_shape = (30,)),\n", 1563 | " keras.layers.Dense(20, activation = 'relu'),\n", 1564 | " keras.layers.Dense(2, activation = \"sigmoid\")\n", 1565 | "])" 1566 | ] 1567 | }, 1568 | { 1569 | "cell_type": "code", 1570 | "execution_count": 28, 1571 | "id": "03b1f4e3", 1572 | "metadata": {}, 1573 | "outputs": [], 1574 | "source": [ 1575 | "# compiling the Neural Network\n", 1576 | "\n", 1577 | "model.compile(optimizer = \"adam\",\n", 1578 | " loss = \"sparse_categorical_crossentropy\",\n", 1579 | " metrics = [\"accuracy\"])" 1580 | ] 1581 | }, 1582 | { 1583 | "cell_type": "code", 1584 | "execution_count": 31, 1585 | "id": "ba0a717f", 1586 | "metadata": {}, 1587 | "outputs": [ 1588 | { 1589 | "name": "stdout", 1590 | "output_type": "stream", 1591 | "text": [ 1592 | "Epoch 1/10\n", 1593 | "13/13 [==============================] - 0s 10ms/step - loss: 0.7720 - accuracy: 0.4523 - val_loss: 0.6600 - val_accuracy: 0.5870\n", 1594 | "Epoch 2/10\n", 1595 | "13/13 [==============================] - 0s 3ms/step - loss: 0.5253 - accuracy: 0.7922 - val_loss: 0.4667 - val_accuracy: 0.8478\n", 1596 | "Epoch 3/10\n", 1597 | "13/13 [==============================] - 0s 2ms/step - loss: 0.3880 - accuracy: 0.8875 - val_loss: 0.3581 - val_accuracy: 0.9130\n", 1598 | "Epoch 4/10\n", 1599 | "13/13 [==============================] - 0s 2ms/step - loss: 0.3069 - accuracy: 0.9144 - val_loss: 0.2917 - val_accuracy: 0.9348\n", 1600 | "Epoch 5/10\n", 1601 | "13/13 [==============================] - 0s 2ms/step - loss: 0.2517 - accuracy: 0.9315 - val_loss: 0.2496 - val_accuracy: 0.9348\n", 1602 | "Epoch 6/10\n", 1603 | "13/13 [==============================] - 0s 2ms/step - loss: 0.2144 - accuracy: 0.9389 - val_loss: 0.2199 - val_accuracy: 0.9348\n", 1604 | "Epoch 7/10\n", 1605 | "13/13 [==============================] - 0s 2ms/step - loss: 0.1877 - accuracy: 0.9462 - val_loss: 0.1978 - val_accuracy: 0.9348\n", 1606 | "Epoch 8/10\n", 1607 | "13/13 [==============================] - 0s 4ms/step - loss: 0.1671 - accuracy: 0.9462 - val_loss: 0.1803 - val_accuracy: 0.9348\n", 1608 | "Epoch 9/10\n", 1609 | "13/13 [==============================] - 0s 2ms/step - loss: 0.1514 - accuracy: 0.9462 - val_loss: 0.1657 - val_accuracy: 0.9348\n", 1610 | "Epoch 10/10\n", 1611 | "13/13 [==============================] - 0s 2ms/step - loss: 0.1376 - accuracy: 0.9560 - val_loss: 0.1543 - val_accuracy: 0.9565\n" 1612 | ] 1613 | } 1614 | ], 1615 | "source": [ 1616 | "# training the Neural Network\n", 1617 | "\n", 1618 | "history = model.fit(X_train, Y_train, validation_split = 0.1, epochs = 10)" 1619 | ] 1620 | }, 1621 | { 1622 | "cell_type": "code", 1623 | "execution_count": 34, 1624 | "id": "30a2c0fa", 1625 | "metadata": {}, 1626 | "outputs": [ 1627 | { 1628 | "data": { 1629 | "text/plain": [ 1630 | "" 1631 | ] 1632 | }, 1633 | "execution_count": 34, 1634 | "metadata": {}, 1635 | "output_type": "execute_result" 1636 | }, 1637 | { 1638 | "data": { 1639 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHFCAYAAAAOmtghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbFUlEQVR4nO3deVxVdf7H8ddluZcdFBARAXHJNTe0csvM1LScbKa01SzrN46VmpVljU3ZYns2mWZT5lRWNllWU43R4l5pikvivoGCIsiOrPf8/rhyFXFhuXDh8n4+Hjy8HM7yuWDx9ruaDMMwEBEREXERbs4uQERERMSRFG5ERETEpSjciIiIiEtRuBERERGXonAjIiIiLkXhRkRERFyKwo2IiIi4FIUbERERcSkKNyIiIuJSFG5EXMzChQsxmUyYTCaWL19e4euGYdC2bVtMJhNXXHGFQ59tMpl48sknq3zdgQMHMJlMLFy4sNLXbN26FZPJhKenJykpKVV+poi4LoUbERfl7+/Pu+++W+H4ihUr2Lt3L/7+/k6oynHeeecdAEpKSnj//fedXI2I1CcKNyIuasyYMSxZsoTs7Oxyx99991369OlDVFSUkyqrucLCQhYtWkS3bt2IiIhgwYIFzi7pnE6cOIG28BOpWwo3Ii7q5ptvBuDjjz+2H8vKymLJkiXcddddZ73m+PHjTJw4kYiICMxmM61bt+bxxx+nsLCw3HnZ2dncc889BAcH4+fnx9VXX82uXbvOes/du3dzyy230KxZMywWCx07duTNN9+s0XtbunQp6enp3H333dxxxx3s2rWL1atXVzivsLCQmTNn0rFjR7y8vAgODmbQoEGsXbvWfo7VauWNN96ge/fueHt7ExQUxGWXXcZXX31lP+dc3W2tWrVi3Lhx9s/LugS///577rrrLkJDQ/Hx8aGwsJA9e/Zw55130q5dO3x8fIiIiGDkyJFs3bq1wn0zMzN58MEHad26NRaLhWbNmjFixAh27NiBYRi0a9eOYcOGVbguNzeXwMBA7r333ip+R0Vci8KNiIsKCAjghhtuKNeq8fHHH+Pm5saYMWMqnF9QUMCgQYN4//33mTp1Kt988w233XYbL774In/+85/t5xmGwahRo/jggw948MEH+eKLL7jssssYPnx4hXsmJCTQu3dv/vjjD1555RX++9//cs011zBp0iSeeuqpar+3d999F4vFwq233spdd92FyWSq0AVXUlLC8OHDefrpp7n22mv54osvWLhwIX379iUxMdF+3rhx45g8eTK9e/dm8eLFfPLJJ/zpT3/iwIED1a7vrrvuwtPTkw8++IDPPvsMT09PkpOTCQ4O5vnnn+d///sfb775Jh4eHlx66aXs3LnTfm1OTg79+/dn/vz53HnnnXz99de89dZbXHTRRaSkpGAymbj//vuJi4tj9+7d5Z77/vvvk52drXAjYoiIS3nvvfcMwFi/fr3x888/G4Dxxx9/GIZhGL179zbGjRtnGIZhdO7c2Rg4cKD9urfeessAjE8//bTc/V544QUDML7//nvDMAzju+++MwDj9ddfL3fes88+awDGP/7xD/uxYcOGGS1btjSysrLKnXvfffcZXl5exvHjxw3DMIz9+/cbgPHee+9d8P0dOHDAcHNzM2666Sb7sYEDBxq+vr5Gdna2/dj7779vAMa//vWvc95r5cqVBmA8/vjj533mme+rTHR0tHHHHXfYPy/73o8dO/aC76OkpMQoKioy2rVrZzzwwAP24zNnzjQAIy4u7pzXZmdnG/7+/sbkyZPLHe/UqZMxaNCgCz5bxNWp5UbEhQ0cOJA2bdqwYMECtm7dyvr168/ZJfXTTz/h6+vLDTfcUO54WbfLjz/+CMDPP/8MwK233lruvFtuuaXc5wUFBfz4449cf/31+Pj4UFJSYv8YMWIEBQUF/Prrr1V+T++99x5Wq7Xc+7jrrrvIy8tj8eLF9mPfffcdXl5e53y/ZecADm/p+Mtf/lLhWElJCc899xydOnXCbDbj4eGB2Wxm9+7dbN++vVxNF110EVddddU57+/v78+dd97JwoULycvLA2w/v4SEBO677z6HvheRhkjhRsSFmUwm7rzzTj788EN718aAAQPOem56ejrNmzfHZDKVO96sWTM8PDxIT0+3n+fh4UFwcHC585o3b17hfiUlJbzxxht4enqW+xgxYgQAaWlpVXo/VquVhQsX0qJFC2JjY8nMzCQzM5OrrroKX1/fcl1Tx44do0WLFri5nft/c8eOHcPd3b1C7TUVHh5e4djUqVOZMWMGo0aN4uuvv+a3335j/fr1dOvWjRMnTpSrqWXLlhd8xv33309OTg6LFi0CYM6cObRs2ZLrrrvOcW9EpIHycHYBIlK7xo0bxxNPPMFbb73Fs88+e87zgoOD+e233zAMo1zASU1NpaSkhJCQEPt5JSUlpKenlws4R44cKXe/Jk2a4O7uzu23337OlpGYmJgqvZcffviBgwcP2us406+//kpCQgKdOnUiNDSU1atXY7VazxlwQkNDKS0t5ciRI2cNJGUsFkuFQdWAPfCd6cyACPDhhx8yduxYnnvuuXLH09LSCAoKKlfToUOHzllLmbZt2zJ8+HDefPNNhg8fzldffcVTTz2Fu7v7Ba8VcXVquRFxcRERETz88MOMHDmSO+6445znDR48mNzcXJYuXVrueNkaMoMHDwZg0KBBAPYWgzIfffRRuc99fHwYNGgQ8fHxdO3alV69elX4OFtAOZ93330XNzc3li5dys8//1zu44MPPgCwD6AePnw4BQUF510YsGwQ9Lx588773FatWrFly5Zyx3766Sdyc3MrXbvJZMJisZQ79s0333D48OEKNe3atYuffvrpgvecPHkyW7Zs4Y477sDd3Z177rmn0vWIuDK13Ig0As8///wFzxk7dixvvvkmd9xxBwcOHODiiy9m9erVPPfcc4wYMcI+BmTo0KFcfvnlTJs2jby8PHr16sWaNWvs4eJ0r7/+Ov3792fAgAH87W9/o1WrVuTk5LBnzx6+/vrrSv0CL5Oens6XX37JsGHDztn18tprr/H+++8za9Ysbr75Zt577z0mTJjAzp07GTRoEFarld9++42OHTty0003MWDAAG6//XaeeeYZjh49yrXXXovFYiE+Ph4fHx/uv/9+AG6//XZmzJjBE088wcCBA0lISGDOnDkEBgZWuv5rr72WhQsX0qFDB7p27cqGDRt46aWXKnRBTZkyhcWLF3Pdddfx6KOPcskll3DixAlWrFjBtddeaw+XAEOGDKFTp078/PPP3HbbbTRr1qzS9Yi4NGePaBYRxzp9ttT5nDlbyjAMIz093ZgwYYIRHh5ueHh4GNHR0cb06dONgoKCcudlZmYad911lxEUFGT4+PgYQ4YMMXbs2HHWWUX79+837rrrLiMiIsLw9PQ0QkNDjb59+xrPPPNMuXO4wGyp2bNnG4CxdOnSc55TNuNryZIlhmEYxokTJ4wnnnjCaNeunWE2m43g4GDjyiuvNNauXWu/prS01HjttdeMLl26GGaz2QgMDDT69OljfP311/ZzCgsLjWnTphmRkZGGt7e3MXDg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oaxdu9ZJVcnpsrKyAGjatKmTK2nc7r33Xq655hquuuoqZ5fSqH311Vf06tWLG2+8kWbNmtGjRw/+9a9/ObusRqt///78+OOP7Nq1C4DNmzezevVqRowY4eTKGrZGt3Gmo6WlpVFaWkpYWFi542FhYRw5csRJVUkZwzCYOnUq/fv3p0uXLs4up9H65JNP2LBhA7///ruzS2n09u3bx7x585g6dSqPPfYY69atY9KkSVgsFsaOHevs8hqdRx55hKysLDp06IC7uzulpaU8++yz3Hzzzc4urUFTuHEQk8lU7nPDMCock7p33333sWXLFlavXu3sUhqtpKQkJk+ezPfff4+Xl5ezy2n0rFYrvXr14rnnngOgR48ebNu2jXnz5incOMHixYv58MMP+eijj+jcuTObNm1iypQptGjRgjvuuMPZ5TVYCjc1FBISgru7e4VWmtTU1AqtOVK37r//fr766itWrlxJy5YtnV1Oo7VhwwZSU1OJjY21HystLWXlypXMmTOHwsJC3N3dnVhh4xIeHk6nTp3KHevYsSNLlixxUkWN28MPP8yjjz7KTTfdBMDFF1/MwYMHmTVrlsJNDWjMTQ2ZzWZiY2OJi4srdzwuLo6+ffs6qarGzTAM7rvvPj7//HN++uknYmJinF1SozZ48GC2bt3Kpk2b7B+9evXi1ltvZdOmTQo2daxfv34VlkbYtWsX0dHRTqqoccvPz8fNrfyvYnd3d00FryG13DjA1KlTuf322+nVqxd9+vTh7bffJjExkQkTJji7tEbp3nvv5aOPPuLLL7/E39/f3qoWGBiIt7e3k6trfPz9/SuMd/L19SU4OFjjoJzggQceoG/fvjz33HOMHj2adevW8fbbb/P22287u7RGaeTIkTz77LNERUXRuXNn4uPjefXVV7nrrrucXVrDZohDvPnmm0Z0dLRhNpuNnj17GitWrHB2SY0WcNaP9957z9mlyUkDBw40Jk+e7OwyGq2vv/7a6NKli2GxWIwOHToYb7/9trNLarSys7ONyZMnG1FRUYaXl5fRunVr4/HHHzcKCwudXVqDpnVuRERExKVozI2IiIi4FIUbERERcSkKNyIiIuJSFG5ERETEpSjciIiIiEtRuBERERGXonAjIiIiLkXhRkQaveXLl2MymcjMzHR2KSLiAAo3IiIi4lIUbkRERMSlKNyIiNMZhsGLL75I69at8fb2plu3bnz22WfAqS6jb775hm7duuHl5cWll17K1q1by91jyZIldO7cGYvFQqtWrXjllVfKfb2wsJBp06YRGRmJxWKhXbt2vPvuu+XO2bBhA7169cLHx4e+fftW2D1bRBoGhRsRcbq///3vvPfee8ybN49t27bxwAMPcNttt7FixQr7OQ8//DAvv/wy69evp1mzZvzpT3+iuLgYsIWS0aNHc9NNN7F161aefPJJZsyYwcKFC+3Xjx07lk8++YR//vOfbN++nbfeegs/P79ydTz++OO88sor/P7773h4eGhnZpEGShtniohT5eXlERISwk8//USfPn3sx++++27y8/P5v//7PwYNGsQnn3zCmDFjADh+/DgtW7Zk4cKFjB49mltvvZVjx47x/fff26+fNm0a33zzDdu2bWPXrl20b9+euLg4rrrqqgo1LF++nEGDBvHDDz8wePBgAL799luuueYaTpw4gZeXVy1/F0TEkdRyIyJOlZCQQEFBAUOGDMHPz8/+8f7777N37177eacHn6ZNm9K+fXu2b98OwPbt2+nXr1+5+/br14/du3dTWlrKpk2bcHd3Z+DAgeetpWvXrvbX4eHhAKSmptb4PYpI3fJwdgEi0rhZrVYAvvnmGyIiIsp9zWKxlAs4ZzKZTIBtzE7Z6zKnN0p7e3tXqhZPT88K9y6rT0QaDrXciIhTderUCYvFQmJiIm3bti33ERkZaT/v119/tb/OyMhg165ddOjQwX6P1atXl7vv2rVrueiii3B3d+fiiy/GarWWG8MjIq5LLTci4lT+/v489NBDPPDAA1itVvr37092djZr167Fz8+P6OhoAGbOnElwcDBhYWE8/vjjhISEMGrUKAAefPBBevfuzdNPP82YMWP45ZdfmDNnDnPnzgWgVatW3HHHHdx1113885//pFu3bhw8eJDU1FRGjx7trLcuIrVE4UZEnO7pp5+mWbNmzJo1i3379hEUFETPnj157LHH7N1Czz//PJMnT2b37t1069aNr776CrPZDEDPnj359NNPeeKJJ3j66acJDw9n5syZjBs3zv6MefPm8dhjjzFx4kTS09OJiorisccec8bbFZFaptlSIlKvlc1kysjIICgoyNnliEgDoDE3IiIi4lIUbkRERMSlqFtKREREXIpabkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSl/D9mw4yDZ/tvcwAAAABJRU5ErkJggg==\n", 1640 | "text/plain": [ 1641 | "
" 1642 | ] 1643 | }, 1644 | "metadata": {}, 1645 | "output_type": "display_data" 1646 | } 1647 | ], 1648 | "source": [ 1649 | "# visualize train validation accuracy\n", 1650 | "\n", 1651 | "plt.plot(history.history[\"accuracy\"])\n", 1652 | "plt.plot(history.history[\"val_accuracy\"])\n", 1653 | "\n", 1654 | "plt.title(\"Model Accuracy\")\n", 1655 | "plt.ylabel(\"accuracy\")\n", 1656 | "plt.xlabel(\"epoch\")\n", 1657 | "\n", 1658 | "plt.legend([\"training\", \"validation\"], loc = \"lower right\")" 1659 | ] 1660 | }, 1661 | { 1662 | "cell_type": "code", 1663 | "execution_count": 35, 1664 | "id": "f33a8681", 1665 | "metadata": {}, 1666 | "outputs": [ 1667 | { 1668 | "data": { 1669 | "text/plain": [ 1670 | "" 1671 | ] 1672 | }, 1673 | "execution_count": 35, 1674 | "metadata": {}, 1675 | "output_type": "execute_result" 1676 | }, 1677 | { 1678 | "data": { 1679 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHFCAYAAAAOmtghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABomUlEQVR4nO3dd3hUZd7G8e9k0jukEUKA0AmdgEgHUZCm2EBBilgWO2BZFXUVC2vHBohSXjsIirhgQZEuLdKk9wQIhgRIgyQkc94/JgnEkJAyySST+3NdczE5c84zvyG7zO1znmIyDMNARERExEE42bsAEREREVtSuBERERGHonAjIiIiDkXhRkRERByKwo2IiIg4FIUbERERcSgKNyIiIuJQFG5ERETEoSjciIiIiENRuBFxMHPnzsVkMmEymVixYkWB1w3DoFGjRphMJnr16mXT9zaZTLzwwgslvu7IkSOYTCbmzp1b7Gt27NiByWTCxcWFuLi4Er+niDguhRsRB+Xj48OsWbMKHF+5ciUHDx7Ex8fHDlXZzieffAJAVlYWn376qZ2rEZHKROFGxEENGzaMhQsXkpycnO/4rFmz6Ny5M3Xr1rVTZWWXkZHBF198QZs2bQgLC2P27Nn2LqlQ58+fR1v4iVQshRsRB3XHHXcA8NVXX+UdS0pKYuHChYwdO/ay15w+fZoHHniAsLAwXF1dadCgAZMmTSIjIyPfecnJydx7770EBATg7e3N9ddfz759+y7b5v79+xk+fDjBwcG4ubnRvHlzPvzwwzJ9tkWLFpGYmMg999zD6NGj2bdvH2vWrClwXkZGBpMnT6Z58+a4u7sTEBBA7969WbduXd45FouF999/n7Zt2+Lh4YG/vz9XX301ixcvzjunsNtt9evXZ8yYMXk/594S/OWXXxg7dixBQUF4enqSkZHBgQMHuOuuu2jcuDGenp6EhYUxePBgduzYUaDds2fP8thjj9GgQQPc3NwIDg5mwIAB7NmzB8MwaNy4Mf369StwXWpqKn5+fjz44IMl/BsVcSwKNyIOytfXl1tvvTVfr8ZXX32Fk5MTw4YNK3B+eno6vXv35tNPP2XixIksWbKEO++8k9dff52bb7457zzDMBgyZAifffYZjz32GN999x1XX301/fv3L9Dmrl276NixI3/99RdvvfUW//vf/xg4cCCPPPIIL774Yqk/26xZs3Bzc2PEiBGMHTsWk8lU4BZcVlYW/fv356WXXmLQoEF89913zJ07ly5duhATE5N33pgxY3j00Ufp2LEj8+bN4+uvv+aGG27gyJEjpa5v7NixuLi48Nlnn7FgwQJcXFw4ceIEAQEB/Pe//+Wnn37iww8/xNnZmU6dOrF37968a1NSUujWrRsfffQRd911Fz/88AMzZsygSZMmxMXFYTKZePjhh1m2bBn79+/P976ffvopycnJCjcihog4lDlz5hiAsWnTJuP33383AOOvv/4yDMMwOnbsaIwZM8YwDMNo0aKF0bNnz7zrZsyYYQDG/Pnz87X32muvGYDxyy+/GIZhGD/++KMBGO+++26+81555RUDMP7zn//kHevXr59Rp04dIykpKd+5Dz30kOHu7m6cPn3aMAzDOHz4sAEYc+bMueLnO3LkiOHk5GTcfvvtecd69uxpeHl5GcnJyXnHPv30UwMwPv7440LbWrVqlQEYkyZNKvI9//m5ctWrV88YPXp03s+5f/ejRo264ufIysoyMjMzjcaNGxsTJkzIOz558mQDMJYtW1botcnJyYaPj4/x6KOP5jseGRlp9O7d+4rvLeLo1HMj4sB69uxJw4YNmT17Njt27GDTpk2F3pJavnw5Xl5e3HrrrfmO5952+e233wD4/fffARgxYkS+84YPH57v5/T0dH777TduuukmPD09ycrKynsMGDCA9PR01q9fX+LPNGfOHCwWS77PMXbsWNLS0pg3b17esR9//BF3d/dCP2/uOYDNezpuueWWAseysrJ49dVXiYyMxNXVFWdnZ1xdXdm/fz+7d+/OV1OTJk249tprC23fx8eHu+66i7lz55KWlgZYf3+7du3ioYcesulnEamKFG5EHJjJZOKuu+7i888/z7u10b1798uem5iYSK1atTCZTPmOBwcH4+zsTGJiYt55zs7OBAQE5DuvVq1aBdrLysri/fffx8XFJd9jwIABACQkJJTo81gsFubOnUvt2rWJiori7NmznD17lmuvvRYvL698t6ZOnTpF7dq1cXIq/J+5U6dOYTabC9ReVqGhoQWOTZw4keeee44hQ4bwww8/sGHDBjZt2kSbNm04f/58vprq1Klzxfd4+OGHSUlJ4YsvvgDggw8+oE6dOtx44422+yAiVZSzvQsQkfI1ZswYnn/+eWbMmMErr7xS6HkBAQFs2LABwzDyBZz4+HiysrIIDAzMOy8rK4vExMR8AefkyZP52qtRowZms5mRI0cW2jMSERFRos/y66+/cvTo0bw6/mn9+vXs2rWLyMhIgoKCWLNmDRaLpdCAExQURHZ2NidPnrxsIMnl5uZWYFA1kBf4/umfARHg888/Z9SoUbz66qv5jickJODv75+vpmPHjhVaS65GjRrRv39/PvzwQ/r378/ixYt58cUXMZvNV7xWxNGp50bEwYWFhfHEE08wePBgRo8eXeh5ffr0ITU1lUWLFuU7nruGTJ8+fQDo3bs3QF6PQa4vv/wy38+enp707t2bLVu20Lp1azp06FDgcbmAUpRZs2bh5OTEokWL+P333/M9PvvsM4C8AdT9+/cnPT29yIUBcwdBT58+vcj3rV+/Ptu3b893bPny5aSmpha7dpPJhJubW75jS5Ys4fjx4wVq2rdvH8uXL79im48++ijbt29n9OjRmM1m7r333mLXI+LI1HMjUg3897//veI5o0aN4sMPP2T06NEcOXKEVq1asWbNGl599VUGDBiQNwakb9++9OjRgyeffJK0tDQ6dOjA2rVr88LFpd599126detG9+7duf/++6lfvz4pKSkcOHCAH374oVhf4LkSExP5/vvv6devX6G3Xt555x0+/fRTpkyZwh133MGcOXMYN24ce/fupXfv3lgsFjZs2EDz5s25/fbb6d69OyNHjuTll1/m77//ZtCgQbi5ubFlyxY8PT15+OGHARg5ciTPPfcczz//PD179mTXrl188MEH+Pn5Fbv+QYMGMXfuXJo1a0br1q2Jjo7mjTfeKHALavz48cybN48bb7yRp556iquuuorz58+zcuVKBg0alBcuAa677joiIyP5/fffufPOOwkODi52PSIOzd4jmkXEti6dLVWUf86WMgzDSExMNMaNG2eEhoYazs7ORr169Yynn37aSE9Pz3fe2bNnjbFjxxr+/v6Gp6encd111xl79uy57Kyiw4cPG2PHjjXCwsIMFxcXIygoyOjSpYvx8ssv5zuHK8yWmjp1qgEYixYtKvSc3BlfCxcuNAzDMM6fP288//zzRuPGjQ1XV1cjICDAuOaaa4x169blXZOdnW288847RsuWLQ1XV1fDz8/P6Ny5s/HDDz/knZORkWE8+eSTRnh4uOHh4WH07NnT2Lp1a6GzpS73d3/m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5GS68kUiIlI0k6nYt4bszcPDg5tvvpkvvviCAwcO0KRJE6KiogBYvXo1Y8aM4aabbgIgNTWVI0eOFLvtyMhIPvvsM86fP4+HhwcA69evz3fO6tWr6dKlCw888EDesYMHD+Y7x9XVlezsoie/REZGsnDhwnwhZ926dfj4+BAWFlbsmsuDbktVsP4tQ/Fxcyb29HnWH060dzkiImIHI0aMYMmSJcyePZs777wz73ijRo349ttv2bp1K9u2bWP48OEl6uUYPnw4Tk5O3H333ezatYulS5fy5ptv5junUaNGbN68mZ9//pl9+/bx3HPPsWnTpnzn1K9fn+3bt7N3714SEhK4cOFCgfd64IEHiI2N5eGHH2bPnj18//33/Oc//2HixIl5423sReGmgnm4mhnc1jroTWveiIhUT9dccw01a9Zk7969DB8+PO/4O++8Q40aNejSpQuDBw+mX79+tG/fvtjtent788MPP7Br1y7atWvHpEmTeO211/KdM27cOG6++WaGDRtGp06dSExMzNeLA3DvvffStGnTvHE5a9euLfBeYWFhLF26lI0bN9KmTRvGjRvH3XffzbPPPlvCvw3bMxnFuUHnQJKTk/Hz8yMpKQlfX1+71LA19ixDPlyLm7MTm569Fl93lytfJCIiedLT0zl8+DARERG4u7vbuxyxkaJ+ryX5/lbPjR20qeNHkxBvMrIs/KDNNEVERGxK4cYOrJtphgMwf5M20xQREbElhRs7GdIuDGcnE9uOJbHnZLK9yxEREXEYCjd2EujtxrXNtZmmiIiIrSnc2NHQjhc308zMKt8FjUREHFE1mxPj8Gz1+7R7uJk2bVreqOioqChWr15d6LljxozJ26H00keLFi0qsGLb6dE4iGAfN06nZbJ8jzbTFBEpLrPZDFDslXulasj9feb+fkvLrisUz5s3j/HjxzNt2jS6du3KRx99RP/+/dm1axd169YtcP67777Lf//737yfs7KyaNOmDbfddltFlm0zzmYnbomqw/QVB5m/+RjXtwy1d0kiIlWCs7Mznp6enDp1ChcXF7svGidlZ7FYOHXqFJ6enjg7ly2e2HWdm06dOtG+fXumT5+ed6x58+YMGTKEKVOmXPH6RYsWcfPNN3P48GHq1atXrPesDOvcXOrQqVSueWslTiZY91QfavlpvQYRkeLIzMzk8OHD5b5PkVQc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5zzxxBO8+eabbNq0ieDgYG644QYuXLgAWEPJ0KFDuf3229mxYwcvvPACzz33HHPnzs27ftSoUXz99de899577N69mxkzZuDt7Z2vjkmTJvHWW2+xefNmnJ2dtTOzSBWljTNFxK7S0tIIDAxk+fLldO7cOe/4Pffcw7lz57jvvvvo3bs3X3/9NcOGDQPg9OnT1KlTh7lz5zJ06FBGjBjBqVOn+OWXX/Kuf/LJJ1myZAk7d+5k3759NG3alGXLlnHttdcWqGHFihX07t2bX3/9lT59+gCwdOlSBg4cyPnz53F3dy/nvwURsSX13IiIXe3atYv09HSuu+46vL298x6ffvopBw8ezDvv0uBTs2ZNmjZtyu7duwHYvXs3Xbt2zddu165d2b9/P9nZ2WzduhWz2UzPnj2LrKV169Z5z0NDQwGIj48v82cUkYrlbO8CRKR6s1gsACxZsoSwsLB8r7m5ueULOP9kMpkA65id3Oe5Lu2U9vDwKFYtLi4uBdrOrU9Eqg713IiIXUVGRuLm5kZMTAyNGjXK9wgPD887b/369XnPz5w5w759+2jWrFleG2vWrMnX7rp162jSpAlms5lWrVphsVjyjeEREcelnhsRsSsfHx8ef/xxJkyYgMVioVu3biQnJ7Nu3Tq8vb2pV68eAJMnTyYgIICQkBAmTZpEYGAgQ4YMAeCxxx6jY8eOvPTSSwwbNow//viDDz74gGnTpgFQv359Ro8ezdixY3nvvfdo06YNR48eJT4+nqFDh9rro4tIOVG4ERG7e+mllwgODmbKlCkcOnQIf39/2rdvzzPPPJN3W+i///0vjz76KPv376dNmzYsXrwYV1dXANq3b8/8+fN5/vnneemllwgNDWXy5MmMGTMm7z2mT5/OM888wwMPPEBiYiJ169blmWeescfHFZFyptlSIlKp5c5kOnPmDP7+/vYuR0SqAI25EREREYeicCMiIiIORbelRERExKGo50ZEREQcisKNiIiIOBSFGxEREXEoCjciIiLiUBRuRERExKEo3IiIiIhDUbgRERERh6JwIyIiIg5F4UZEREQcyv8DUdEueh1psJcAAAAASUVORK5CYII=\n", 1680 | "text/plain": [ 1681 | "
" 1682 | ] 1683 | }, 1684 | "metadata": {}, 1685 | "output_type": "display_data" 1686 | } 1687 | ], 1688 | "source": [ 1689 | "# visualize train validation loss\n", 1690 | "\n", 1691 | "plt.plot(history.history[\"loss\"])\n", 1692 | "plt.plot(history.history[\"val_loss\"])\n", 1693 | "\n", 1694 | "plt.title(\"Model Accuracy\")\n", 1695 | "plt.ylabel(\"loss\")\n", 1696 | "plt.xlabel(\"epoch\")\n", 1697 | "\n", 1698 | "plt.legend([\"training\", \"validation\"], loc = \"upper right\")" 1699 | ] 1700 | }, 1701 | { 1702 | "cell_type": "markdown", 1703 | "id": "a3da5f45", 1704 | "metadata": {}, 1705 | "source": [ 1706 | "### Accuracy on test data" 1707 | ] 1708 | }, 1709 | { 1710 | "cell_type": "code", 1711 | "execution_count": 36, 1712 | "id": "718e3596", 1713 | "metadata": {}, 1714 | "outputs": [ 1715 | { 1716 | "name": "stdout", 1717 | "output_type": "stream", 1718 | "text": [ 1719 | "4/4 [==============================] - 0s 1ms/step - loss: 0.1402 - accuracy: 0.9649\n" 1720 | ] 1721 | } 1722 | ], 1723 | "source": [ 1724 | "loss, accuracy = model.evaluate(X_test, Y_test)" 1725 | ] 1726 | }, 1727 | { 1728 | "cell_type": "code", 1729 | "execution_count": 37, 1730 | "id": "7d48070a", 1731 | "metadata": {}, 1732 | "outputs": [ 1733 | { 1734 | "name": "stdout", 1735 | "output_type": "stream", 1736 | "text": [ 1737 | "0.9649122953414917\n" 1738 | ] 1739 | } 1740 | ], 1741 | "source": [ 1742 | "print(accuracy)" 1743 | ] 1744 | }, 1745 | { 1746 | "cell_type": "code", 1747 | "execution_count": 38, 1748 | "id": "446d9e4b", 1749 | "metadata": {}, 1750 | "outputs": [ 1751 | { 1752 | "name": "stdout", 1753 | "output_type": "stream", 1754 | "text": [ 1755 | "(114, 30)\n" 1756 | ] 1757 | } 1758 | ], 1759 | "source": [ 1760 | "print(X_test.shape)" 1761 | ] 1762 | }, 1763 | { 1764 | "cell_type": "code", 1765 | "execution_count": 39, 1766 | "id": "3d6f5662", 1767 | "metadata": {}, 1768 | "outputs": [ 1769 | { 1770 | "name": "stdout", 1771 | "output_type": "stream", 1772 | "text": [ 1773 | "[-0.05319351 -1.42408329 -0.06833592 -0.17260604 2.02392516 -0.1286992\n", 1774 | " 0.15317924 0.44445235 0.60014708 0.25125475 0.50863855 2.57300558\n", 1775 | " 0.60638318 0.09687179 0.99971423 0.3907719 0.52176832 2.71439431\n", 1776 | " -0.41073446 0.65554594 -0.3415184 -1.67683887 -0.3795077 -0.3995439\n", 1777 | " 0.30822795 -0.74978636 -0.55789673 -0.19956318 -1.19838023 -0.63261684]\n" 1778 | ] 1779 | } 1780 | ], 1781 | "source": [ 1782 | "print(X_test[0])" 1783 | ] 1784 | }, 1785 | { 1786 | "cell_type": "code", 1787 | "execution_count": 40, 1788 | "id": "6516d2d1", 1789 | "metadata": {}, 1790 | "outputs": [ 1791 | { 1792 | "name": "stdout", 1793 | "output_type": "stream", 1794 | "text": [ 1795 | "4/4 [==============================] - 0s 1ms/step\n" 1796 | ] 1797 | } 1798 | ], 1799 | "source": [ 1800 | "Y_pred = model.predict(X_test)" 1801 | ] 1802 | }, 1803 | { 1804 | "cell_type": "code", 1805 | "execution_count": 41, 1806 | "id": "6608d010", 1807 | "metadata": {}, 1808 | "outputs": [ 1809 | { 1810 | "name": "stdout", 1811 | "output_type": "stream", 1812 | "text": [ 1813 | "(114, 2)\n" 1814 | ] 1815 | } 1816 | ], 1817 | "source": [ 1818 | "print(Y_pred.shape)" 1819 | ] 1820 | }, 1821 | { 1822 | "cell_type": "code", 1823 | "execution_count": 43, 1824 | "id": "4a8d8292", 1825 | "metadata": { 1826 | "scrolled": false 1827 | }, 1828 | "outputs": [ 1829 | { 1830 | "name": "stdout", 1831 | "output_type": "stream", 1832 | "text": [ 1833 | "[[2.80580282e-01 3.25303674e-01]\n", 1834 | " [4.00586158e-01 5.64572453e-01]\n", 1835 | " [6.19726144e-02 5.79110444e-01]\n", 1836 | " [9.41306710e-01 6.86075306e-04]\n", 1837 | " [1.68490976e-01 4.10280824e-01]\n", 1838 | " [9.01930094e-01 1.44960303e-02]\n", 1839 | " [2.20659822e-01 5.39898217e-01]\n", 1840 | " [1.84332635e-02 7.08341122e-01]\n", 1841 | " [8.40566605e-02 6.30798757e-01]\n", 1842 | " [9.57605615e-02 7.16690063e-01]\n", 1843 | " [4.59069788e-01 5.63535154e-01]\n", 1844 | " [2.30619729e-01 4.18735981e-01]\n", 1845 | " [4.11641061e-01 5.36629915e-01]\n", 1846 | " [3.38374466e-01 6.69319749e-01]\n", 1847 | " [8.86892453e-02 6.04105711e-01]\n", 1848 | " [5.49484789e-01 1.51873782e-01]\n", 1849 | " [1.24987289e-01 6.41290069e-01]\n", 1850 | " [9.08953175e-02 5.09522319e-01]\n", 1851 | " [6.10249490e-02 4.89589632e-01]\n", 1852 | " [8.38953197e-01 8.91702157e-03]\n", 1853 | " [3.35946912e-04 2.48149671e-02]\n", 1854 | " [3.45254317e-02 6.04846776e-01]\n", 1855 | " [1.22320369e-01 6.81798637e-01]\n", 1856 | " [3.36710177e-02 6.93576634e-01]\n", 1857 | " [9.28178653e-02 5.79511881e-01]\n", 1858 | " [7.41548419e-01 5.25906943e-02]\n", 1859 | " [1.13643177e-01 6.32771552e-01]\n", 1860 | " [1.10372379e-01 5.29826641e-01]\n", 1861 | " [5.56508362e-01 1.85755029e-01]\n", 1862 | " [7.58250356e-01 1.14575617e-01]\n", 1863 | " [7.64246807e-02 5.49830735e-01]\n", 1864 | " [1.13285542e-01 6.15059435e-01]\n", 1865 | " [2.27489136e-02 4.76285458e-01]\n", 1866 | " [9.23382461e-01 1.48010645e-02]\n", 1867 | " [7.96139002e-01 4.50374186e-02]\n", 1868 | " [1.60566449e-01 5.30571580e-01]\n", 1869 | " [5.77757470e-02 8.24828923e-01]\n", 1870 | " [1.88226983e-01 7.08311856e-01]\n", 1871 | " [7.21279532e-02 7.24554360e-01]\n", 1872 | " [1.55912802e-01 5.92655540e-01]\n", 1873 | " [9.57738638e-01 1.16276264e-03]\n", 1874 | " [5.54833293e-01 3.50607336e-01]\n", 1875 | " [2.13276252e-01 9.20545995e-01]\n", 1876 | " [3.90536450e-02 4.76125807e-01]\n", 1877 | " [5.19536972e-01 1.52727619e-01]\n", 1878 | " [5.14298901e-02 5.60706258e-01]\n", 1879 | " [9.65917204e-03 4.51839358e-01]\n", 1880 | " [1.76396757e-01 7.21280813e-01]\n", 1881 | " [7.81166434e-01 7.52157271e-02]\n", 1882 | " [7.30869889e-01 9.94213820e-02]\n", 1883 | " [5.55938259e-02 6.73402965e-01]\n", 1884 | " [4.30722773e-01 2.65711039e-01]\n", 1885 | " [3.78956407e-01 6.11069143e-01]\n", 1886 | " [7.18913674e-02 6.62696481e-01]\n", 1887 | " [3.49075720e-02 6.05360210e-01]\n", 1888 | " [2.85496801e-01 2.59709179e-01]\n", 1889 | " [2.35385716e-01 6.94373608e-01]\n", 1890 | " [2.07911190e-02 5.30921221e-01]\n", 1891 | " [9.55710784e-02 1.07712522e-02]\n", 1892 | " [3.61065045e-02 3.88472795e-01]\n", 1893 | " [2.25749448e-01 4.79985386e-01]\n", 1894 | " [5.28910100e-01 3.18630971e-02]\n", 1895 | " [4.80409935e-02 7.21798480e-01]\n", 1896 | " [7.91918635e-01 5.19000180e-02]\n", 1897 | " [4.98691261e-01 2.71469623e-01]\n", 1898 | " [2.80347671e-02 1.45101041e-01]\n", 1899 | " [8.27616811e-01 2.52969917e-02]\n", 1900 | " [6.72371805e-01 1.26031891e-01]\n", 1901 | " [1.92288235e-01 6.54888928e-01]\n", 1902 | " [2.15822905e-01 2.24455699e-01]\n", 1903 | " [5.35945535e-01 1.19255506e-01]\n", 1904 | " [6.75195634e-01 2.52579190e-02]\n", 1905 | " [9.35380384e-02 5.91325700e-01]\n", 1906 | " [6.36132717e-01 1.62417501e-01]\n", 1907 | " [2.02159826e-02 6.71649992e-01]\n", 1908 | " [6.77214265e-01 1.75438479e-01]\n", 1909 | " [1.21988885e-01 7.28516936e-01]\n", 1910 | " [2.45469604e-02 5.26511133e-01]\n", 1911 | " [2.12290779e-01 4.50889975e-01]\n", 1912 | " [5.53406477e-01 2.08686411e-01]\n", 1913 | " [7.70385325e-01 3.61663550e-02]\n", 1914 | " [6.86095595e-01 1.66715428e-01]\n", 1915 | " [8.50891411e-01 2.74228845e-02]\n", 1916 | " [1.58213526e-01 5.27098060e-01]\n", 1917 | " [2.23039418e-01 6.33844852e-01]\n", 1918 | " [3.96386027e-01 5.78070164e-01]\n", 1919 | " [7.69431842e-03 3.95019352e-01]\n", 1920 | " [3.33974175e-02 4.86973792e-01]\n", 1921 | " [6.41181469e-02 2.79889673e-01]\n", 1922 | " [8.26448083e-01 4.15967330e-02]\n", 1923 | " [2.83282716e-02 5.45532167e-01]\n", 1924 | " [1.49629772e-01 7.27436781e-01]\n", 1925 | " [1.01870149e-02 2.52338976e-01]\n", 1926 | " [6.90371513e-01 9.95781571e-02]\n", 1927 | " [6.29738212e-01 2.17616633e-01]\n", 1928 | " [3.75147648e-02 5.43697119e-01]\n", 1929 | " [7.79797971e-01 2.86676846e-02]\n", 1930 | " [7.10010529e-01 4.98198941e-02]\n", 1931 | " [2.43353173e-01 7.77844369e-01]\n", 1932 | " [2.85720751e-02 6.62522793e-01]\n", 1933 | " [1.57105438e-02 6.36715531e-01]\n", 1934 | " [4.78853673e-01 2.22064272e-01]\n", 1935 | " [8.50502133e-01 1.56207411e-02]\n", 1936 | " [9.01700020e-01 4.88460856e-03]\n", 1937 | " [1.34612456e-01 6.90749466e-01]\n", 1938 | " [3.48112062e-02 5.00106275e-01]\n", 1939 | " [1.70416590e-02 3.76978278e-01]\n", 1940 | " [2.30908077e-02 5.70067883e-01]\n", 1941 | " [3.25023048e-02 7.93150604e-01]\n", 1942 | " [3.74827772e-01 7.78844476e-01]\n", 1943 | " [7.72616923e-01 4.94829752e-02]\n", 1944 | " [8.58565569e-01 2.32815985e-02]\n", 1945 | " [3.91242266e-01 5.54798543e-01]\n", 1946 | " [7.11177230e-01 6.61827102e-02]]\n" 1947 | ] 1948 | } 1949 | ], 1950 | "source": [ 1951 | "print(Y_pred)" 1952 | ] 1953 | }, 1954 | { 1955 | "cell_type": "code", 1956 | "execution_count": 45, 1957 | "id": "38e856d1", 1958 | "metadata": {}, 1959 | "outputs": [ 1960 | { 1961 | "name": "stdout", 1962 | "output_type": "stream", 1963 | "text": [ 1964 | "[1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0]\n" 1965 | ] 1966 | } 1967 | ], 1968 | "source": [ 1969 | "# converting the prediction probability to class labels\n", 1970 | "Y_pred_labels = [np.argmax(i) for i in Y_pred]\n", 1971 | "print(Y_pred_labels)" 1972 | ] 1973 | }, 1974 | { 1975 | "cell_type": "markdown", 1976 | "id": "85ac4191", 1977 | "metadata": {}, 1978 | "source": [ 1979 | "### Predictive System" 1980 | ] 1981 | }, 1982 | { 1983 | "cell_type": "markdown", 1984 | "id": "273cd4ea", 1985 | "metadata": {}, 1986 | "source": [ 1987 | "#### taking data directly from dataset so we need to do some preprocessing" 1988 | ] 1989 | }, 1990 | { 1991 | "cell_type": "code", 1992 | "execution_count": 93, 1993 | "id": "a9bfcd06", 1994 | "metadata": {}, 1995 | "outputs": [], 1996 | "source": [ 1997 | "sample = data_frame.drop(\"label\", axis = 1).iloc[0].values" 1998 | ] 1999 | }, 2000 | { 2001 | "cell_type": "code", 2002 | "execution_count": 96, 2003 | "id": "6bcbab6b", 2004 | "metadata": {}, 2005 | "outputs": [ 2006 | { 2007 | "name": "stdout", 2008 | "output_type": "stream", 2009 | "text": [ 2010 | "[1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01\n", 2011 | " 1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02\n", 2012 | " 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01\n", 2013 | " 1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01\n", 2014 | " 4.601e-01 1.189e-01]\n", 2015 | "[[ 1.09706398 -2.07333501 1.26993369 0.9843749 1.56846633 3.28351467\n", 2016 | " 2.65287398 2.53247522 2.21751501 2.25574689 2.48973393 -0.56526506\n", 2017 | " 2.83303087 2.48757756 -0.21400165 1.31686157 0.72402616 0.66081994\n", 2018 | " 1.14875667 0.90708308 1.88668963 -1.35929347 2.30360062 2.00123749\n", 2019 | " 1.30768627 2.61666502 2.10952635 2.29607613 2.75062224 1.93701461]]\n", 2020 | "1/1 [==============================] - 0s 12ms/step\n", 2021 | "[[0.7400751 0.00730012]]\n" 2022 | ] 2023 | }, 2024 | { 2025 | "name": "stderr", 2026 | "output_type": "stream", 2027 | "text": [ 2028 | "C:\\Users\\TanveerKader\\anaconda3\\lib\\site-packages\\sklearn\\base.py:450: UserWarning: X does not have valid feature names, but StandardScaler was fitted with feature names\n", 2029 | " warnings.warn(\n" 2030 | ] 2031 | } 2032 | ], 2033 | "source": [ 2034 | "input_data = (sample)\n", 2035 | "print(input_data)\n", 2036 | "\n", 2037 | "# reshape the array as we are predicting for one instance\n", 2038 | "input_data_reshaped = input_data.reshape(1, -1)\n", 2039 | "\n", 2040 | "# standardize the input data as model is trained as such\n", 2041 | "std_data = scaler.transform(input_data_reshaped)\n", 2042 | "print(std_data)\n", 2043 | "\n", 2044 | "prediction = model.predict(std_data)\n", 2045 | "print(prediction)\n" 2046 | ] 2047 | }, 2048 | { 2049 | "cell_type": "code", 2050 | "execution_count": 97, 2051 | "id": "3cf4d2ea", 2052 | "metadata": {}, 2053 | "outputs": [ 2054 | { 2055 | "name": "stdout", 2056 | "output_type": "stream", 2057 | "text": [ 2058 | "[0]\n", 2059 | "The tumor is Malignant.\n" 2060 | ] 2061 | } 2062 | ], 2063 | "source": [ 2064 | "predictin_label = [np.argmax(prediction)]\n", 2065 | "print(predictin_label)\n", 2066 | "\n", 2067 | "if(predictin_label[0] == 0):\n", 2068 | " print(\"The tumor is Malignant.\")\n", 2069 | "else:\n", 2070 | " print(\"The tumor is Benign.\")" 2071 | ] 2072 | }, 2073 | { 2074 | "cell_type": "markdown", 2075 | "id": "ac060dd2", 2076 | "metadata": {}, 2077 | "source": [ 2078 | "##### data was standardised before split so we can use it directly after reshaping" 2079 | ] 2080 | }, 2081 | { 2082 | "cell_type": "code", 2083 | "execution_count": 98, 2084 | "id": "903ca0aa", 2085 | "metadata": {}, 2086 | "outputs": [ 2087 | { 2088 | "name": "stdout", 2089 | "output_type": "stream", 2090 | "text": [ 2091 | "[-0.05319351 -1.42408329 -0.06833592 -0.17260604 2.02392516 -0.1286992\n", 2092 | " 0.15317924 0.44445235 0.60014708 0.25125475 0.50863855 2.57300558\n", 2093 | " 0.60638318 0.09687179 0.99971423 0.3907719 0.52176832 2.71439431\n", 2094 | " -0.41073446 0.65554594 -0.3415184 -1.67683887 -0.3795077 -0.3995439\n", 2095 | " 0.30822795 -0.74978636 -0.55789673 -0.19956318 -1.19838023 -0.63261684]\n", 2096 | "[[-0.05319351 -1.42408329 -0.06833592 -0.17260604 2.02392516 -0.1286992\n", 2097 | " 0.15317924 0.44445235 0.60014708 0.25125475 0.50863855 2.57300558\n", 2098 | " 0.60638318 0.09687179 0.99971423 0.3907719 0.52176832 2.71439431\n", 2099 | " -0.41073446 0.65554594 -0.3415184 -1.67683887 -0.3795077 -0.3995439\n", 2100 | " 0.30822795 -0.74978636 -0.55789673 -0.19956318 -1.19838023 -0.63261684]]\n", 2101 | "1/1 [==============================] - 0s 12ms/step\n", 2102 | "[[0.28058025 0.3253037 ]]\n" 2103 | ] 2104 | } 2105 | ], 2106 | "source": [ 2107 | "input_data = X_test[0]\n", 2108 | "print(input_data)\n", 2109 | "\n", 2110 | "# reshape the array as we are predicting for one instance\n", 2111 | "input_data_reshaped = input_data.reshape(1, -1)\n", 2112 | "\n", 2113 | "print(input_data_reshaped)\n", 2114 | "\n", 2115 | "prediction = model.predict(input_data_reshaped)\n", 2116 | "print(prediction)" 2117 | ] 2118 | }, 2119 | { 2120 | "cell_type": "code", 2121 | "execution_count": 99, 2122 | "id": "02232014", 2123 | "metadata": {}, 2124 | "outputs": [ 2125 | { 2126 | "name": "stdout", 2127 | "output_type": "stream", 2128 | "text": [ 2129 | "[1]\n", 2130 | "The tumor is Benign.\n" 2131 | ] 2132 | } 2133 | ], 2134 | "source": [ 2135 | "predictin_label = [np.argmax(prediction)]\n", 2136 | "print(predictin_label)\n", 2137 | "\n", 2138 | "if(predictin_label[0] == 0):\n", 2139 | " print(\"The tumor is Malignant.\")\n", 2140 | "else:\n", 2141 | " print(\"The tumor is Benign.\")" 2142 | ] 2143 | }, 2144 | { 2145 | "cell_type": "code", 2146 | "execution_count": null, 2147 | "id": "965857ca", 2148 | "metadata": {}, 2149 | "outputs": [], 2150 | "source": [] 2151 | } 2152 | ], 2153 | "metadata": { 2154 | "kernelspec": { 2155 | "display_name": "Python 3 (ipykernel)", 2156 | "language": "python", 2157 | "name": "python3" 2158 | }, 2159 | "language_info": { 2160 | "codemirror_mode": { 2161 | "name": "ipython", 2162 | "version": 3 2163 | }, 2164 | "file_extension": ".py", 2165 | "mimetype": "text/x-python", 2166 | "name": "python", 2167 | "nbconvert_exporter": "python", 2168 | "pygments_lexer": "ipython3", 2169 | "version": "3.9.13" 2170 | } 2171 | }, 2172 | "nbformat": 4, 2173 | "nbformat_minor": 5 2174 | } 2175 | --------------------------------------------------------------------------------