├── 100ML_Day1.ipynb ├── 100ML_Day3_MultiRegression.ipynb ├── 100ML_Day4(2)- LogisticRegression.ipynb ├── 100ML_Day4_Outlier_Detection.ipynb ├── 100ML_Day5_KNN.ipynb ├── Amafeule_HFU.ipynb ├── Brent Price Forecast.ipynb ├── Data Driven Forecasting-HospitalityEmployees.ipynb ├── EDA on Titanic.ipynb ├── Feature Selection with BorutaPy.ipynb ├── Fourier_Transforms_Ch1.ipynb ├── GradientDescent.ipynb ├── GridSearchCV-Best_Model_Seection_For_MNIST_.ipynb ├── Hypothesis_Testing1_(t_Tests).ipynb ├── IMAGE RECOGNITION with PCA and Naive Bayes.ipynb ├── Kansas Well Log.ipynb ├── LSTM Implementation on Airlines CSV.ipynb ├── LSTM_GoogleStocks.ipynb ├── Linear Regression from Scratch.ipynb ├── LinearRegression_DiabetetesDataset.ipynb ├── LogReg_ANG.ipynb ├── Logistic Regression From Scratch.ipynb ├── ML With Dash.ipynb ├── ML_Practices.ipynb ├── MNIST_ANN.ipynb ├── Machine Learning for ALS.ipynb ├── Machine_Learning_UIs_with_Gradio.ipynb ├── ModelValidation_&_CrossValidation.ipynb ├── Model_Selection_&_HyperParameter_Tuning.ipynb ├── MultiClass_IRIS.ipynb ├── MultiVariate_TimeSeries_AppliancesDataset.ipynb ├── Multi_Linear_Regression.ipynb ├── OOP_for_ML.ipynb ├── Oil Production Forecasting using Supervised Regression.ipynb ├── PhiK.csv ├── Plotly_Express_Excercise.ipynb ├── Production Decline Curve Analysis_CH1+2+3.ipynb ├── REML.ipynb ├── Regression GUI.ipynb ├── Seaborn_Course.ipynb ├── Selecting_the_Best_Model_(ML_Practices).ipynb ├── Statistics - Central Limit Theorem.ipynb ├── TempEstimator_VolveProject.ipynb ├── Understanding_Regression.ipynb ├── Uni Bi Multi Variate Analysis-IRIS.ipynb ├── Volve P-12_DatesCorrected.csv ├── Volve_P11.csv ├── Volve_PF14.csv └── phiKTransform_Machine_Learning.ipynb /100ML_Day1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "100ML_Day1.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyPLTiPqo3dUYMEsOxHrA/bL" 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "id": "H82Z29m6Rmak" 20 | }, 21 | "source": [ 22 | "#Day 1 of ML CODE - Data PreProcessing. \r\n", 23 | "\r\n", 24 | "> Feature Encoding. \r\n", 25 | "\r\n", 26 | "> Missing Data Handling" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "metadata": { 32 | "id": "yambPC4jOOoF" 33 | }, 34 | "source": [ 35 | "import numpy as np\r\n", 36 | "import pandas as pd\r\n", 37 | "import seaborn as sns\r\n", 38 | "import matplotlib.pyplot as plt" 39 | ], 40 | "execution_count": 2, 41 | "outputs": [] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "metadata": { 46 | "id": "msxFy1HUOxZi" 47 | }, 48 | "source": [ 49 | "df = pd.read_csv('https://raw.githubusercontent.com/Avik-Jain/100-Days-Of-ML-Code/master/datasets/Data.csv')" 50 | ], 51 | "execution_count": null, 52 | "outputs": [] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "metadata": { 57 | "colab": { 58 | "base_uri": "https://localhost:8080/", 59 | "height": 195 60 | }, 61 | "id": "6gXIcfJMO10g", 62 | "outputId": "e4671027-d1c3-483c-92ed-e15818ea2f95" 63 | }, 64 | "source": [ 65 | "df.head()" 66 | ], 67 | "execution_count": null, 68 | "outputs": [ 69 | { 70 | "output_type": "execute_result", 71 | "data": { 72 | "text/html": [ 73 | "
\n", 74 | "\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 | "
CountryAgeSalaryPurchased
0France44.072000.0No
1Spain27.048000.0Yes
2Germany30.054000.0No
3Spain38.061000.0No
4Germany40.0NaNYes
\n", 135 | "
" 136 | ], 137 | "text/plain": [ 138 | " Country Age Salary Purchased\n", 139 | "0 France 44.0 72000.0 No\n", 140 | "1 Spain 27.0 48000.0 Yes\n", 141 | "2 Germany 30.0 54000.0 No\n", 142 | "3 Spain 38.0 61000.0 No\n", 143 | "4 Germany 40.0 NaN Yes" 144 | ] 145 | }, 146 | "metadata": { 147 | "tags": [] 148 | }, 149 | "execution_count": 3 150 | } 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "metadata": { 156 | "id": "9MIkpfzhO3AA" 157 | }, 158 | "source": [ 159 | "X = df.iloc[:,:-1]\r\n", 160 | "y = df.iloc[:,-1]" 161 | ], 162 | "execution_count": null, 163 | "outputs": [] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "metadata": { 168 | "id": "0-wkGqNsPz1V" 169 | }, 170 | "source": [ 171 | "from sklearn.impute import SimpleImputer" 172 | ], 173 | "execution_count": null, 174 | "outputs": [] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "metadata": { 179 | "id": "-ERO7MkPPVRp" 180 | }, 181 | "source": [ 182 | "imputer = SimpleImputer(missing_values=np.nan, strategy='mean')" 183 | ], 184 | "execution_count": null, 185 | "outputs": [] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "metadata": { 190 | "id": "vGQJvTB0PWL3" 191 | }, 192 | "source": [ 193 | "imputer = imputer.fit(X.iloc[:,1:])\r\n", 194 | "\r\n", 195 | "imputed_data = imputer.transform(X.iloc[:,1:])" 196 | ], 197 | "execution_count": null, 198 | "outputs": [] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "metadata": { 203 | "id": "l9nXjHt4RZ3_" 204 | }, 205 | "source": [ 206 | "X.iloc[:,1:] = imputed_data" 207 | ], 208 | "execution_count": null, 209 | "outputs": [] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "metadata": { 214 | "colab": { 215 | "base_uri": "https://localhost:8080/", 216 | "height": 343 217 | }, 218 | "id": "so6P1JuoSHMb", 219 | "outputId": "4ef43951-bd05-463c-b3e1-cd23c33f45dd" 220 | }, 221 | "source": [ 222 | "X" 223 | ], 224 | "execution_count": null, 225 | "outputs": [ 226 | { 227 | "output_type": "execute_result", 228 | "data": { 229 | "text/html": [ 230 | "
\n", 231 | "\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 | "
CountryAgeSalary
0France44.00000072000.000000
1Spain27.00000048000.000000
2Germany30.00000054000.000000
3Spain38.00000061000.000000
4Germany40.00000063777.777778
5France35.00000058000.000000
6Spain38.77777852000.000000
7France48.00000079000.000000
8Germany50.00000083000.000000
9France37.00000067000.000000
\n", 316 | "
" 317 | ], 318 | "text/plain": [ 319 | " Country Age Salary\n", 320 | "0 France 44.000000 72000.000000\n", 321 | "1 Spain 27.000000 48000.000000\n", 322 | "2 Germany 30.000000 54000.000000\n", 323 | "3 Spain 38.000000 61000.000000\n", 324 | "4 Germany 40.000000 63777.777778\n", 325 | "5 France 35.000000 58000.000000\n", 326 | "6 Spain 38.777778 52000.000000\n", 327 | "7 France 48.000000 79000.000000\n", 328 | "8 Germany 50.000000 83000.000000\n", 329 | "9 France 37.000000 67000.000000" 330 | ] 331 | }, 332 | "metadata": { 333 | "tags": [] 334 | }, 335 | "execution_count": 21 336 | } 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "metadata": { 342 | "id": "5arKNj7sSOU4" 343 | }, 344 | "source": [ 345 | "#Encoding Categorical Data" 346 | ], 347 | "execution_count": null, 348 | "outputs": [] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "metadata": { 353 | "id": "0CAd3bs9STVj" 354 | }, 355 | "source": [ 356 | "from sklearn.preprocessing import LabelEncoder, OneHotEncoder" 357 | ], 358 | "execution_count": null, 359 | "outputs": [] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "metadata": { 364 | "id": "sKtzn6y4VJbt" 365 | }, 366 | "source": [ 367 | "labeler = LabelEncoder()\r\n", 368 | "\r\n", 369 | "labelled_X = labeler.fit_transform(X.iloc[:,0]) " 370 | ], 371 | "execution_count": null, 372 | "outputs": [] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "metadata": { 377 | "colab": { 378 | "base_uri": "https://localhost:8080/" 379 | }, 380 | "id": "_PH7HFasVsbA", 381 | "outputId": "9f7de1bb-a999-4861-b2c5-5ef30ca11f0c" 382 | }, 383 | "source": [ 384 | "labelled_X" 385 | ], 386 | "execution_count": null, 387 | "outputs": [ 388 | { 389 | "output_type": "execute_result", 390 | "data": { 391 | "text/plain": [ 392 | "array([0, 2, 1, 2, 1, 0, 2, 0, 1, 0])" 393 | ] 394 | }, 395 | "metadata": { 396 | "tags": [] 397 | }, 398 | "execution_count": 26 399 | } 400 | ] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "metadata": { 405 | "colab": { 406 | "base_uri": "https://localhost:8080/" 407 | }, 408 | "id": "OpZdiLVEWAuB", 409 | "outputId": "ed79ddf1-16a4-4f6a-d964-f5dc31c1ef59" 410 | }, 411 | "source": [ 412 | "labeler.inverse_transform(labelled_X)" 413 | ], 414 | "execution_count": null, 415 | "outputs": [ 416 | { 417 | "output_type": "execute_result", 418 | "data": { 419 | "text/plain": [ 420 | "array(['France', 'Spain', 'Germany', 'Spain', 'Germany', 'France',\n", 421 | " 'Spain', 'France', 'Germany', 'France'], dtype=object)" 422 | ] 423 | }, 424 | "metadata": { 425 | "tags": [] 426 | }, 427 | "execution_count": 27 428 | } 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "metadata": { 434 | "id": "2YBzQPPDWjnM" 435 | }, 436 | "source": [ 437 | "# ohe = OneHotEncoder()\r\n", 438 | "\r\n", 439 | "# ohe_labelled = ohe.fit_transform(X[['Country']].values)" 440 | ], 441 | "execution_count": null, 442 | "outputs": [] 443 | }, 444 | { 445 | "cell_type": "code", 446 | "metadata": { 447 | "id": "RyPsS_AsXHEP" 448 | }, 449 | "source": [ 450 | "#" 451 | ], 452 | "execution_count": null, 453 | "outputs": [] 454 | }, 455 | { 456 | "cell_type": "code", 457 | "metadata": { 458 | "id": "ABlJBvNoXQ2W" 459 | }, 460 | "source": [ 461 | "# onehotencoder = OneHotEncoder(categorical_features = [0])\r\n", 462 | "# # X = onehotencoder.fit_transform(X).toarray()\r\n", 463 | "# # labelencoder_Y = LabelEncoder()\r\n", 464 | "# # Y = labelencoder_Y.fit_transform(Y)" 465 | ], 466 | "execution_count": null, 467 | "outputs": [] 468 | }, 469 | { 470 | "cell_type": "code", 471 | "metadata": { 472 | "colab": { 473 | "base_uri": "https://localhost:8080/" 474 | }, 475 | "id": "aK5KqWImZaMe", 476 | "outputId": "889b28ec-1b00-45fe-c78a-5776b8762c0d" 477 | }, 478 | "source": [ 479 | "drop_enc = OneHotEncoder(drop='first').fit(X.iloc[:,[0]])\r\n", 480 | "drop_enc.categories_" 481 | ], 482 | "execution_count": null, 483 | "outputs": [ 484 | { 485 | "output_type": "execute_result", 486 | "data": { 487 | "text/plain": [ 488 | "[array(['France', 'Germany', 'Spain'], dtype=object)]" 489 | ] 490 | }, 491 | "metadata": { 492 | "tags": [] 493 | }, 494 | "execution_count": 46 495 | } 496 | ] 497 | }, 498 | { 499 | "cell_type": "code", 500 | "metadata": { 501 | "id": "rnuSk7Kghywg" 502 | }, 503 | "source": [ 504 | "ohe_labelled = drop_enc.transform(X.iloc[:,[0]]).toarray()" 505 | ], 506 | "execution_count": null, 507 | "outputs": [] 508 | }, 509 | { 510 | "cell_type": "code", 511 | "metadata": { 512 | "colab": { 513 | "base_uri": "https://localhost:8080/" 514 | }, 515 | "id": "b7YU4pWhieFk", 516 | "outputId": "76015b57-cc2b-4e54-f4a8-a0027fe8d4b6" 517 | }, 518 | "source": [ 519 | "ohe_labelled" 520 | ], 521 | "execution_count": null, 522 | "outputs": [ 523 | { 524 | "output_type": "execute_result", 525 | "data": { 526 | "text/plain": [ 527 | "array([[0., 0.],\n", 528 | " [0., 1.],\n", 529 | " [1., 0.],\n", 530 | " [0., 1.],\n", 531 | " [1., 0.],\n", 532 | " [0., 0.],\n", 533 | " [0., 1.],\n", 534 | " [0., 0.],\n", 535 | " [1., 0.],\n", 536 | " [0., 0.]])" 537 | ] 538 | }, 539 | "metadata": { 540 | "tags": [] 541 | }, 542 | "execution_count": 53 543 | } 544 | ] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "metadata": { 549 | "id": "1FQD83DlifoB" 550 | }, 551 | "source": [ 552 | "# c = ['a','b','a','c','a','b']" 553 | ], 554 | "execution_count": null, 555 | "outputs": [] 556 | }, 557 | { 558 | "cell_type": "code", 559 | "metadata": { 560 | "id": "gf_ZkctJkpzi" 561 | }, 562 | "source": [ 563 | "# ohe = OneHotEncoder()" 564 | ], 565 | "execution_count": null, 566 | "outputs": [] 567 | }, 568 | { 569 | "cell_type": "code", 570 | "metadata": { 571 | "id": "YGXkueWxks3c" 572 | }, 573 | "source": [ 574 | "# ohe_fit = ohe.fit([c])" 575 | ], 576 | "execution_count": null, 577 | "outputs": [] 578 | }, 579 | { 580 | "cell_type": "markdown", 581 | "metadata": { 582 | "id": "mGwvwh_WmFNE" 583 | }, 584 | "source": [ 585 | "" 586 | ] 587 | }, 588 | { 589 | "cell_type": "code", 590 | "metadata": { 591 | "id": "WRKdp08ckvxa" 592 | }, 593 | "source": [ 594 | "# ohe_transformed = ohe.transform([c]).toarray()" 595 | ], 596 | "execution_count": null, 597 | "outputs": [] 598 | }, 599 | { 600 | "cell_type": "code", 601 | "metadata": { 602 | "id": "go6UW4PflIWU" 603 | }, 604 | "source": [ 605 | "# ohe_transformed" 606 | ], 607 | "execution_count": null, 608 | "outputs": [] 609 | }, 610 | { 611 | "cell_type": "markdown", 612 | "metadata": { 613 | "id": "7sFgB0PPOw0X" 614 | }, 615 | "source": [ 616 | "# Complete Encoding Example" 617 | ] 618 | }, 619 | { 620 | "cell_type": "code", 621 | "metadata": { 622 | "id": "q17W5YU8lKKv" 623 | }, 624 | "source": [ 625 | "df = pd.DataFrame({'Fruits':['Apple','Banana','Orange','Apple','Banana','Banana','Orange']})" 626 | ], 627 | "execution_count": 12, 628 | "outputs": [] 629 | }, 630 | { 631 | "cell_type": "code", 632 | "metadata": { 633 | "colab": { 634 | "base_uri": "https://localhost:8080/", 635 | "height": 254 636 | }, 637 | "id": "CUds0ndrPBMg", 638 | "outputId": "375889d3-c51b-49f2-9776-1e3c61d801cf" 639 | }, 640 | "source": [ 641 | "df" 642 | ], 643 | "execution_count": 13, 644 | "outputs": [ 645 | { 646 | "output_type": "execute_result", 647 | "data": { 648 | "text/html": [ 649 | "
\n", 650 | "\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 | "
Fruits
0Apple
1Banana
2Orange
3Apple
4Banana
5Banana
6Orange
\n", 701 | "
" 702 | ], 703 | "text/plain": [ 704 | " Fruits\n", 705 | "0 Apple\n", 706 | "1 Banana\n", 707 | "2 Orange\n", 708 | "3 Apple\n", 709 | "4 Banana\n", 710 | "5 Banana\n", 711 | "6 Orange" 712 | ] 713 | }, 714 | "metadata": { 715 | "tags": [] 716 | }, 717 | "execution_count": 13 718 | } 719 | ] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "metadata": { 724 | "id": "Shg4_OK6Paxy" 725 | }, 726 | "source": [ 727 | "#First Label Encoding. \r\n", 728 | "from sklearn.preprocessing import LabelEncoder" 729 | ], 730 | "execution_count": 14, 731 | "outputs": [] 732 | }, 733 | { 734 | "cell_type": "code", 735 | "metadata": { 736 | "id": "mdIIh8tUPhDf" 737 | }, 738 | "source": [ 739 | "le = LabelEncoder()" 740 | ], 741 | "execution_count": 15, 742 | "outputs": [] 743 | }, 744 | { 745 | "cell_type": "code", 746 | "metadata": { 747 | "id": "n0Rdhb_HPjEq" 748 | }, 749 | "source": [ 750 | "labelencoded = le.fit_transform(df.iloc[:,0])" 751 | ], 752 | "execution_count": 16, 753 | "outputs": [] 754 | }, 755 | { 756 | "cell_type": "code", 757 | "metadata": { 758 | "colab": { 759 | "base_uri": "https://localhost:8080/" 760 | }, 761 | "id": "wEaYlNzNPnf6", 762 | "outputId": "90caf6cc-75ec-46d2-89a6-ea4bdae4cf25" 763 | }, 764 | "source": [ 765 | "labelencoded" 766 | ], 767 | "execution_count": 17, 768 | "outputs": [ 769 | { 770 | "output_type": "execute_result", 771 | "data": { 772 | "text/plain": [ 773 | "array([0, 1, 2, 0, 1, 1, 2])" 774 | ] 775 | }, 776 | "metadata": { 777 | "tags": [] 778 | }, 779 | "execution_count": 17 780 | } 781 | ] 782 | }, 783 | { 784 | "cell_type": "code", 785 | "metadata": { 786 | "id": "qisHAsQDP1IX" 787 | }, 788 | "source": [ 789 | "df['Fruits'] = labelencoded" 790 | ], 791 | "execution_count": 18, 792 | "outputs": [] 793 | }, 794 | { 795 | "cell_type": "code", 796 | "metadata": { 797 | "colab": { 798 | "base_uri": "https://localhost:8080/", 799 | "height": 254 800 | }, 801 | "id": "IMNgojX9P-D5", 802 | "outputId": "7162ecd4-83e2-405c-8139-f7941874d2ba" 803 | }, 804 | "source": [ 805 | "df" 806 | ], 807 | "execution_count": 19, 808 | "outputs": [ 809 | { 810 | "output_type": "execute_result", 811 | "data": { 812 | "text/html": [ 813 | "
\n", 814 | "\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 | "
Fruits
00
11
22
30
41
51
62
\n", 865 | "
" 866 | ], 867 | "text/plain": [ 868 | " Fruits\n", 869 | "0 0\n", 870 | "1 1\n", 871 | "2 2\n", 872 | "3 0\n", 873 | "4 1\n", 874 | "5 1\n", 875 | "6 2" 876 | ] 877 | }, 878 | "metadata": { 879 | "tags": [] 880 | }, 881 | "execution_count": 19 882 | } 883 | ] 884 | }, 885 | { 886 | "cell_type": "code", 887 | "metadata": { 888 | "id": "_IMMA3yjP-y3" 889 | }, 890 | "source": [ 891 | "#Now onehot encoding. " 892 | ], 893 | "execution_count": 20, 894 | "outputs": [] 895 | }, 896 | { 897 | "cell_type": "code", 898 | "metadata": { 899 | "id": "b8QJ5N7IQEGY" 900 | }, 901 | "source": [ 902 | "from sklearn.preprocessing import OneHotEncoder\r\n", 903 | "from sklearn.compose import ColumnTransformer" 904 | ], 905 | "execution_count": 21, 906 | "outputs": [] 907 | }, 908 | { 909 | "cell_type": "code", 910 | "metadata": { 911 | "id": "VhHQJFvUQNGp" 912 | }, 913 | "source": [ 914 | "ohe = OneHotEncoder()" 915 | ], 916 | "execution_count": 22, 917 | "outputs": [] 918 | }, 919 | { 920 | "cell_type": "code", 921 | "metadata": { 922 | "id": "u1gOPeh5QicH" 923 | }, 924 | "source": [ 925 | "ohe_encoded = ohe.fit_transform(df).toarray()" 926 | ], 927 | "execution_count": 23, 928 | "outputs": [] 929 | }, 930 | { 931 | "cell_type": "code", 932 | "metadata": { 933 | "id": "0upj1QkOQqTl" 934 | }, 935 | "source": [ 936 | "df = pd.concat([df,pd.DataFrame(ohe_encoded)],axis=1)" 937 | ], 938 | "execution_count": 26, 939 | "outputs": [] 940 | }, 941 | { 942 | "cell_type": "code", 943 | "metadata": { 944 | "colab": { 945 | "base_uri": "https://localhost:8080/", 946 | "height": 254 947 | }, 948 | "id": "kEjXXD1ZQrrm", 949 | "outputId": "c8163fbc-cca2-4d43-9463-82a259498fa3" 950 | }, 951 | "source": [ 952 | "df" 953 | ], 954 | "execution_count": 27, 955 | "outputs": [ 956 | { 957 | "output_type": "execute_result", 958 | "data": { 959 | "text/html": [ 960 | "
\n", 961 | "\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 | "
Fruits012
001.00.00.0
110.01.00.0
220.00.01.0
301.00.00.0
410.01.00.0
510.01.00.0
620.00.01.0
\n", 1036 | "
" 1037 | ], 1038 | "text/plain": [ 1039 | " Fruits 0 1 2\n", 1040 | "0 0 1.0 0.0 0.0\n", 1041 | "1 1 0.0 1.0 0.0\n", 1042 | "2 2 0.0 0.0 1.0\n", 1043 | "3 0 1.0 0.0 0.0\n", 1044 | "4 1 0.0 1.0 0.0\n", 1045 | "5 1 0.0 1.0 0.0\n", 1046 | "6 2 0.0 0.0 1.0" 1047 | ] 1048 | }, 1049 | "metadata": { 1050 | "tags": [] 1051 | }, 1052 | "execution_count": 27 1053 | } 1054 | ] 1055 | }, 1056 | { 1057 | "cell_type": "code", 1058 | "metadata": { 1059 | "id": "OESFMv_YQ8d9" 1060 | }, 1061 | "source": [ 1062 | "# ohe_encoded1 = np.array(ColumnTransformer.fit_transform()" 1063 | ], 1064 | "execution_count": 31, 1065 | "outputs": [] 1066 | }, 1067 | { 1068 | "cell_type": "code", 1069 | "metadata": { 1070 | "id": "btyFSsMrRGsB" 1071 | }, 1072 | "source": [ 1073 | "" 1074 | ], 1075 | "execution_count": null, 1076 | "outputs": [] 1077 | }, 1078 | { 1079 | "cell_type": "markdown", 1080 | "metadata": { 1081 | "id": "AGVn7K0JRkk3" 1082 | }, 1083 | "source": [ 1084 | "" 1085 | ] 1086 | } 1087 | ] 1088 | } -------------------------------------------------------------------------------- /GridSearchCV-Best_Model_Seection_For_MNIST_.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Best Model Seection For MNIST .ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyOW/K30xYKuOVb5jBeFne09", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "metadata": { 30 | "id": "vXHgucaZZXzj" 31 | }, 32 | "source": [ 33 | "import numpy as np\r\n", 34 | "import pandas as pd\r\n", 35 | "import seaborn as sns\r\n", 36 | "import matplotlib.pyplot as plt\r\n", 37 | "\r\n", 38 | "import warnings\r\n", 39 | "warnings.filterwarnings('ignore')" 40 | ], 41 | "execution_count": 20, 42 | "outputs": [] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "metadata": { 47 | "id": "ureKQ6UobpmY" 48 | }, 49 | "source": [ 50 | "from sklearn.datasets import load_digits" 51 | ], 52 | "execution_count": 2, 53 | "outputs": [] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "metadata": { 58 | "id": "oHWxyvexb-IH" 59 | }, 60 | "source": [ 61 | "digits = load_digits()" 62 | ], 63 | "execution_count": 3, 64 | "outputs": [] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "metadata": { 69 | "id": "11LOzT_gcLSF" 70 | }, 71 | "source": [ 72 | "X = digits.data\r\n", 73 | "y = digits.target" 74 | ], 75 | "execution_count": 7, 76 | "outputs": [] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "metadata": { 81 | "colab": { 82 | "base_uri": "https://localhost:8080/", 83 | "height": 215 84 | }, 85 | "id": "_1R1L4M1cXuE", 86 | "outputId": "ae7bc8be-d51b-4fd2-858d-bf8aa41020ba" 87 | }, 88 | "source": [ 89 | "df = pd.DataFrame(data=X,columns=np.arange(64))\r\n", 90 | "df['y']= y\r\n", 91 | "df.head()" 92 | ], 93 | "execution_count": 10, 94 | "outputs": [ 95 | { 96 | "output_type": "execute_result", 97 | "data": { 98 | "text/html": [ 99 | "
\n", 100 | "\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 | "
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263y
00.00.05.013.09.01.00.00.00.00.013.015.010.015.05.00.00.03.015.02.00.011.08.00.00.04.012.00.00.08.08.00.00.05.08.00.00.09.08.00.00.04.011.00.01.012.07.00.00.02.014.05.010.012.00.00.00.00.06.013.010.00.00.00.00
10.00.00.012.013.05.00.00.00.00.00.011.016.09.00.00.00.00.03.015.016.06.00.00.00.07.015.016.016.02.00.00.00.00.01.016.016.03.00.00.00.00.01.016.016.06.00.00.00.00.01.016.016.06.00.00.00.00.00.011.016.010.00.00.01
20.00.00.04.015.012.00.00.00.00.03.016.015.014.00.00.00.00.08.013.08.016.00.00.00.00.01.06.015.011.00.00.00.01.08.013.015.01.00.00.00.09.016.016.05.00.00.00.00.03.013.016.016.011.05.00.00.00.00.03.011.016.09.00.02
30.00.07.015.013.01.00.00.00.08.013.06.015.04.00.00.00.02.01.013.013.00.00.00.00.00.02.015.011.01.00.00.00.00.00.01.012.012.01.00.00.00.00.00.01.010.08.00.00.00.08.04.05.014.09.00.00.00.07.013.013.09.00.00.03
40.00.00.01.011.00.00.00.00.00.00.07.08.00.00.00.00.00.01.013.06.02.02.00.00.00.07.015.00.09.08.00.00.05.016.010.00.016.06.00.00.04.015.016.013.016.01.00.00.00.00.03.015.010.00.00.00.00.00.02.016.04.00.00.04
\n", 527 | "
" 528 | ], 529 | "text/plain": [ 530 | " 0 1 2 3 4 5 6 ... 58 59 60 61 62 63 y\n", 531 | "0 0.0 0.0 5.0 13.0 9.0 1.0 0.0 ... 6.0 13.0 10.0 0.0 0.0 0.0 0\n", 532 | "1 0.0 0.0 0.0 12.0 13.0 5.0 0.0 ... 0.0 11.0 16.0 10.0 0.0 0.0 1\n", 533 | "2 0.0 0.0 0.0 4.0 15.0 12.0 0.0 ... 0.0 3.0 11.0 16.0 9.0 0.0 2\n", 534 | "3 0.0 0.0 7.0 15.0 13.0 1.0 0.0 ... 7.0 13.0 13.0 9.0 0.0 0.0 3\n", 535 | "4 0.0 0.0 0.0 1.0 11.0 0.0 0.0 ... 0.0 2.0 16.0 4.0 0.0 0.0 4\n", 536 | "\n", 537 | "[5 rows x 65 columns]" 538 | ] 539 | }, 540 | "metadata": { 541 | "tags": [] 542 | }, 543 | "execution_count": 10 544 | } 545 | ] 546 | }, 547 | { 548 | "cell_type": "code", 549 | "metadata": { 550 | "colab": { 551 | "base_uri": "https://localhost:8080/", 552 | "height": 282 553 | }, 554 | "id": "4Axd9YDUciUS", 555 | "outputId": "10a3885d-43de-43b5-ee9f-41433412dbe8" 556 | }, 557 | "source": [ 558 | "plt.imshow(digits.images[0],cmap='binary')" 559 | ], 560 | "execution_count": 12, 561 | "outputs": [ 562 | { 563 | "output_type": "execute_result", 564 | "data": { 565 | "text/plain": [ 566 | "" 567 | ] 568 | }, 569 | "metadata": { 570 | "tags": [] 571 | }, 572 | "execution_count": 12 573 | }, 574 | { 575 | "output_type": "display_data", 576 | "data": { 577 | "image/png": "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\n", 578 | "text/plain": [ 579 | "
" 580 | ] 581 | }, 582 | "metadata": { 583 | "tags": [], 584 | "needs_background": "light" 585 | } 586 | } 587 | ] 588 | }, 589 | { 590 | "cell_type": "code", 591 | "metadata": { 592 | "id": "RAXQ_llCdT2J" 593 | }, 594 | "source": [ 595 | "from sklearn.svm import SVC\r\n", 596 | "from sklearn.ensemble import RandomForestClassifier\r\n", 597 | "from sklearn.linear_model import LogisticRegression\r\n", 598 | "from sklearn.naive_bayes import GaussianNB\r\n", 599 | "from sklearn.tree import DecisionTreeClassifier" 600 | ], 601 | "execution_count": 13, 602 | "outputs": [] 603 | }, 604 | { 605 | "cell_type": "code", 606 | "metadata": { 607 | "id": "9MlG8j-afzNL" 608 | }, 609 | "source": [ 610 | "model_params = {'SVC':{'model':SVC(gamma='auto'),\r\n", 611 | " 'params':{'C':[1,3,5,10,15,20],\r\n", 612 | " 'kernel':['rbf','linear']}\r\n", 613 | " },\r\n", 614 | "\r\n", 615 | " \r\n", 616 | " 'RandomForest':{'model':RandomForestClassifier(),\r\n", 617 | " 'params':{'n_estimators':[1,2,3,4,5,10,15,20,25,30]}},\r\n", 618 | " \r\n", 619 | " \r\n", 620 | " 'LogReg':{'model':LogisticRegression(),\r\n", 621 | " 'params':{\r\n", 622 | " 'solver':['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],\r\n", 623 | " 'C':[1,5,10]\r\n", 624 | " }},\r\n", 625 | " \r\n", 626 | " 'DTree':{'model':DecisionTreeClassifier(),\r\n", 627 | " 'params':{\r\n", 628 | " 'criterion':['gini','entropy'],\r\n", 629 | " 'max_depth':np.arange(20,dtype=int)\r\n", 630 | " }}}" 631 | ], 632 | "execution_count": 15, 633 | "outputs": [] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "metadata": { 638 | "colab": { 639 | "base_uri": "https://localhost:8080/", 640 | "height": 166 641 | }, 642 | "id": "T2jslINclpCn", 643 | "outputId": "a5cea526-587b-4ca0-867b-ba5b4d4797c6" 644 | }, 645 | "source": [ 646 | "from sklearn.model_selection import GridSearchCV\r\n", 647 | "scores = []\r\n", 648 | "\r\n", 649 | "for model_name, mp in model_params.items():\r\n", 650 | " clf = GridSearchCV(mp['model'], mp['params'], cv=5, return_train_score=False)\r\n", 651 | " clf.fit(X,y)\r\n", 652 | " scores.append({\r\n", 653 | " 'model': model_name,\r\n", 654 | " 'best_score': clf.best_score_,\r\n", 655 | " 'best_params': clf.best_params_\r\n", 656 | " })\r\n", 657 | " \r\n", 658 | "df = pd.DataFrame(scores,columns=['model','best_score','best_params'])\r\n", 659 | "df" 660 | ], 661 | "execution_count": 21, 662 | "outputs": [ 663 | { 664 | "output_type": "execute_result", 665 | "data": { 666 | "text/html": [ 667 | "
\n", 668 | "\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 | "
modelbest_scorebest_params
0SVC0.947697{'C': 1, 'kernel': 'linear'}
1RandomForest0.933251{'n_estimators': 30}
2LogReg0.922114{'C': 1, 'solver': 'liblinear'}
3DTree0.814158{'criterion': 'entropy', 'max_depth': 11}
\n", 717 | "
" 718 | ], 719 | "text/plain": [ 720 | " model best_score best_params\n", 721 | "0 SVC 0.947697 {'C': 1, 'kernel': 'linear'}\n", 722 | "1 RandomForest 0.933251 {'n_estimators': 30}\n", 723 | "2 LogReg 0.922114 {'C': 1, 'solver': 'liblinear'}\n", 724 | "3 DTree 0.814158 {'criterion': 'entropy', 'max_depth': 11}" 725 | ] 726 | }, 727 | "metadata": { 728 | "tags": [] 729 | }, 730 | "execution_count": 21 731 | } 732 | ] 733 | }, 734 | { 735 | "cell_type": "code", 736 | "metadata": { 737 | "id": "sy8KOHZKlvfX" 738 | }, 739 | "source": [ 740 | "" 741 | ], 742 | "execution_count": null, 743 | "outputs": [] 744 | } 745 | ] 746 | } -------------------------------------------------------------------------------- /LinearRegression_DiabetetesDataset.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "LinearRegression_DiabetetesDataset.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyOX2PFl/sSVNnqzLiL0Mm+i" 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "id": "XHPSgOH4ZPyH" 23 | }, 24 | "source": [ 25 | "## Normal Implementation" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "metadata": { 31 | "id": "2vZFjgb7Yrh8" 32 | }, 33 | "source": [ 34 | "# import matplotlib.pyplot as plt\n", 35 | "# import numpy as np\n", 36 | "# from sklearn import datasets, linear_model\n", 37 | "# from sklearn.metrics import mean_squared_error, r2_score\n", 38 | "\n", 39 | "# # Load the diabetes dataset\n", 40 | "# diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)\n", 41 | "\n", 42 | "# # Use only one feature\n", 43 | "# diabetes_X = diabetes_X[:, np.newaxis, 2]\n", 44 | "\n", 45 | "# # Split the data into training/testing sets\n", 46 | "# diabetes_X_train = diabetes_X[:-20]\n", 47 | "# diabetes_X_test = diabetes_X[-20:]\n", 48 | "\n", 49 | "# # Split the targets into training/testing sets\n", 50 | "# diabetes_y_train = diabetes_y[:-20]\n", 51 | "# diabetes_y_test = diabetes_y[-20:]\n", 52 | "\n", 53 | "# # Create linear regression object\n", 54 | "# regr = linear_model.LinearRegression()\n", 55 | "\n", 56 | "# # Train the model using the training sets\n", 57 | "# regr.fit(diabetes_X_train, diabetes_y_train)\n", 58 | "\n", 59 | "# # Make predictions using the testing set\n", 60 | "# diabetes_y_pred = regr.predict(diabetes_X_test)\n", 61 | "\n", 62 | "# # The coefficients\n", 63 | "# print('Coefficients: \\n', regr.coef_)\n", 64 | "# # The mean squared error\n", 65 | "# print('Mean squared error: %.2f'\n", 66 | "# % mean_squared_error(diabetes_y_test, diabetes_y_pred))\n", 67 | "# # The coefficient of determination: 1 is perfect prediction\n", 68 | "# print('Coefficient of determination: %.2f'\n", 69 | "# % r2_score(diabetes_y_test, diabetes_y_pred))\n", 70 | "\n", 71 | "# # Plot outputs\n", 72 | "# plt.scatter(diabetes_X_test, diabetes_y_test, color='black')\n", 73 | "# plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)\n", 74 | "\n", 75 | "# plt.xticks(())\n", 76 | "# plt.yticks(())\n", 77 | "\n", 78 | "# plt.show()" 79 | ], 80 | "execution_count": 22, 81 | "outputs": [] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": { 86 | "id": "ocQxsjmAZTCi" 87 | }, 88 | "source": [ 89 | "## OOP style Implementation" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "metadata": { 95 | "id": "BORTyWuxZF8I" 96 | }, 97 | "source": [ 98 | "import matplotlib.pyplot as plt\n", 99 | "import numpy as np\n", 100 | "from sklearn import datasets, linear_model\n", 101 | "from sklearn.metrics import mean_squared_error, r2_score\n", 102 | "from sklearn.model_selection import train_test_split" 103 | ], 104 | "execution_count": 1, 105 | "outputs": [] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "metadata": { 110 | "id": "t-KgGBALZb68" 111 | }, 112 | "source": [ 113 | "class Model :\n", 114 | "\n", 115 | " def __init__(self, model_name = 'LinReg'):\n", 116 | " self.diabetes_X, self.diabetes_y = datasets.load_diabetes(return_X_y=True)\n", 117 | " self.diabetes_X = self.diabetes_X[:, np.newaxis, 2]\n", 118 | "\n", 119 | " if model_name == 'LinReg':\n", 120 | " self.LR = linear_model.LinearRegression()\n", 121 | "\n", 122 | " def split(self , fraction = 0.2):\n", 123 | " X_train , X_test , y_train , y_test = train_test_split(self.diabetes_X, self.diabetes_y , test_size=fraction)\n", 124 | " return X_train , X_test , y_train , y_test\n", 125 | "\n", 126 | " def fit(self):\n", 127 | " self.LR.fit(X_train ,y_train)\n", 128 | "\n", 129 | " def predict(self):\n", 130 | " yp = self.LR.predict(X_test)\n", 131 | " return yp\n", 132 | "\n", 133 | " def plot(self):\n", 134 | " plt.scatter(X_test , y_test)\n", 135 | " plt.plot(X_test , yp , color='red')\n", 136 | " plt.title('Validation Performance')\n" 137 | ], 138 | "execution_count": 23, 139 | "outputs": [] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "metadata": { 144 | "colab": { 145 | "base_uri": "https://localhost:8080/", 146 | "height": 281 147 | }, 148 | "id": "9jVFLZjRaFcK", 149 | "outputId": "bf106660-9f28-476d-ba60-dce1e5312d49" 150 | }, 151 | "source": [ 152 | "#First Instantiate/Create Instance of the Model class. \n", 153 | "m = Model(model_name='LinReg')\n", 154 | "\n", 155 | "#Second Now call internal-functions/methods one by one.\n", 156 | "#1. \n", 157 | "X_train , X_test , y_train , y_test= m.split()\n", 158 | "\n", 159 | "#2. \n", 160 | "m.fit()\n", 161 | "\n", 162 | "#3. \n", 163 | "yp = m.predict()\n", 164 | "\n", 165 | "#4. \n", 166 | "m.plot()\n", 167 | "\n" 168 | ], 169 | "execution_count": 24, 170 | "outputs": [ 171 | { 172 | "output_type": "display_data", 173 | "data": { 174 | "image/png": "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\n", 175 | "text/plain": [ 176 | "
" 177 | ] 178 | }, 179 | "metadata": { 180 | "tags": [], 181 | "needs_background": "light" 182 | } 183 | } 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "metadata": { 189 | "id": "u46JhVQzaHvy" 190 | }, 191 | "source": [ 192 | "" 193 | ], 194 | "execution_count": 3, 195 | "outputs": [] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "metadata": { 200 | "colab": { 201 | "base_uri": "https://localhost:8080/", 202 | "height": 290 203 | }, 204 | "id": "K-b3m-o4aP6T", 205 | "outputId": "49c488b0-8771-4dcd-8b06-804f2739cebc" 206 | }, 207 | "source": [ 208 | "m.plot()" 209 | ], 210 | "execution_count": 4, 211 | "outputs": [ 212 | { 213 | "output_type": "error", 214 | "ename": "NameError", 215 | "evalue": "ignored", 216 | "traceback": [ 217 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 218 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 219 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 220 | "\u001b[0;32m\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0my_test\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 23\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0myp\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'red'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Validation Performance'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 221 | "\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined" 222 | ] 223 | } 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "metadata": { 229 | "id": "HAhw1xfEaSMl" 230 | }, 231 | "source": [ 232 | "" 233 | ], 234 | "execution_count": 36, 235 | "outputs": [] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "metadata": { 240 | "id": "5-U5j26Jbvjs" 241 | }, 242 | "source": [ 243 | "" 244 | ], 245 | "execution_count": 28, 246 | "outputs": [] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "metadata": { 251 | "id": "tIQeXyuKb0JK" 252 | }, 253 | "source": [ 254 | "" 255 | ], 256 | "execution_count": null, 257 | "outputs": [] 258 | } 259 | ] 260 | } -------------------------------------------------------------------------------- /ML With Dash.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 6, 6 | "id": "53e8cfaf", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import plotly.express as px\n", 11 | "from jupyter_dash import JupyterDash\n", 12 | "import dash_core_components as dcc\n", 13 | "import dash_html_components as html\n", 14 | "from dash.dependencies import Input, Output\n", 15 | "\n", 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "import seaborn as sns\n", 20 | "\n", 21 | "\n", 22 | "from sklearn.datasets import make_regression\n", 23 | "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", 24 | "\n", 25 | "# We add all Plotly and Dash necessary librairies\n", 26 | "import plotly.graph_objects as go\n", 27 | "\n", 28 | "import dash\n", 29 | "# import dash_daq as daq\n", 30 | "from dash.dependencies import Input, Output" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 51, 36 | "id": "9aa9c1e9", 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "X , y = make_regression(n_samples=1000, n_features=4,noise=20)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 52, 46 | "id": "7a0ea2b8", 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "df = pd.DataFrame(data=X , columns=['X1','X2', 'X3', 'X4'])\n", 51 | "\n", 52 | "df['y'] = y " 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 53, 58 | "id": "caa0241f", 59 | "metadata": {}, 60 | "outputs": [], 61 | "source": [ 62 | "from sklearn.model_selection import train_test_split\n", 63 | "\n", 64 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 54, 70 | "id": "12fb3362", 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "LinearRegression()" 77 | ] 78 | }, 79 | "execution_count": 54, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "from sklearn.linear_model import LinearRegression\n", 86 | "\n", 87 | "model = LinearRegression()\n", 88 | "\n", 89 | "model.fit(X_train, y_train)" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 61, 95 | "id": "e8eb188a", 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "data": { 100 | "text/plain": [ 101 | "[]" 102 | ] 103 | }, 104 | "execution_count": 61, 105 | "metadata": {}, 106 | "output_type": "execute_result" 107 | }, 108 | { 109 | "data": { 110 | "image/png": "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\n", 111 | "text/plain": [ 112 | "
" 113 | ] 114 | }, 115 | "metadata": { 116 | "needs_background": "light" 117 | }, 118 | "output_type": "display_data" 119 | } 120 | ], 121 | "source": [ 122 | "yp = model.predict(X_test)\n", 123 | "\n", 124 | "plt.scatter(yp, y_test)\n", 125 | "plt.plot(y_test,y_test,color='red')" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 58, 131 | "id": "c627e443", 132 | "metadata": {}, 133 | "outputs": [ 134 | { 135 | "data": { 136 | "text/plain": [ 137 | "(array([33.22520368, 40.54188087, 36.18859523, 22.79201321]),\n", 138 | " -0.12597264714278433)" 139 | ] 140 | }, 141 | "execution_count": 58, 142 | "metadata": {}, 143 | "output_type": "execute_result" 144 | } 145 | ], 146 | "source": [ 147 | "model.coef_ , model.intercept_" 148 | ] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "id": "1483f6c9", 153 | "metadata": {}, 154 | "source": [ 155 | "Final ML Model is : **y = 33.22 X1 + 40.5 X2 + 36.18 X3 + 22.8 X4 -0.126**" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 80, 161 | "id": "6ed0a96e", 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "fig1 = px.scatter(x=y_test, y=yp)\n", 166 | "\n", 167 | "coefdf = pd.DataFrame(data=model.coef_ , index=df.columns[:-1])\n", 168 | "\n", 169 | "fig2 = px.bar(coefdf)\n", 170 | "\n", 171 | "# fig2" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": 114, 177 | "id": "8f353bc5", 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "Dash app running on http://127.0.0.1:8050/\n" 185 | ] 186 | } 187 | ], 188 | "source": [ 189 | "app = JupyterDash(__name__)\n", 190 | "\n", 191 | "app.layout = html.Div(style={'textAlign': 'center', 'width': '1200px', 'font-family': 'Verdana',\n", 192 | " },\n", 193 | " \n", 194 | " children=[\n", 195 | "\n", 196 | " # Title display\n", 197 | " html.H1(children=\"Machine Learning with DASH\"),\n", 198 | " \n", 199 | " # Dash Graph Component calls the fig_features_importance parameters\n", 200 | " html.Div(style={'textAlign': 'left', 'width': '1200px'},\n", 201 | " \n", 202 | " children = [html.H4(children=\"Model Predictions vs Actual\"),\n", 203 | " dcc.Graph(figure=fig1)]),\n", 204 | " \n", 205 | " html.Div(style={'textAlign': 'left', 'width': '1200px'},\n", 206 | " \n", 207 | " children = [html.H4(children=\"Feature Importance/Weightage\"),\n", 208 | " dcc.Graph(figure=fig2)]),\n", 209 | " \n", 210 | " \n", 211 | " # We display the most important feature's name\n", 212 | " html.H4(children=df.columns[0]),\n", 213 | " \n", 214 | " dcc.Input(\n", 215 | " id=\"X1\", type=\"number\",\n", 216 | " debounce=True, placeholder=\"X1\",\n", 217 | " value = round(df['X1'].mean(),4)\n", 218 | " ),\n", 219 | " \n", 220 | " html.H4(children=df.columns[1]),\n", 221 | " \n", 222 | " dcc.Input(\n", 223 | " id=\"X2\", type=\"number\",\n", 224 | " debounce=True, placeholder=\"X2\",\n", 225 | " value = round(df['X2'].mean(),4)\n", 226 | " ),\n", 227 | " \n", 228 | " html.H4(children=df.columns[2]),\n", 229 | " \n", 230 | " dcc.Input(\n", 231 | " id=\"X3\", type=\"number\",\n", 232 | " debounce=True, placeholder=\"X3\",\n", 233 | " value = round(df['X3'].mean(),4)\n", 234 | " ),\n", 235 | " \n", 236 | " html.H4(children=df.columns[3]),\n", 237 | " \n", 238 | " dcc.Input(\n", 239 | " id=\"X4\", type=\"number\",\n", 240 | " debounce=True, placeholder=\"X4\",\n", 241 | " value = round(df['X4'].mean(),4)\n", 242 | " ),\n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " html.H2(id=\"prediction_result\"),\n", 247 | "\n", 248 | "\n", 249 | " ])\n", 250 | "\n", 251 | "\n", 252 | "\n", 253 | "\n", 254 | "@app.callback(Output(component_id=\"prediction_result\",component_property=\"children\"),\n", 255 | "\n", 256 | "# The values correspnding to the three sliders are obtained by calling their id and value property\n", 257 | " [Input(\"X1\",\"value\"), Input(\"X2\",\"value\"), Input(\"X3\",\"value\"),Input(\"X4\",\"value\")])\n", 258 | "\n", 259 | "# # # The input variable are set in the same order as the callback Inputs\n", 260 | "def update_prediction(X1, X2, X3,X4):\n", 261 | "\n", 262 | " # We create a NumPy array in the form of the original features\n", 263 | " # [\"Pressure\",\"Viscosity\",\"Particles_size\", \"Temperature\",\"Inlet_flow\", \"Rotating_Speed\",\"pH\",\"Color_density\"]\n", 264 | " # Except for the X1, X2 and X3, all other non-influencing parameters are set to their mean\n", 265 | " input_X = np.array([X1,X2,X3,X4]).reshape(1,-1) \n", 266 | " \n", 267 | " # Prediction is calculated based on the input_X array\n", 268 | " prediction = model.predict(input_X)[0]\n", 269 | " \n", 270 | " # And retuned to the Output of the callback function\n", 271 | " return \"ML Model Prediction: {}\".format(round(prediction,4))\n", 272 | "\n", 273 | "\n", 274 | "if __name__ == \"__main__\":\n", 275 | " app.run_server()" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": null, 281 | "id": "66bfd4d0", 282 | "metadata": {}, 283 | "outputs": [], 284 | "source": [] 285 | } 286 | ], 287 | "metadata": { 288 | "kernelspec": { 289 | "display_name": "Python 3", 290 | "language": "python", 291 | "name": "python3" 292 | }, 293 | "language_info": { 294 | "codemirror_mode": { 295 | "name": "ipython", 296 | "version": 3 297 | }, 298 | "file_extension": ".py", 299 | "mimetype": "text/x-python", 300 | "name": "python", 301 | "nbconvert_exporter": "python", 302 | "pygments_lexer": "ipython3", 303 | "version": "3.8.8" 304 | } 305 | }, 306 | "nbformat": 4, 307 | "nbformat_minor": 5 308 | } 309 | -------------------------------------------------------------------------------- /MNIST_ANN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "MNIST_ANN.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "id": "view-in-github", 20 | "colab_type": "text" 21 | }, 22 | "source": [ 23 | "\"Open" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": { 29 | "id": "hN0pfEdsf3OC" 30 | }, 31 | "source": [ 32 | "#Image Classification with Keras and Tensorflow (ANNs)\n", 33 | "\n", 34 | "MNIST Dataset" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": { 40 | "id": "X-b1NNLhnaeF" 41 | }, 42 | "source": [ 43 | "#Task 1: Import Libraries." 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "metadata": { 49 | "id": "i4PcZi39ffrL" 50 | }, 51 | "source": [ 52 | "import tensorflow as tf\n", 53 | "import numpy as np\n", 54 | "import matplotlib.pyplot as plt\n", 55 | "import seaborn as sns\n", 56 | "import pandas as pd" 57 | ], 58 | "execution_count": null, 59 | "outputs": [] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": { 64 | "id": "VIJV7AGonVyW" 65 | }, 66 | "source": [ 67 | "#Task 2 : Import MNIST dataset." 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "metadata": { 73 | "id": "zrBLTv6_leN9" 74 | }, 75 | "source": [ 76 | "from tensorflow.keras.datasets import mnist" 77 | ], 78 | "execution_count": null, 79 | "outputs": [] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": { 84 | "id": "E5dFCUQ1m42o" 85 | }, 86 | "source": [ 87 | "mnist.load_data() returns training and testing data." 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "metadata": { 93 | "id": "l2b9WKRBmvBz", 94 | "colab": { 95 | "base_uri": "https://localhost:8080/", 96 | "height": 54 97 | }, 98 | "outputId": "2c2a0ab7-24ba-45bc-9aff-421387157982" 99 | }, 100 | "source": [ 101 | "(x_train, y_train), (x_test, y_test) = mnist.load_data()" 102 | ], 103 | "execution_count": null, 104 | "outputs": [ 105 | { 106 | "output_type": "stream", 107 | "text": [ 108 | "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", 109 | "11493376/11490434 [==============================] - 0s 0us/step\n" 110 | ], 111 | "name": "stdout" 112 | } 113 | ] 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "metadata": { 118 | "id": "qgmu6vJpoY0L" 119 | }, 120 | "source": [ 121 | "We use the training data to fit and train the NN.\n", 122 | "\n", 123 | "We use the test data to test/validate the performance of our NN." 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": { 129 | "id": "0tq-aidIv79P" 130 | }, 131 | "source": [ 132 | "##Shapes of all the datasets imported." 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "metadata": { 138 | "id": "zRdOPMXhnQwv", 139 | "colab": { 140 | "base_uri": "https://localhost:8080/", 141 | "height": 90 142 | }, 143 | "outputId": "26b29c62-5db3-451c-8a8b-4b4e61401588" 144 | }, 145 | "source": [ 146 | "print(f'x_train :{x_train.shape}')\n", 147 | "print(f'y_train :{y_train.shape}')\n", 148 | "\n", 149 | "print(f'x_test :{x_test.shape}')\n", 150 | "print(f'y_test :{y_test.shape}')" 151 | ], 152 | "execution_count": null, 153 | "outputs": [ 154 | { 155 | "output_type": "stream", 156 | "text": [ 157 | "x_train :(60000, 28, 28)\n", 158 | "y_train :(60000,)\n", 159 | "x_test :(10000, 28, 28)\n", 160 | "y_test :(10000,)\n" 161 | ], 162 | "name": "stdout" 163 | } 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "metadata": { 169 | "id": "HzOPyiT2wSBj" 170 | }, 171 | "source": [ 172 | "#So in (60000, 28 , 28)\n", 173 | "\n", 174 | "#We have 60000 image examples - ie, 60000 Images\n", 175 | "#Each Image has 28 Rows and 28 Columns - Each image is 28x28 pixel sized." 176 | ], 177 | "execution_count": null, 178 | "outputs": [] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": { 183 | "id": "qf3p7q8ExI2z" 184 | }, 185 | "source": [ 186 | "Let's try and display one example." 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "metadata": { 192 | "id": "NDS15sGewuH4", 193 | "colab": { 194 | "base_uri": "https://localhost:8080/", 195 | "height": 283 196 | }, 197 | "outputId": "04d8cfd5-72a4-4ae5-c802-82f2e7b924ae" 198 | }, 199 | "source": [ 200 | "plt.imshow(x_train[3], cmap='binary')" 201 | ], 202 | "execution_count": null, 203 | "outputs": [ 204 | { 205 | "output_type": "execute_result", 206 | "data": { 207 | "text/plain": [ 208 | "" 209 | ] 210 | }, 211 | "metadata": { 212 | "tags": [] 213 | }, 214 | "execution_count": 12 215 | }, 216 | { 217 | "output_type": "display_data", 218 | "data": { 219 | "image/png": "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\n", 220 | "text/plain": [ 221 | "
" 222 | ] 223 | }, 224 | "metadata": { 225 | "tags": [], 226 | "needs_background": "light" 227 | } 228 | } 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "metadata": { 234 | "id": "GSL9JimMx9lA", 235 | "colab": { 236 | "base_uri": "https://localhost:8080/", 237 | "height": 35 238 | }, 239 | "outputId": "8bb8cd48-4d15-4948-86aa-3e53264d751b" 240 | }, 241 | "source": [ 242 | "print(y_train[3])" 243 | ], 244 | "execution_count": null, 245 | "outputs": [ 246 | { 247 | "output_type": "stream", 248 | "text": [ 249 | "1\n" 250 | ], 251 | "name": "stdout" 252 | } 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "metadata": { 258 | "id": "SLkOUjYhyPri", 259 | "colab": { 260 | "base_uri": "https://localhost:8080/", 261 | "height": 35 262 | }, 263 | "outputId": "7e7722a7-81e1-469e-9bc3-0b1affc324ac" 264 | }, 265 | "source": [ 266 | "#Let's see how many unique labels do we have. \n", 267 | "#Remember? Sets only allow unique values to be stored in em. \n", 268 | "\n", 269 | "print(set(y_train))" 270 | ], 271 | "execution_count": null, 272 | "outputs": [ 273 | { 274 | "output_type": "stream", 275 | "text": [ 276 | "{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}\n" 277 | ], 278 | "name": "stdout" 279 | } 280 | ] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "metadata": { 285 | "id": "YxX9YMa-xkVx" 286 | }, 287 | "source": [ 288 | "ANNs can identify and classify really well. \n", 289 | "\n", 290 | "The only catch is that they need a lot of training data and hence a lot of computational power. \n", 291 | "\n", 292 | "That's why you can see that we have taken 60,000 training examples." 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "metadata": { 298 | "id": "gRv1YXCwxPxk" 299 | }, 300 | "source": [ 301 | "####################################" 302 | ], 303 | "execution_count": null, 304 | "outputs": [] 305 | }, 306 | { 307 | "cell_type": "markdown", 308 | "metadata": { 309 | "id": "srrxP1KFy-Kl" 310 | }, 311 | "source": [ 312 | "#Task 3: One Hot Encoding" 313 | ] 314 | }, 315 | { 316 | "cell_type": "markdown", 317 | "metadata": { 318 | "id": "0W3jEIWpzWYy" 319 | }, 320 | "source": [ 321 | "n_uniquelabels = 10 (0 --> 9)\n", 322 | "\n", 323 | "> In this, every label (every y value) is converted to a list of 10 (n_unuiquelabels) elements. And hence, the element at the index coresponding to y's class will be 1, rest all 0. \n", 324 | "\n", 325 | "Examples :- list - [0,0,0,0,0,0,0,0,0,0]\n", 326 | "\n", 327 | "> 0 : [1,0,0,0,0,0,0,0,0,0]\n", 328 | "\n", 329 | "> 1 : [0,1,0,0,0,0,0,0,0,0]\n", 330 | "\n", 331 | "> 9 : [0,0,0,0,0,0,0,0,0,1]" 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "metadata": { 337 | "id": "kMOG131M0Y9j" 338 | }, 339 | "source": [ 340 | "We can get this done automatically with tensorflow.keras.utils - to_categorical , utility." 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "metadata": { 346 | "id": "grE2tLqoy9G3" 347 | }, 348 | "source": [ 349 | "from tensorflow.keras.utils import to_categorical\n", 350 | "\n", 351 | "y_train_encoded = to_categorical(y_train)\n", 352 | "\n", 353 | "y_test_encoded = to_categorical(y_test)" 354 | ], 355 | "execution_count": null, 356 | "outputs": [] 357 | }, 358 | { 359 | "cell_type": "markdown", 360 | "metadata": { 361 | "id": "WFqglqLp1L5O" 362 | }, 363 | "source": [ 364 | "Just to check if the encoding worked as planned, let's check the shape of the encoded arrays as per the above mentioned concept." 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "metadata": { 370 | "id": "T1EAh88i1FzQ", 371 | "colab": { 372 | "base_uri": "https://localhost:8080/", 373 | "height": 35 374 | }, 375 | "outputId": "6c57656a-38ff-4d3d-b39c-5add63c9832e" 376 | }, 377 | "source": [ 378 | "y_train_encoded.shape" 379 | ], 380 | "execution_count": null, 381 | "outputs": [ 382 | { 383 | "output_type": "execute_result", 384 | "data": { 385 | "text/plain": [ 386 | "(60000, 10)" 387 | ] 388 | }, 389 | "metadata": { 390 | "tags": [] 391 | }, 392 | "execution_count": 18 393 | } 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "metadata": { 399 | "id": "RB67qViY1Xh_", 400 | "colab": { 401 | "base_uri": "https://localhost:8080/", 402 | "height": 35 403 | }, 404 | "outputId": "292d4733-30a9-44e1-a420-0356c2c9258b" 405 | }, 406 | "source": [ 407 | "y_test_encoded.shape" 408 | ], 409 | "execution_count": null, 410 | "outputs": [ 411 | { 412 | "output_type": "execute_result", 413 | "data": { 414 | "text/plain": [ 415 | "(10000, 10)" 416 | ] 417 | }, 418 | "metadata": { 419 | "tags": [] 420 | }, 421 | "execution_count": 19 422 | } 423 | ] 424 | }, 425 | { 426 | "cell_type": "code", 427 | "metadata": { 428 | "id": "oQAfE3le1dtQ", 429 | "colab": { 430 | "base_uri": "https://localhost:8080/", 431 | "height": 54 432 | }, 433 | "outputId": "2b773297-5b9b-42d3-9ce4-05c7dac5e49b" 434 | }, 435 | "source": [ 436 | "print(y_train[0])\n", 437 | "\n", 438 | "print(y_train_encoded[0])" 439 | ], 440 | "execution_count": null, 441 | "outputs": [ 442 | { 443 | "output_type": "stream", 444 | "text": [ 445 | "5\n", 446 | "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" 447 | ], 448 | "name": "stdout" 449 | } 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "metadata": { 455 | "id": "PG3CIArh2LTv" 456 | }, 457 | "source": [ 458 | "#################################################################" 459 | ], 460 | "execution_count": null, 461 | "outputs": [] 462 | }, 463 | { 464 | "cell_type": "markdown", 465 | "metadata": { 466 | "id": "7su_0ZaA2aPC" 467 | }, 468 | "source": [ 469 | "#Task 4: Neural Networks." 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "metadata": { 475 | "id": "6FytkZ9T2ZOT" 476 | }, 477 | "source": [ 478 | "#Basic Understanding of ANNs\n", 479 | "\n", 480 | "#Our model will have a 784 --> 128 --> 128 --> 10 structure." 481 | ], 482 | "execution_count": null, 483 | "outputs": [] 484 | }, 485 | { 486 | "cell_type": "code", 487 | "metadata": { 488 | "id": "mCXhByCr9mf9" 489 | }, 490 | "source": [ 491 | "##########################" 492 | ], 493 | "execution_count": null, 494 | "outputs": [] 495 | }, 496 | { 497 | "cell_type": "markdown", 498 | "metadata": { 499 | "id": "xoLWgUqW9p7R" 500 | }, 501 | "source": [ 502 | "#Task 5 : Pre-Processing the examples." 503 | ] 504 | }, 505 | { 506 | "cell_type": "markdown", 507 | "metadata": { 508 | "id": "hPcMzHHV92Hh" 509 | }, 510 | "source": [ 511 | "We've already converted the output labels y_train to a (60k , 10) shape by OneHotEncoding. \n", 512 | "\n", 513 | "Now we gotta convert the 28X28 pixel inputs into a (784,1) shape." 514 | ] 515 | }, 516 | { 517 | "cell_type": "code", 518 | "metadata": { 519 | "id": "eoJSY9hV9pCt" 520 | }, 521 | "source": [ 522 | "x_train_reshaped = x_train.reshape(60000,784)\n", 523 | "\n", 524 | "x_test_reshaped = x_test.reshape(10000,784)" 525 | ], 526 | "execution_count": null, 527 | "outputs": [] 528 | }, 529 | { 530 | "cell_type": "code", 531 | "metadata": { 532 | "id": "tLCirvqg-VeI", 533 | "colab": { 534 | "base_uri": "https://localhost:8080/", 535 | "height": 35 536 | }, 537 | "outputId": "916c0d5b-2f80-4eb1-d760-9037b7b6d6e6" 538 | }, 539 | "source": [ 540 | "x_train_reshaped.shape" 541 | ], 542 | "execution_count": null, 543 | "outputs": [ 544 | { 545 | "output_type": "execute_result", 546 | "data": { 547 | "text/plain": [ 548 | "(60000, 784)" 549 | ] 550 | }, 551 | "metadata": { 552 | "tags": [] 553 | }, 554 | "execution_count": 26 555 | } 556 | ] 557 | }, 558 | { 559 | "cell_type": "code", 560 | "metadata": { 561 | "id": "zarSyx8k-n5t", 562 | "colab": { 563 | "base_uri": "https://localhost:8080/", 564 | "height": 35 565 | }, 566 | "outputId": "6027517a-40ad-45f8-8b98-f6c8322d6d71" 567 | }, 568 | "source": [ 569 | "x_test_reshaped.shape" 570 | ], 571 | "execution_count": null, 572 | "outputs": [ 573 | { 574 | "output_type": "execute_result", 575 | "data": { 576 | "text/plain": [ 577 | "(10000, 784)" 578 | ] 579 | }, 580 | "metadata": { 581 | "tags": [] 582 | }, 583 | "execution_count": 27 584 | } 585 | ] 586 | }, 587 | { 588 | "cell_type": "markdown", 589 | "metadata": { 590 | "id": "hIt0_ErW_xWB" 591 | }, 592 | "source": [ 593 | "Let's see the unique pixel values of any example." 594 | ] 595 | }, 596 | { 597 | "cell_type": "code", 598 | "metadata": { 599 | "id": "IzMaFnUz-qNf", 600 | "colab": { 601 | "base_uri": "https://localhost:8080/", 602 | "height": 55 603 | }, 604 | "outputId": "f30095a4-9cc3-4aec-92cd-2a639c08f61d" 605 | }, 606 | "source": [ 607 | "print(set(x_train_reshaped[0]))" 608 | ], 609 | "execution_count": null, 610 | "outputs": [ 611 | { 612 | "output_type": "stream", 613 | "text": [ 614 | "{0, 1, 2, 3, 9, 11, 14, 16, 18, 23, 24, 25, 26, 27, 30, 35, 36, 39, 43, 45, 46, 49, 55, 56, 64, 66, 70, 78, 80, 81, 82, 90, 93, 94, 107, 108, 114, 119, 126, 127, 130, 132, 133, 135, 136, 139, 148, 150, 154, 156, 160, 166, 170, 171, 172, 175, 182, 183, 186, 187, 190, 195, 198, 201, 205, 207, 212, 213, 219, 221, 225, 226, 229, 238, 240, 241, 242, 244, 247, 249, 250, 251, 252, 253, 255}\n" 615 | ], 616 | "name": "stdout" 617 | } 618 | ] 619 | }, 620 | { 621 | "cell_type": "markdown", 622 | "metadata": { 623 | "id": "x6Prr-jEAG_B" 624 | }, 625 | "source": [ 626 | "You can see that the values range from 0 (min) to 255(max)." 627 | ] 628 | }, 629 | { 630 | "cell_type": "markdown", 631 | "metadata": { 632 | "id": "P6ZGg4-_ANBC" 633 | }, 634 | "source": [ 635 | "It would be better to normalize these values to bring it within a small/finite range, so that the errors don't blow up." 636 | ] 637 | }, 638 | { 639 | "cell_type": "markdown", 640 | "metadata": { 641 | "id": "6QwvQ3a4Acra" 642 | }, 643 | "source": [ 644 | "##Data Normalization." 645 | ] 646 | }, 647 | { 648 | "cell_type": "code", 649 | "metadata": { 650 | "id": "msnVijL5__OH" 651 | }, 652 | "source": [ 653 | "x_mean = np.mean(x_train_reshaped)\n", 654 | "\n", 655 | "x_std = np.std(x_train_reshaped)" 656 | ], 657 | "execution_count": null, 658 | "outputs": [] 659 | }, 660 | { 661 | "cell_type": "code", 662 | "metadata": { 663 | "id": "VoESF-pyAueb" 664 | }, 665 | "source": [ 666 | "epsilon = 1e-10\n", 667 | "\n", 668 | "x_train_norm = (x_train_reshaped - x_mean)/(x_std + epsilon)\n", 669 | "\n", 670 | "#why epsilon? Because sometimes a very small value of std can cause error to blow up. \n", 671 | "#adding another small value just solves that issue." 672 | ], 673 | "execution_count": null, 674 | "outputs": [] 675 | }, 676 | { 677 | "cell_type": "code", 678 | "metadata": { 679 | "id": "c22ArR0MBXHq" 680 | }, 681 | "source": [ 682 | "#Now to avoid leakage, and to make sure whatever we do on train is what we do on test\n", 683 | "#to be purely unbiased, we use same mean and std to normalize test set.\n", 684 | "\n", 685 | "x_test_norm = (x_test_reshaped - x_mean)/(x_std + epsilon)" 686 | ], 687 | "execution_count": null, 688 | "outputs": [] 689 | }, 690 | { 691 | "cell_type": "code", 692 | "metadata": { 693 | "id": "0xLJ_PidB7qZ", 694 | "colab": { 695 | "base_uri": "https://localhost:8080/", 696 | "height": 55 697 | }, 698 | "outputId": "5dfdaec4-11c4-4bcb-e179-052ea0d2477c" 699 | }, 700 | "source": [ 701 | "print(set(x_train_norm[0]))" 702 | ], 703 | "execution_count": null, 704 | "outputs": [ 705 | { 706 | "output_type": "stream", 707 | "text": [ 708 | "{-0.38589016215482896, 1.306921966983251, 1.17964285952926, 1.803310486053816, 1.6887592893452241, 2.8215433456857437, 2.719720059722551, 1.1923707702746593, 1.7396709323268205, 2.057868700961798, 2.3633385588513764, 2.096052433197995, 1.7651267538176187, 2.7960875241949457, 2.7451758812133495, 2.45243393406917, 0.02140298169794222, -0.22042732246464067, 1.2305545025108566, 0.2759611966059242, 2.210603629906587, 2.6560805059955555, 2.6051688630139593, -0.4240738943910262, 0.4668798577869107, 0.1486820891519332, 0.3905123933145161, 1.0905474843114664, -0.09314821501064967, 1.4851127174188385, 2.7579037919587486, 1.5360243604004349, 0.07231462467953861, -0.13133194724684696, 1.294194056237852, 0.03413089244334132, 1.3451056992194483, 2.274243183633583, -0.24588314395543887, 0.772349715676489, 0.75962180493109, 0.7214380726948927, 0.1995937321335296, -0.41134598364562713, 0.5687031437501034, 0.5941589652409017, 0.9378125553666773, 0.9505404661120763, 0.6068868759863008, 0.4159682148053143, -0.042236572029053274, 2.7706317027041476, 2.1342361654341926, 0.12322626766113501, -0.08042030426525057, 0.16140999989733232, 1.8924058612716097, 1.2560103240016547, 2.185147808415789, 0.6196147867316999, 1.943317504253206, -0.11860403650144787, -0.30952269768243434, 1.9942291472348024, -0.2840668761916362, 2.6306246845047574, 2.286971094378982, -0.19497150097384247, -0.39861807290022805, 0.2886891073513233, 1.7523988430722195, 2.3887943803421745, 2.681536327486354, 1.4596568959280403, 2.439706023323771, 2.7833596134495466, 2.490617666305367, -0.10587612575604877, 1.5614801818912332, 1.9051337720170087, 1.6123918248728295, 1.268738234747054, 1.9560454149986053, 2.6433525952501564, 1.026907930584471}\n" 709 | ], 710 | "name": "stdout" 711 | } 712 | ] 713 | }, 714 | { 715 | "cell_type": "code", 716 | "metadata": { 717 | "id": "wA8hJ4eACHYv" 718 | }, 719 | "source": [ 720 | "###############################################################################################" 721 | ], 722 | "execution_count": null, 723 | "outputs": [] 724 | }, 725 | { 726 | "cell_type": "markdown", 727 | "metadata": { 728 | "id": "ZxzUSjtOCmgP" 729 | }, 730 | "source": [ 731 | "#Task 6: Creating the model" 732 | ] 733 | }, 734 | { 735 | "cell_type": "code", 736 | "metadata": { 737 | "id": "iQ1jODLyCpDs" 738 | }, 739 | "source": [ 740 | "from tensorflow.keras.models import Sequential\n", 741 | "from tensorflow.keras.layers import Dense\n", 742 | "\n", 743 | "model = Sequential([\n", 744 | " Dense(128, activation='relu', input_shape=(784,)),\n", 745 | " Dense(128, activation='relu'),\n", 746 | " Dense(10, activation='softmax')\n", 747 | " ])" 748 | ], 749 | "execution_count": null, 750 | "outputs": [] 751 | }, 752 | { 753 | "cell_type": "markdown", 754 | "metadata": { 755 | "id": "Ykth_rIMGKFs" 756 | }, 757 | "source": [ 758 | "##Compile the Model\n", 759 | "\n", 760 | "This is where the optimization algorithm is set." 761 | ] 762 | }, 763 | { 764 | "cell_type": "code", 765 | "metadata": { 766 | "id": "ymKajhavGFfF", 767 | "colab": { 768 | "base_uri": "https://localhost:8080/", 769 | "height": 272 770 | }, 771 | "outputId": "e96eea84-f2ea-41d8-b4b8-8109511ccb49" 772 | }, 773 | "source": [ 774 | "model.compile(\n", 775 | " optimizer = 'sgd',\n", 776 | " loss='categorical_crossentropy',\n", 777 | " metrics=['accuracy']\n", 778 | ")\n", 779 | "\n", 780 | "\n", 781 | "model.summary()" 782 | ], 783 | "execution_count": null, 784 | "outputs": [ 785 | { 786 | "output_type": "stream", 787 | "text": [ 788 | "Model: \"sequential\"\n", 789 | "_________________________________________________________________\n", 790 | "Layer (type) Output Shape Param # \n", 791 | "=================================================================\n", 792 | "dense (Dense) (None, 128) 100480 \n", 793 | "_________________________________________________________________\n", 794 | "dense_1 (Dense) (None, 128) 16512 \n", 795 | "_________________________________________________________________\n", 796 | "dense_2 (Dense) (None, 10) 1290 \n", 797 | "=================================================================\n", 798 | "Total params: 118,282\n", 799 | "Trainable params: 118,282\n", 800 | "Non-trainable params: 0\n", 801 | "_________________________________________________________________\n" 802 | ], 803 | "name": "stdout" 804 | } 805 | ] 806 | }, 807 | { 808 | "cell_type": "code", 809 | "metadata": { 810 | "id": "PHDU2BwGHWPJ" 811 | }, 812 | "source": [ 813 | "##################################################" 814 | ], 815 | "execution_count": null, 816 | "outputs": [] 817 | }, 818 | { 819 | "cell_type": "markdown", 820 | "metadata": { 821 | "id": "ugBnV3CuHpWy" 822 | }, 823 | "source": [ 824 | "#Task 7: Training the model." 825 | ] 826 | }, 827 | { 828 | "cell_type": "markdown", 829 | "metadata": { 830 | "id": "BQ_fqPXrIwm0" 831 | }, 832 | "source": [ 833 | "##Train." 834 | ] 835 | }, 836 | { 837 | "cell_type": "code", 838 | "metadata": { 839 | "id": "HpIWGKnMHoi-", 840 | "colab": { 841 | "base_uri": "https://localhost:8080/", 842 | "height": 217 843 | }, 844 | "outputId": "c41bfeac-d226-46f2-d30e-8a4c7a610b63" 845 | }, 846 | "source": [ 847 | "model.fit(x_train_norm,y_train_encoded,epochs=5)" 848 | ], 849 | "execution_count": null, 850 | "outputs": [ 851 | { 852 | "output_type": "stream", 853 | "text": [ 854 | "Epoch 1/5\n", 855 | "1875/1875 [==============================] - 4s 2ms/step - loss: 0.3728 - accuracy: 0.8909\n", 856 | "Epoch 2/5\n", 857 | "1875/1875 [==============================] - 4s 2ms/step - loss: 0.1832 - accuracy: 0.9465\n", 858 | "Epoch 3/5\n", 859 | "1875/1875 [==============================] - 4s 2ms/step - loss: 0.1389 - accuracy: 0.9595\n", 860 | "Epoch 4/5\n", 861 | "1875/1875 [==============================] - 4s 2ms/step - loss: 0.1134 - accuracy: 0.9674\n", 862 | "Epoch 5/5\n", 863 | "1875/1875 [==============================] - 5s 3ms/step - loss: 0.0952 - accuracy: 0.9722\n" 864 | ], 865 | "name": "stdout" 866 | }, 867 | { 868 | "output_type": "execute_result", 869 | "data": { 870 | "text/plain": [ 871 | "" 872 | ] 873 | }, 874 | "metadata": { 875 | "tags": [] 876 | }, 877 | "execution_count": 39 878 | } 879 | ] 880 | }, 881 | { 882 | "cell_type": "code", 883 | "metadata": { 884 | "id": "1iPJ3XnfIPdr" 885 | }, 886 | "source": [ 887 | "#Can see that the model accuracey is increasing epoch by epoch. \n", 888 | "#epoch can be thought of a one full-fledged pass throughout all the examples." 889 | ], 890 | "execution_count": null, 891 | "outputs": [] 892 | }, 893 | { 894 | "cell_type": "markdown", 895 | "metadata": { 896 | "id": "hy7dbwDYIvFU" 897 | }, 898 | "source": [ 899 | "##Evaluate." 900 | ] 901 | }, 902 | { 903 | "cell_type": "code", 904 | "metadata": { 905 | "id": "X_8YnAVBIg0c", 906 | "colab": { 907 | "base_uri": "https://localhost:8080/", 908 | "height": 54 909 | }, 910 | "outputId": "07c63fa1-5fe7-4ece-d203-bd46fe9bf51e" 911 | }, 912 | "source": [ 913 | "loss, accuracy = model.evaluate(x_test_norm,y_test_encoded)\n", 914 | "\n", 915 | "#Note that this step doesn't train the model on the test data. \n", 916 | "#It uses the trained state of our model as in step 39 above (after 5 epochs)\n", 917 | "#And checks how well the model performs on this new data. \n", 918 | "#Just a Forward Pass. No bakward pass. No learning. \n", 919 | "\n", 920 | "print(f'Model Accuracy is :{accuracy*100}%')" 921 | ], 922 | "execution_count": null, 923 | "outputs": [ 924 | { 925 | "output_type": "stream", 926 | "text": [ 927 | "313/313 [==============================] - 0s 1ms/step - loss: 0.1049 - accuracy: 0.9683\n", 928 | "Model Accuracy is :96.82999849319458%\n" 929 | ], 930 | "name": "stdout" 931 | } 932 | ] 933 | }, 934 | { 935 | "cell_type": "code", 936 | "metadata": { 937 | "id": "MbEoTRvvJsOO" 938 | }, 939 | "source": [ 940 | "#So we can comfortably say that the model has understood how to identify numbers." 941 | ], 942 | "execution_count": null, 943 | "outputs": [] 944 | }, 945 | { 946 | "cell_type": "code", 947 | "metadata": { 948 | "id": "moISPxeIJyiT" 949 | }, 950 | "source": [ 951 | "#####################################################" 952 | ], 953 | "execution_count": null, 954 | "outputs": [] 955 | }, 956 | { 957 | "cell_type": "markdown", 958 | "metadata": { 959 | "id": "7wJhRtOoKDFa" 960 | }, 961 | "source": [ 962 | "#Task 8: Model Predictions." 963 | ] 964 | }, 965 | { 966 | "cell_type": "code", 967 | "metadata": { 968 | "id": "B0Mx0iSEKBlu", 969 | "colab": { 970 | "base_uri": "https://localhost:8080/", 971 | "height": 35 972 | }, 973 | "outputId": "765509fd-d2fa-45e7-a1bd-8007638b799b" 974 | }, 975 | "source": [ 976 | "y_p = model.predict(x_test_norm)\n", 977 | "\n", 978 | "y_p.shape" 979 | ], 980 | "execution_count": null, 981 | "outputs": [ 982 | { 983 | "output_type": "execute_result", 984 | "data": { 985 | "text/plain": [ 986 | "(10000, 10)" 987 | ] 988 | }, 989 | "metadata": { 990 | "tags": [] 991 | }, 992 | "execution_count": 44 993 | } 994 | ] 995 | }, 996 | { 997 | "cell_type": "markdown", 998 | "metadata": { 999 | "id": "_xC2wQ-6Kb46" 1000 | }, 1001 | "source": [ 1002 | "##Plotting the results." 1003 | ] 1004 | }, 1005 | { 1006 | "cell_type": "code", 1007 | "metadata": { 1008 | "id": "YrDDS1jJKXoj" 1009 | }, 1010 | "source": [ 1011 | "##TO DO.\n", 1012 | "##Brilliant idea.\n", 1013 | "###Part 8. Predictions." 1014 | ], 1015 | "execution_count": null, 1016 | "outputs": [] 1017 | }, 1018 | { 1019 | "cell_type": "code", 1020 | "metadata": { 1021 | "id": "M-O7V7_QMhTR" 1022 | }, 1023 | "source": [ 1024 | "" 1025 | ], 1026 | "execution_count": null, 1027 | "outputs": [] 1028 | } 1029 | ] 1030 | } -------------------------------------------------------------------------------- /Machine_Learning_UIs_with_Gradio.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Machine Learning UIs with Gradio.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyM49BYqbrzyd9ZFYDaAULId" 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "id": "73elJnlQg0o_" 23 | }, 24 | "source": [ 25 | "# Temporary POC deployment of ML workflows : Using Gradio\n", 26 | "\n", 27 | "> Divyanshu Vyas | Data Scientist " 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "metadata": { 33 | "id": "zvYbCLU8H1n5" 34 | }, 35 | "source": [ 36 | "# !pip install gradio" 37 | ], 38 | "execution_count": 2, 39 | "outputs": [] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": { 44 | "id": "riUiGaxLhdWD" 45 | }, 46 | "source": [ 47 | "# 1. Understanding how to run it. " 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "metadata": { 53 | "id": "rRpLG_NlIGcg" 54 | }, 55 | "source": [ 56 | "import gradio as gr" 57 | ], 58 | "execution_count": 4, 59 | "outputs": [] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "colab": { 65 | "base_uri": "https://localhost:8080/", 66 | "height": 35 67 | }, 68 | "id": "w2q3IQ3YKzUp", 69 | "outputId": "5e66da2e-b9d4-4514-a9f2-917ccb785c70" 70 | }, 71 | "source": [ 72 | "def squarer(x):\n", 73 | " return f'The Square is = {x**2}'\n", 74 | "\n", 75 | "squarer(2)" 76 | ], 77 | "execution_count": 8, 78 | "outputs": [ 79 | { 80 | "output_type": "execute_result", 81 | "data": { 82 | "application/vnd.google.colaboratory.intrinsic+json": { 83 | "type": "string" 84 | }, 85 | "text/plain": [ 86 | "'The Square is = 4'" 87 | ] 88 | }, 89 | "metadata": { 90 | "tags": [] 91 | }, 92 | "execution_count": 8 93 | } 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "metadata": { 99 | "id": "ejmrXwE_XSjI" 100 | }, 101 | "source": [ 102 | "# gr.Interface(fn=squarer, inputs=\"number\", outputs=\"text\").launch()" 103 | ], 104 | "execution_count": 10, 105 | "outputs": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "metadata": { 110 | "id": "mOc2LJ31hhV9" 111 | }, 112 | "source": [ 113 | "# 2. ML (Regression) Project Deployment." 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "metadata": { 119 | "id": "uQ1C2KsaY-XA" 120 | }, 121 | "source": [ 122 | "import numpy as np\n", 123 | "import pandas as pd\n", 124 | "import seaborn as sns\n", 125 | "import matplotlib.pyplot as plt\n" 126 | ], 127 | "execution_count": 12, 128 | "outputs": [] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "metadata": { 133 | "id": "nWxEX1tdXY0-" 134 | }, 135 | "source": [ 136 | "df = pd.read_csv('/content/sample_data/california_housing_train.csv')" 137 | ], 138 | "execution_count": 18, 139 | "outputs": [] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "metadata": { 144 | "colab": { 145 | "base_uri": "https://localhost:8080/" 146 | }, 147 | "id": "cDso8OkkY9FU", 148 | "outputId": "f9df11ea-e0b9-4213-c4ab-05e76e639c86" 149 | }, 150 | "source": [ 151 | "df.shape" 152 | ], 153 | "execution_count": 19, 154 | "outputs": [ 155 | { 156 | "output_type": "execute_result", 157 | "data": { 158 | "text/plain": [ 159 | "(17000, 9)" 160 | ] 161 | }, 162 | "metadata": { 163 | "tags": [] 164 | }, 165 | "execution_count": 19 166 | } 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "metadata": { 172 | "colab": { 173 | "base_uri": "https://localhost:8080/" 174 | }, 175 | "id": "i_4VpNyKZF6Y", 176 | "outputId": "75752776-1714-46bf-acf0-89c7d916723e" 177 | }, 178 | "source": [ 179 | "df.columns" 180 | ], 181 | "execution_count": 21, 182 | "outputs": [ 183 | { 184 | "output_type": "execute_result", 185 | "data": { 186 | "text/plain": [ 187 | "Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',\n", 188 | " 'total_bedrooms', 'population', 'households', 'median_income',\n", 189 | " 'median_house_value'],\n", 190 | " dtype='object')" 191 | ] 192 | }, 193 | "metadata": { 194 | "tags": [] 195 | }, 196 | "execution_count": 21 197 | } 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "metadata": { 203 | "id": "4iU5x2tfZkHe" 204 | }, 205 | "source": [ 206 | "df = df.iloc[:,2:]" 207 | ], 208 | "execution_count": 23, 209 | "outputs": [] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "metadata": { 214 | "colab": { 215 | "base_uri": "https://localhost:8080/" 216 | }, 217 | "id": "tDT_fgfzaT8R", 218 | "outputId": "499e84a8-e3da-4029-cf51-a4aed8a4040b" 219 | }, 220 | "source": [ 221 | "df.columns" 222 | ], 223 | "execution_count": 24, 224 | "outputs": [ 225 | { 226 | "output_type": "execute_result", 227 | "data": { 228 | "text/plain": [ 229 | "Index(['housing_median_age', 'total_rooms', 'total_bedrooms', 'population',\n", 230 | " 'households', 'median_income', 'median_house_value'],\n", 231 | " dtype='object')" 232 | ] 233 | }, 234 | "metadata": { 235 | "tags": [] 236 | }, 237 | "execution_count": 24 238 | } 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "metadata": { 244 | "colab": { 245 | "base_uri": "https://localhost:8080/" 246 | }, 247 | "id": "5o8hIXr2a0Mg", 248 | "outputId": "b744c7b8-c34b-4fe0-88f0-adde228fb842" 249 | }, 250 | "source": [ 251 | "df.shape" 252 | ], 253 | "execution_count": 25, 254 | "outputs": [ 255 | { 256 | "output_type": "execute_result", 257 | "data": { 258 | "text/plain": [ 259 | "(17000, 7)" 260 | ] 261 | }, 262 | "metadata": { 263 | "tags": [] 264 | }, 265 | "execution_count": 25 266 | } 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "metadata": { 272 | "id": "DynU1UZea2q5" 273 | }, 274 | "source": [ 275 | "from sklearn.model_selection import train_test_split" 276 | ], 277 | "execution_count": 26, 278 | "outputs": [] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "metadata": { 283 | "id": "njFRjD-ObJko" 284 | }, 285 | "source": [ 286 | "X = df.iloc[:,:-1]\n", 287 | "y = df.iloc[:,-1]" 288 | ], 289 | "execution_count": 28, 290 | "outputs": [] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "metadata": { 295 | "id": "NW5QrgG-a9vO" 296 | }, 297 | "source": [ 298 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=101)" 299 | ], 300 | "execution_count": 29, 301 | "outputs": [] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "metadata": { 306 | "id": "ZZF_OzePbIIP" 307 | }, 308 | "source": [ 309 | "from sklearn.preprocessing import StandardScaler, MinMaxScaler" 310 | ], 311 | "execution_count": 46, 312 | "outputs": [] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "metadata": { 317 | "id": "GY2CWzYjbR0x" 318 | }, 319 | "source": [ 320 | "scaler = MinMaxScaler()" 321 | ], 322 | "execution_count": 47, 323 | "outputs": [] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "metadata": { 328 | "colab": { 329 | "base_uri": "https://localhost:8080/" 330 | }, 331 | "id": "FG8Gq_KebTSf", 332 | "outputId": "a382e54d-57c7-4df1-dffc-fd229f1c6312" 333 | }, 334 | "source": [ 335 | "X.columns" 336 | ], 337 | "execution_count": 48, 338 | "outputs": [ 339 | { 340 | "output_type": "execute_result", 341 | "data": { 342 | "text/plain": [ 343 | "Index(['housing_median_age', 'total_rooms', 'total_bedrooms', 'population',\n", 344 | " 'households', 'median_income'],\n", 345 | " dtype='object')" 346 | ] 347 | }, 348 | "metadata": { 349 | "tags": [] 350 | }, 351 | "execution_count": 48 352 | } 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "metadata": { 358 | "id": "AvYKGRmqbVBk" 359 | }, 360 | "source": [ 361 | "X_train_scaled = scaler.fit_transform(X_train)\n", 362 | "X_test_scaled = scaler.transform(X_test)" 363 | ], 364 | "execution_count": 49, 365 | "outputs": [] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "metadata": { 370 | "id": "bK2Z3l1Tbesq" 371 | }, 372 | "source": [ 373 | "from sklearn.linear_model import LinearRegression" 374 | ], 375 | "execution_count": 50, 376 | "outputs": [] 377 | }, 378 | { 379 | "cell_type": "code", 380 | "metadata": { 381 | "id": "hjoeAeCtb5Zy" 382 | }, 383 | "source": [ 384 | "model = LinearRegression()" 385 | ], 386 | "execution_count": 51, 387 | "outputs": [] 388 | }, 389 | { 390 | "cell_type": "code", 391 | "metadata": { 392 | "colab": { 393 | "base_uri": "https://localhost:8080/" 394 | }, 395 | "id": "m2d81Unpb8CB", 396 | "outputId": "68148e27-3f37-4960-f427-243f7bc4d66e" 397 | }, 398 | "source": [ 399 | "model.fit(X_train_scaled, y_train)" 400 | ], 401 | "execution_count": 52, 402 | "outputs": [ 403 | { 404 | "output_type": "execute_result", 405 | "data": { 406 | "text/plain": [ 407 | "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" 408 | ] 409 | }, 410 | "metadata": { 411 | "tags": [] 412 | }, 413 | "execution_count": 52 414 | } 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "metadata": { 420 | "id": "NW1EF2Tmb_o1" 421 | }, 422 | "source": [ 423 | "yp = model.predict(X_test_scaled)" 424 | ], 425 | "execution_count": 53, 426 | "outputs": [] 427 | }, 428 | { 429 | "cell_type": "code", 430 | "metadata": { 431 | "id": "pQXe8RV_cD-Q" 432 | }, 433 | "source": [ 434 | "from sklearn.metrics import mean_squared_error as mse" 435 | ], 436 | "execution_count": 54, 437 | "outputs": [] 438 | }, 439 | { 440 | "cell_type": "code", 441 | "metadata": { 442 | "id": "skZ68UJvcKj2" 443 | }, 444 | "source": [ 445 | "rmse = np.sqrt(mse(y_test,yp))" 446 | ], 447 | "execution_count": 55, 448 | "outputs": [] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "metadata": { 453 | "colab": { 454 | "base_uri": "https://localhost:8080/" 455 | }, 456 | "id": "Si5oB-N8cRj3", 457 | "outputId": "a82350f3-c6ac-4c66-abf3-03768b7a5803" 458 | }, 459 | "source": [ 460 | "rmse*100/np.mean(y_test)" 461 | ], 462 | "execution_count": 56, 463 | "outputs": [ 464 | { 465 | "output_type": "execute_result", 466 | "data": { 467 | "text/plain": [ 468 | "35.60010349954132" 469 | ] 470 | }, 471 | "metadata": { 472 | "tags": [] 473 | }, 474 | "execution_count": 56 475 | } 476 | ] 477 | }, 478 | { 479 | "cell_type": "code", 480 | "metadata": { 481 | "colab": { 482 | "base_uri": "https://localhost:8080/" 483 | }, 484 | "id": "89DGScSbcmPF", 485 | "outputId": "efa36e50-9fac-4e72-a650-95c7200590fe" 486 | }, 487 | "source": [ 488 | "X_test.columns" 489 | ], 490 | "execution_count": 57, 491 | "outputs": [ 492 | { 493 | "output_type": "execute_result", 494 | "data": { 495 | "text/plain": [ 496 | "Index(['housing_median_age', 'total_rooms', 'total_bedrooms', 'population',\n", 497 | " 'households', 'median_income'],\n", 498 | " dtype='object')" 499 | ] 500 | }, 501 | "metadata": { 502 | "tags": [] 503 | }, 504 | "execution_count": 57 505 | } 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "metadata": { 511 | "colab": { 512 | "base_uri": "https://localhost:8080/" 513 | }, 514 | "id": "9BVt9GVwcwR-", 515 | "outputId": "0b4fd0ab-ae4c-493f-ad61-e862beea9c0b" 516 | }, 517 | "source": [ 518 | "model.predict([X_test_scaled[0,:]])" 519 | ], 520 | "execution_count": 62, 521 | "outputs": [ 522 | { 523 | "output_type": "execute_result", 524 | "data": { 525 | "text/plain": [ 526 | "array([279531.19427309])" 527 | ] 528 | }, 529 | "metadata": { 530 | "tags": [] 531 | }, 532 | "execution_count": 62 533 | } 534 | ] 535 | }, 536 | { 537 | "cell_type": "markdown", 538 | "metadata": { 539 | "id": "_ZXy6c5IhmlK" 540 | }, 541 | "source": [ 542 | "## Central Function is to be defined based on which code becomes production ready." 543 | ] 544 | }, 545 | { 546 | "cell_type": "code", 547 | "metadata": { 548 | "id": "HCkp2L0-cSSn" 549 | }, 550 | "source": [ 551 | "def housepricer(median_age, total_rooms_in_locality, total_bedrooms, population, households, median_income):\n", 552 | "\n", 553 | " '''\n", 554 | " housing_median_age 28.589353\n", 555 | "total_rooms 2643.664412\n", 556 | "total_bedrooms 539.410824\n", 557 | "population 1429.573941\n", 558 | "households 501.221941\n", 559 | "median_income 3.883578\n", 560 | "median_house_value 207300.912353\n", 561 | " '''\n", 562 | "\n", 563 | " X_new = [np.array([median_age, total_rooms_in_locality, total_bedrooms, population, households, median_income])]\n", 564 | "\n", 565 | " X_new_scaled = scaler.transform(X_new)\n", 566 | "\n", 567 | " yp_new = model.predict(X_new_scaled)\n", 568 | "\n", 569 | " P = np.round(yp_new[0],2)\n", 570 | "\n", 571 | " out = f'Median House Value = {P} USD'\n", 572 | "\n", 573 | " return out\n", 574 | "\n" 575 | ], 576 | "execution_count": 79, 577 | "outputs": [] 578 | }, 579 | { 580 | "cell_type": "markdown", 581 | "metadata": { 582 | "id": "kNpNYuImhsqb" 583 | }, 584 | "source": [ 585 | "# Finally, run the app Interface." 586 | ] 587 | }, 588 | { 589 | "cell_type": "code", 590 | "metadata": { 591 | "colab": { 592 | "base_uri": "https://localhost:8080/", 593 | "height": 883 594 | }, 595 | "id": "mrQsfxTCdVQb", 596 | "outputId": "69a1aea6-bf29-47ea-c0db-6aa8af627fe5" 597 | }, 598 | "source": [ 599 | "gr.Interface(fn=housepricer, inputs=[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"], outputs=\"text\" , title='House Price Predictor').launch(debug=True)" 600 | ], 601 | "execution_count": 80, 602 | "outputs": [ 603 | { 604 | "output_type": "stream", 605 | "text": [ 606 | "Colab notebook detected. This cell will run indefinitely so that you can see errors and logs. To turn off, set debug=False in launch().\n", 607 | "This share link will expire in 24 hours. If you need a permanent link, visit: https://gradio.app/introducing-hosted (NEW!)\n", 608 | "Running on External URL: https://39494.gradio.app\n", 609 | "Interface loading below...\n" 610 | ], 611 | "name": "stdout" 612 | }, 613 | { 614 | "output_type": "display_data", 615 | "data": { 616 | "text/html": [ 617 | "\n", 618 | " \n", 625 | " " 626 | ], 627 | "text/plain": [ 628 | "" 629 | ] 630 | }, 631 | "metadata": { 632 | "tags": [] 633 | } 634 | }, 635 | { 636 | "output_type": "error", 637 | "ename": "KeyboardInterrupt", 638 | "evalue": "ignored", 639 | "traceback": [ 640 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 641 | "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", 642 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInterface\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhousepricer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"number\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"text\"\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'House Price Predictor'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlaunch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 643 | "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/gradio/interface.py\u001b[0m in \u001b[0;36mlaunch\u001b[0;34m(self, inline, inbrowser, share, debug, auth, auth_message, private_endpoint, prevent_thread_lock)\u001b[0m\n\u001b[1;32m 540\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 541\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstdout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 542\u001b[0;31m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.1\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 543\u001b[0m \u001b[0mis_in_interactive_mode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbool\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'ps1'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflags\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minteractive\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 544\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mprevent_thread_lock\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_in_interactive_mode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 644 | "\u001b[0;31mKeyboardInterrupt\u001b[0m: " 645 | ] 646 | } 647 | ] 648 | }, 649 | { 650 | "cell_type": "code", 651 | "metadata": { 652 | "id": "0tKZKhShdYL4" 653 | }, 654 | "source": [ 655 | "" 656 | ], 657 | "execution_count": 80, 658 | "outputs": [] 659 | }, 660 | { 661 | "cell_type": "code", 662 | "metadata": { 663 | "id": "pqqQUBDGdaJ2" 664 | }, 665 | "source": [ 666 | "" 667 | ], 668 | "execution_count": 80, 669 | "outputs": [] 670 | }, 671 | { 672 | "cell_type": "code", 673 | "metadata": { 674 | "id": "nyEFT7gydtr6" 675 | }, 676 | "source": [ 677 | "" 678 | ], 679 | "execution_count": null, 680 | "outputs": [] 681 | } 682 | ] 683 | } -------------------------------------------------------------------------------- /ModelValidation_&_CrossValidation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "ModelValidation & CrossValidation.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyMDt0vaerCP3T/pbeb01DWL", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "--WDLnK6b93M" 31 | }, 32 | "source": [ 33 | "# Understanding Model Validation" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "metadata": { 39 | "id": "L3g5YZXRZi6s" 40 | }, 41 | "source": [ 42 | "import numpy as np\r\n", 43 | "import pandas as pd\r\n", 44 | "import seaborn as sns\r\n", 45 | "import matplotlib.pyplot as plt" 46 | ], 47 | "execution_count": 1, 48 | "outputs": [] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "metadata": { 53 | "id": "xlK9sUwDZzBh" 54 | }, 55 | "source": [ 56 | "from sklearn.datasets import load_iris\r\n", 57 | "\r\n", 58 | "iris = load_iris()" 59 | ], 60 | "execution_count": 2, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "NzNzitVdaO2T" 67 | }, 68 | "source": [ 69 | "X = iris.data\r\n", 70 | "y = iris.target\r\n", 71 | "Xcols = iris.feature_names" 72 | ], 73 | "execution_count": 5, 74 | "outputs": [] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "metadata": { 79 | "id": "R0YyGcDJaVdo" 80 | }, 81 | "source": [ 82 | "df = pd.DataFrame(data = X, columns=Xcols)\r\n", 83 | "df['Species'] = y" 84 | ], 85 | "execution_count": 10, 86 | "outputs": [] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": { 91 | "id": "FW5qy2P3bIJ7" 92 | }, 93 | "source": [ 94 | "# 1. K-Nearest Neighbors : 5 Fold Cross Validation" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "metadata": { 100 | "id": "BuFiB9GhaWIQ" 101 | }, 102 | "source": [ 103 | "from sklearn.neighbors import KNeighborsClassifier" 104 | ], 105 | "execution_count": 14, 106 | "outputs": [] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "metadata": { 111 | "id": "yyCg4i5ja6JQ" 112 | }, 113 | "source": [ 114 | "knn = KNeighborsClassifier(n_neighbors=5)" 115 | ], 116 | "execution_count": 15, 117 | "outputs": [] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": { 122 | "id": "a1CM9R59b53t" 123 | }, 124 | "source": [ 125 | "### Train-Test Split\r\n", 126 | "\r\n", 127 | "> This method validates the Model based on a chunk of the Data that it has never seen (Test Data)." 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "metadata": { 133 | "id": "EU64TuFibqre" 134 | }, 135 | "source": [ 136 | "from sklearn.model_selection import train_test_split" 137 | ], 138 | "execution_count": 16, 139 | "outputs": [] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "metadata": { 144 | "id": "e9DlCHTjcfhw" 145 | }, 146 | "source": [ 147 | "X1,X2,y1,y2 = train_test_split(X,y,train_size=0.5)" 148 | ], 149 | "execution_count": 18, 150 | "outputs": [] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "metadata": { 155 | "colab": { 156 | "base_uri": "https://localhost:8080/" 157 | }, 158 | "id": "3He9_yg1dmlU", 159 | "outputId": "1758385c-d0b7-4e69-aa82-53c968dc5cff" 160 | }, 161 | "source": [ 162 | "knn.fit(X1,y1)" 163 | ], 164 | "execution_count": 20, 165 | "outputs": [ 166 | { 167 | "output_type": "execute_result", 168 | "data": { 169 | "text/plain": [ 170 | "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", 171 | " metric_params=None, n_jobs=None, n_neighbors=5, p=2,\n", 172 | " weights='uniform')" 173 | ] 174 | }, 175 | "metadata": { 176 | "tags": [] 177 | }, 178 | "execution_count": 20 179 | } 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "colab": { 186 | "base_uri": "https://localhost:8080/" 187 | }, 188 | "id": "k1nKaT4He53t", 189 | "outputId": "a128e1f7-be4f-4b62-98c2-b4a95c66916c" 190 | }, 191 | "source": [ 192 | "from sklearn.metrics import accuracy_score\r\n", 193 | "yp2 = knn.predict(X2)\r\n", 194 | "\r\n", 195 | "accu = accuracy_score(yp2,y2)\r\n", 196 | "\r\n", 197 | "accu" 198 | ], 199 | "execution_count": 22, 200 | "outputs": [ 201 | { 202 | "output_type": "execute_result", 203 | "data": { 204 | "text/plain": [ 205 | "0.96" 206 | ] 207 | }, 208 | "metadata": { 209 | "tags": [] 210 | }, 211 | "execution_count": 22 212 | } 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": { 218 | "id": "UPbilxY7fSkt" 219 | }, 220 | "source": [ 221 | "## Cross Validation \r\n", 222 | "\r\n", 223 | "> This methodology splits the data into various chunks, and then keeps one chunk for testing, and other (rest) for training. \r\n", 224 | "\r\n", 225 | "> Final score is the average of all such splits." 226 | ] 227 | }, 228 | { 229 | "cell_type": "markdown", 230 | "metadata": { 231 | "id": "RNG3hoomf1oy" 232 | }, 233 | "source": [ 234 | "A) Cross-Validation from Scratch." 235 | ] 236 | }, 237 | { 238 | "cell_type": "markdown", 239 | "metadata": { 240 | "id": "t88TAES7hKTM" 241 | }, 242 | "source": [ 243 | "> 2-Fold Cross Validation" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "metadata": { 249 | "colab": { 250 | "base_uri": "https://localhost:8080/" 251 | }, 252 | "id": "YegpF_dWfPIh", 253 | "outputId": "1e5ca8ef-1768-43ed-e366-69b56ac9a11d" 254 | }, 255 | "source": [ 256 | "model = KNeighborsClassifier(n_neighbors=5)\r\n", 257 | "X1,X2,y1,y2 = train_test_split(X,y,train_size=0.5)\r\n", 258 | "\r\n", 259 | "#Model 1 : Train on X1,y1 and Test on X2,y2\r\n", 260 | "model.fit(X1,y1)\r\n", 261 | "yp2 = model.predict(X2)\r\n", 262 | "acc2 = accuracy_score(yp2,y2)\r\n", 263 | "\r\n", 264 | "#Model 2 : Train on X2,y2 and Test on X1,y1\r\n", 265 | "model.fit(X2,y2)\r\n", 266 | "yp1 = model.predict(X1)\r\n", 267 | "acc1 = accuracy_score(yp1,y1)\r\n", 268 | "\r\n", 269 | "#Scores List\r\n", 270 | "scores = [acc2,acc1]\r\n", 271 | "\r\n", 272 | "#Final Score : Cross-Val Score : A more representative model performance (Accuracy)\r\n", 273 | "cv_score = np.mean(scores)\r\n", 274 | "\r\n", 275 | "cv_score" 276 | ], 277 | "execution_count": 24, 278 | "outputs": [ 279 | { 280 | "output_type": "execute_result", 281 | "data": { 282 | "text/plain": [ 283 | "0.9733333333333334" 284 | ] 285 | }, 286 | "metadata": { 287 | "tags": [] 288 | }, 289 | "execution_count": 24 290 | } 291 | ] 292 | }, 293 | { 294 | "cell_type": "markdown", 295 | "metadata": { 296 | "id": "S0FBY_vmg-9Q" 297 | }, 298 | "source": [ 299 | "We can Clearly see that there is a Differnce between this accuracy measure and the previously evaluated measure. We trust this one more. " 300 | ] 301 | }, 302 | { 303 | "cell_type": "markdown", 304 | "metadata": { 305 | "id": "oDCYIECShNOd" 306 | }, 307 | "source": [ 308 | "B) 5-Fold Cross-Validation using Sk-learn" 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "metadata": { 314 | "id": "cpipGdKDg7Gi" 315 | }, 316 | "source": [ 317 | "from sklearn.model_selection import cross_val_score" 318 | ], 319 | "execution_count": 25, 320 | "outputs": [] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "metadata": { 325 | "colab": { 326 | "base_uri": "https://localhost:8080/" 327 | }, 328 | "id": "xW0w8iHYhXEa", 329 | "outputId": "76d58c43-be4e-4c55-c886-32115e07ae03" 330 | }, 331 | "source": [ 332 | "model = KNeighborsClassifier(n_neighbors=5)\r\n", 333 | "scores_cv = cross_val_score(estimator=model,X=X,y=y,cv=5)\r\n", 334 | "scores_cv" 335 | ], 336 | "execution_count": 26, 337 | "outputs": [ 338 | { 339 | "output_type": "execute_result", 340 | "data": { 341 | "text/plain": [ 342 | "array([0.96666667, 1. , 0.93333333, 0.96666667, 1. ])" 343 | ] 344 | }, 345 | "metadata": { 346 | "tags": [] 347 | }, 348 | "execution_count": 26 349 | } 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "metadata": { 355 | "id": "hgTNgTYCh5ML" 356 | }, 357 | "source": [ 358 | "final_accuracy = np.mean(scores_cv)" 359 | ], 360 | "execution_count": 27, 361 | "outputs": [] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "metadata": { 366 | "colab": { 367 | "base_uri": "https://localhost:8080/" 368 | }, 369 | "id": "F78jEpR2h8qR", 370 | "outputId": "3d6f89f8-b8d8-4afc-cf09-e68877c3da67" 371 | }, 372 | "source": [ 373 | "final_accuracy" 374 | ], 375 | "execution_count": 28, 376 | "outputs": [ 377 | { 378 | "output_type": "execute_result", 379 | "data": { 380 | "text/plain": [ 381 | "0.9733333333333334" 382 | ] 383 | }, 384 | "metadata": { 385 | "tags": [] 386 | }, 387 | "execution_count": 28 388 | } 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "metadata": { 394 | "id": "P95B0yMLh-je" 395 | }, 396 | "source": [ 397 | "#97.3% is the actual model Accuracy. " 398 | ], 399 | "execution_count": 29, 400 | "outputs": [] 401 | }, 402 | { 403 | "cell_type": "markdown", 404 | "metadata": { 405 | "id": "13qZzapjiGTx" 406 | }, 407 | "source": [ 408 | "# 2. RandomForest Classifier" 409 | ] 410 | }, 411 | { 412 | "cell_type": "code", 413 | "metadata": { 414 | "id": "ZZrZsHcziDdx" 415 | }, 416 | "source": [ 417 | "from sklearn.ensemble import RandomForestClassifier" 418 | ], 419 | "execution_count": 30, 420 | "outputs": [] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "metadata": { 425 | "colab": { 426 | "base_uri": "https://localhost:8080/" 427 | }, 428 | "id": "fvcE-LHgiO7A", 429 | "outputId": "f6f8f345-5a39-4356-89e2-6ae5ac225dad" 430 | }, 431 | "source": [ 432 | "forest = RandomForestClassifier()\r\n", 433 | "forest_cvscores = cross_val_score(forest,X,y,cv=5)\r\n", 434 | "\r\n", 435 | "forest_cvscores" 436 | ], 437 | "execution_count": 39, 438 | "outputs": [ 439 | { 440 | "output_type": "execute_result", 441 | "data": { 442 | "text/plain": [ 443 | "array([0.96666667, 0.96666667, 0.93333333, 0.96666667, 1. ])" 444 | ] 445 | }, 446 | "metadata": { 447 | "tags": [] 448 | }, 449 | "execution_count": 39 450 | } 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "metadata": { 456 | "colab": { 457 | "base_uri": "https://localhost:8080/" 458 | }, 459 | "id": "w0upSxfWieRn", 460 | "outputId": "fdd896e8-ee56-4259-a325-d797e4fe6368" 461 | }, 462 | "source": [ 463 | "np.mean(forest_cvscores)" 464 | ], 465 | "execution_count": 40, 466 | "outputs": [ 467 | { 468 | "output_type": "execute_result", 469 | "data": { 470 | "text/plain": [ 471 | "0.9666666666666668" 472 | ] 473 | }, 474 | "metadata": { 475 | "tags": [] 476 | }, 477 | "execution_count": 40 478 | } 479 | ] 480 | }, 481 | { 482 | "cell_type": "markdown", 483 | "metadata": { 484 | "id": "G3rGsDmEiy-p" 485 | }, 486 | "source": [ 487 | "# 3. Gaussian Naive Bayes" 488 | ] 489 | }, 490 | { 491 | "cell_type": "code", 492 | "metadata": { 493 | "colab": { 494 | "base_uri": "https://localhost:8080/" 495 | }, 496 | "id": "28v_IHJZihQu", 497 | "outputId": "f7d4e0ee-5471-4b66-94b3-edb1536218d5" 498 | }, 499 | "source": [ 500 | "from sklearn.naive_bayes import GaussianNB\r\n", 501 | "gnb = GaussianNB()\r\n", 502 | "cvscores_gnb = cross_val_score(gnb,X,y,cv=5)\r\n", 503 | "np.mean(cvscores_gnb)" 504 | ], 505 | "execution_count": 41, 506 | "outputs": [ 507 | { 508 | "output_type": "execute_result", 509 | "data": { 510 | "text/plain": [ 511 | "0.9533333333333334" 512 | ] 513 | }, 514 | "metadata": { 515 | "tags": [] 516 | }, 517 | "execution_count": 41 518 | } 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "metadata": { 524 | "id": "nP7mPPRRjPY-" 525 | }, 526 | "source": [ 527 | "" 528 | ], 529 | "execution_count": 44, 530 | "outputs": [] 531 | }, 532 | { 533 | "cell_type": "code", 534 | "metadata": { 535 | "id": "mnxN94iijVHE" 536 | }, 537 | "source": [ 538 | "" 539 | ], 540 | "execution_count": null, 541 | "outputs": [] 542 | } 543 | ] 544 | } -------------------------------------------------------------------------------- /Model_Selection_&_HyperParameter_Tuning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Model Selection & HyperParameter Tuning.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyP+aA3vsymW+gd2FUlItLAW", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "id": "view-in-github", 21 | "colab_type": "text" 22 | }, 23 | "source": [ 24 | "\"Open" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "3zenZjkUW8OK" 31 | }, 32 | "source": [ 33 | "# Model Selection & HyperParameter Tuning\r\n", 34 | "\r\n", 35 | "> ### 1. GridSearchCV\r\n", 36 | "> ### 2. Randomized Search CV" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "metadata": { 42 | "id": "pUvSMONEWytY" 43 | }, 44 | "source": [ 45 | "import numpy as np\r\n", 46 | "import pandas as pd\r\n", 47 | "import seaborn as sns\r\n", 48 | "import matplotlib.pyplot as plt" 49 | ], 50 | "execution_count": 1, 51 | "outputs": [] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "metadata": { 56 | "id": "gltJUK1TXP-p" 57 | }, 58 | "source": [ 59 | "from sklearn.datasets import load_iris\r\n", 60 | "\r\n", 61 | "iris = load_iris()\r\n", 62 | "X = iris.data\r\n", 63 | "y = iris.target" 64 | ], 65 | "execution_count": 2, 66 | "outputs": [] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "metadata": { 71 | "id": "4fAZUeKjXpQr" 72 | }, 73 | "source": [ 74 | "#Optional\r\n", 75 | "df = pd.DataFrame(data=X,columns=iris.feature_names)\r\n", 76 | "df['Species'] = y\r\n", 77 | "# df.head()\r\n", 78 | "namer = lambda x : iris.target_names[x]\r\n", 79 | "df['Species'] = df['Species'].apply(namer)" 80 | ], 81 | "execution_count": 7, 82 | "outputs": [] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "metadata": { 87 | "colab": { 88 | "base_uri": "https://localhost:8080/", 89 | "height": 195 90 | }, 91 | "id": "5CVpcGvSXqIt", 92 | "outputId": "1c368add-ec6f-4818-c67c-65dc48863d81" 93 | }, 94 | "source": [ 95 | "df.head()" 96 | ], 97 | "execution_count": 8, 98 | "outputs": [ 99 | { 100 | "output_type": "execute_result", 101 | "data": { 102 | "text/html": [ 103 | "
\n", 104 | "\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 | "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)Species
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", 171 | "
" 172 | ], 173 | "text/plain": [ 174 | " sepal length (cm) sepal width (cm) ... petal width (cm) Species\n", 175 | "0 5.1 3.5 ... 0.2 setosa\n", 176 | "1 4.9 3.0 ... 0.2 setosa\n", 177 | "2 4.7 3.2 ... 0.2 setosa\n", 178 | "3 4.6 3.1 ... 0.2 setosa\n", 179 | "4 5.0 3.6 ... 0.2 setosa\n", 180 | "\n", 181 | "[5 rows x 5 columns]" 182 | ] 183 | }, 184 | "metadata": { 185 | "tags": [] 186 | }, 187 | "execution_count": 8 188 | } 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "metadata": { 194 | "id": "7Quwowz-YFgW" 195 | }, 196 | "source": [ 197 | "from sklearn.model_selection import GridSearchCV" 198 | ], 199 | "execution_count": 9, 200 | "outputs": [] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "metadata": { 205 | "id": "3zKLYYuwYZul" 206 | }, 207 | "source": [ 208 | "from sklearn.svm import SVC\r\n", 209 | "from sklearn.ensemble import RandomForestClassifier\r\n", 210 | "from sklearn.naive_bayes import GaussianNB" 211 | ], 212 | "execution_count": 10, 213 | "outputs": [] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "metadata": { 218 | "colab": { 219 | "base_uri": "https://localhost:8080/" 220 | }, 221 | "id": "-GRS35ufYVf1", 222 | "outputId": "af5e8e8a-e737-4312-c880-4719b243396b" 223 | }, 224 | "source": [ 225 | "#Instantiate a Grid-Search Object\r\n", 226 | "grid = GridSearchCV(SVC(gamma='auto'),\r\n", 227 | " {'C':np.linspace(1,30),\r\n", 228 | " 'kernel':['rbf','linear']},\r\n", 229 | " cv=5,return_train_score=False)\r\n", 230 | "\r\n", 231 | "#Fit the Grid-Search object to data. \r\n", 232 | "grid.fit(X,y)\r\n", 233 | "grid.best_params_" 234 | ], 235 | "execution_count": 17, 236 | "outputs": [ 237 | { 238 | "output_type": "execute_result", 239 | "data": { 240 | "text/plain": [ 241 | "{'C': 1.5918367346938775, 'kernel': 'rbf'}" 242 | ] 243 | }, 244 | "metadata": { 245 | "tags": [] 246 | }, 247 | "execution_count": 17 248 | } 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "metadata": { 254 | "colab": { 255 | "base_uri": "https://localhost:8080/", 256 | "height": 195 257 | }, 258 | "id": "i5DSvYTvZqvt", 259 | "outputId": "4db5a871-776b-4147-f727-e856c0ea602f" 260 | }, 261 | "source": [ 262 | "grid_results = pd.DataFrame(grid.cv_results_)\r\n", 263 | "grid_results = grid_results[['param_C','param_kernel','mean_test_score']]\r\n", 264 | "grid_results.head()" 265 | ], 266 | "execution_count": 21, 267 | "outputs": [ 268 | { 269 | "output_type": "execute_result", 270 | "data": { 271 | "text/html": [ 272 | "
\n", 273 | "\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 | "
param_Cparam_kernelmean_test_score
01rbf0.980000
11linear0.980000
21.59184rbf0.986667
31.59184linear0.986667
42.18367rbf0.980000
\n", 328 | "
" 329 | ], 330 | "text/plain": [ 331 | " param_C param_kernel mean_test_score\n", 332 | "0 1 rbf 0.980000\n", 333 | "1 1 linear 0.980000\n", 334 | "2 1.59184 rbf 0.986667\n", 335 | "3 1.59184 linear 0.986667\n", 336 | "4 2.18367 rbf 0.980000" 337 | ] 338 | }, 339 | "metadata": { 340 | "tags": [] 341 | }, 342 | "execution_count": 21 343 | } 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "metadata": { 349 | "colab": { 350 | "base_uri": "https://localhost:8080/" 351 | }, 352 | "id": "3ozp-cKrZ3Zb", 353 | "outputId": "8008ef54-c3c6-4547-c128-6866d417c4f7" 354 | }, 355 | "source": [ 356 | "max(grid_results['mean_test_score'])" 357 | ], 358 | "execution_count": 22, 359 | "outputs": [ 360 | { 361 | "output_type": "execute_result", 362 | "data": { 363 | "text/plain": [ 364 | "0.9866666666666667" 365 | ] 366 | }, 367 | "metadata": { 368 | "tags": [] 369 | }, 370 | "execution_count": 22 371 | } 372 | ] 373 | }, 374 | { 375 | "cell_type": "markdown", 376 | "metadata": { 377 | "id": "5rCjtjRkbX49" 378 | }, 379 | "source": [ 380 | "# Selecting the best Model out of all the prospects " 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "metadata": { 386 | "id": "-cnz_lq9bCje" 387 | }, 388 | "source": [ 389 | "from sklearn import svm\r\n", 390 | "from sklearn.ensemble import RandomForestClassifier\r\n", 391 | "from sklearn.linear_model import LogisticRegression\r\n", 392 | "\r\n", 393 | "model_params = {\r\n", 394 | " 'svm': {\r\n", 395 | " 'model': svm.SVC(gamma='auto'),\r\n", 396 | " 'params' : {\r\n", 397 | " 'C': [1,10,20],\r\n", 398 | " 'kernel': ['rbf','linear']\r\n", 399 | " } \r\n", 400 | " },\r\n", 401 | " 'random_forest': {\r\n", 402 | " 'model': RandomForestClassifier(),\r\n", 403 | " 'params' : {\r\n", 404 | " 'n_estimators': [1,5,10]\r\n", 405 | " }\r\n", 406 | " },\r\n", 407 | " 'logistic_regression' : {\r\n", 408 | " 'model': LogisticRegression(solver='liblinear',multi_class='auto'),\r\n", 409 | " 'params': {\r\n", 410 | " 'C': [1,5,10]\r\n", 411 | " }\r\n", 412 | " }\r\n", 413 | "}" 414 | ], 415 | "execution_count": 23, 416 | "outputs": [] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "metadata": { 421 | "colab": { 422 | "base_uri": "https://localhost:8080/", 423 | "height": 136 424 | }, 425 | "id": "yHHYysdjbzoZ", 426 | "outputId": "730751a6-0c8d-4546-b7f6-9605881793c2" 427 | }, 428 | "source": [ 429 | "scores = []\r\n", 430 | "\r\n", 431 | "for model_name, mp in model_params.items():\r\n", 432 | " clf = GridSearchCV(mp['model'], mp['params'], cv=5, return_train_score=False)\r\n", 433 | " clf.fit(iris.data, iris.target)\r\n", 434 | " scores.append({\r\n", 435 | " 'model': model_name,\r\n", 436 | " 'best_score': clf.best_score_,\r\n", 437 | " 'best_params': clf.best_params_\r\n", 438 | " })\r\n", 439 | " \r\n", 440 | "modelDF = pd.DataFrame(scores,columns=['model','best_score','best_params'])\r\n", 441 | "modelDF" 442 | ], 443 | "execution_count": 24, 444 | "outputs": [ 445 | { 446 | "output_type": "execute_result", 447 | "data": { 448 | "text/html": [ 449 | "
\n", 450 | "\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 | "
modelbest_scorebest_params
0svm0.980000{'C': 1, 'kernel': 'rbf'}
1random_forest0.966667{'n_estimators': 1}
2logistic_regression0.966667{'C': 5}
\n", 493 | "
" 494 | ], 495 | "text/plain": [ 496 | " model best_score best_params\n", 497 | "0 svm 0.980000 {'C': 1, 'kernel': 'rbf'}\n", 498 | "1 random_forest 0.966667 {'n_estimators': 1}\n", 499 | "2 logistic_regression 0.966667 {'C': 5}" 500 | ] 501 | }, 502 | "metadata": { 503 | "tags": [] 504 | }, 505 | "execution_count": 24 506 | } 507 | ] 508 | }, 509 | { 510 | "cell_type": "code", 511 | "metadata": { 512 | "id": "HX8MPyY-cjB9" 513 | }, 514 | "source": [ 515 | "" 516 | ], 517 | "execution_count": null, 518 | "outputs": [] 519 | } 520 | ] 521 | } -------------------------------------------------------------------------------- /OOP_for_ML.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "OOP for ML.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyPL5TktyjQDEFOnhOdmtCUn" 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "code", 21 | "metadata": { 22 | "id": "MqOtKyjyVoCN" 23 | }, 24 | "source": [ 25 | "import pandas as pd" 26 | ], 27 | "execution_count": null, 28 | "outputs": [] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "metadata": { 33 | "id": "Uu2MQuClV5Hl" 34 | }, 35 | "source": [ 36 | "traincsv = '/content/sample_data/california_housing_train.csv'\n", 37 | "\n", 38 | "testcsv = '/content/sample_data/california_housing_test.csv'" 39 | ], 40 | "execution_count": null, 41 | "outputs": [] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": { 46 | "id": "DtsRo3cy2d4O" 47 | }, 48 | "source": [ 49 | "### Update 0 : Getting comfortable/Revision of OOP." 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "metadata": { 55 | "id": "vx-IFSqtXRpa" 56 | }, 57 | "source": [ 58 | "class Model:\n", 59 | "\n", 60 | " def __init__(self , datafile):\n", 61 | " self.df = pd.read_csv(datafile)" 62 | ], 63 | "execution_count": null, 64 | "outputs": [] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "metadata": { 69 | "id": "6Qxt0VYZXfPf" 70 | }, 71 | "source": [ 72 | "m_trn = Model(traincsv)\n", 73 | "df_trn = m_trn.df" 74 | ], 75 | "execution_count": null, 76 | "outputs": [] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "metadata": { 81 | "id": "tlW2MTVaXjDs" 82 | }, 83 | "source": [ 84 | "m_tst = Model(testcsv)\n", 85 | "df_tst = m_tst.df" 86 | ], 87 | "execution_count": null, 88 | "outputs": [] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "metadata": { 93 | "colab": { 94 | "base_uri": "https://localhost:8080/", 95 | "height": 130 96 | }, 97 | "id": "eY3WvvUuXnRn", 98 | "outputId": "4aa8d521-45fa-4126-9f09-4a3b1fe39fe7" 99 | }, 100 | "source": [ 101 | "df_trn.head(2)" 102 | ], 103 | "execution_count": null, 104 | "outputs": [ 105 | { 106 | "output_type": "execute_result", 107 | "data": { 108 | "text/html": [ 109 | "
\n", 110 | "\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 | "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
0-114.3134.1915.05612.01283.01015.0472.01.493666900.0
1-114.4734.4019.07650.01901.01129.0463.01.820080100.0
\n", 165 | "
" 166 | ], 167 | "text/plain": [ 168 | " longitude latitude ... median_income median_house_value\n", 169 | "0 -114.31 34.19 ... 1.4936 66900.0\n", 170 | "1 -114.47 34.40 ... 1.8200 80100.0\n", 171 | "\n", 172 | "[2 rows x 9 columns]" 173 | ] 174 | }, 175 | "metadata": { 176 | "tags": [] 177 | }, 178 | "execution_count": 12 179 | } 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "colab": { 186 | "base_uri": "https://localhost:8080/", 187 | "height": 130 188 | }, 189 | "id": "TCiAaxd6XrFx", 190 | "outputId": "dd64c3f7-9070-407d-ec36-f80a1de780d8" 191 | }, 192 | "source": [ 193 | "df_tst.head(2)" 194 | ], 195 | "execution_count": null, 196 | "outputs": [ 197 | { 198 | "output_type": "execute_result", 199 | "data": { 200 | "text/html": [ 201 | "
\n", 202 | "\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 | "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_value
0-122.0537.3727.03885.0661.01537.0606.06.6085344700.0
1-118.3034.2643.01510.0310.0809.0277.03.5990176500.0
\n", 257 | "
" 258 | ], 259 | "text/plain": [ 260 | " longitude latitude ... median_income median_house_value\n", 261 | "0 -122.05 37.37 ... 6.6085 344700.0\n", 262 | "1 -118.30 34.26 ... 3.5990 176500.0\n", 263 | "\n", 264 | "[2 rows x 9 columns]" 265 | ] 266 | }, 267 | "metadata": { 268 | "tags": [] 269 | }, 270 | "execution_count": 13 271 | } 272 | ] 273 | }, 274 | { 275 | "cell_type": "markdown", 276 | "metadata": { 277 | "id": "XRlXwQ6jaCbU" 278 | }, 279 | "source": [ 280 | "## Update 1 : LinearRegression utility." 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "metadata": { 286 | "id": "s3Rvpl3oZIlL" 287 | }, 288 | "source": [ 289 | "class Model:\n", 290 | "\n", 291 | " def __init__(self , datafile = traincsv):\n", 292 | " self.df = pd.read_csv(datafile)\n", 293 | " self.linear_reg = LinearRegression()" 294 | ], 295 | "execution_count": null, 296 | "outputs": [] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "metadata": { 301 | "id": "oosce7oraJk-" 302 | }, 303 | "source": [ 304 | "from sklearn.linear_model import LinearRegression\n", 305 | "m = Model()\n", 306 | "tr = m.df\n", 307 | "lr = m.linear_reg" 308 | ], 309 | "execution_count": null, 310 | "outputs": [] 311 | }, 312 | { 313 | "cell_type": "markdown", 314 | "metadata": { 315 | "id": "6blm5IjPupbx" 316 | }, 317 | "source": [ 318 | "## Update 2 : Train-Test-Split utility" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "metadata": { 324 | "id": "oWz-8QBUvE-j" 325 | }, 326 | "source": [ 327 | "from sklearn.model_selection import train_test_split\n", 328 | "import numpy as np" 329 | ], 330 | "execution_count": null, 331 | "outputs": [] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "metadata": { 336 | "id": "JY51ux5vaR6l" 337 | }, 338 | "source": [ 339 | "class Model:\n", 340 | "\n", 341 | " def __init__(self , datafile = traincsv):\n", 342 | " self.df = pd.read_csv(datafile)\n", 343 | " self.linear_reg = LinearRegression()\n", 344 | "\n", 345 | " def split(self, output_column ,test_fraction):\n", 346 | "\n", 347 | " X = np.array(self.df.drop(output_column, axis=1))\n", 348 | " y = np.array(self.df[output_column])\n", 349 | "\n", 350 | " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_fraction, random_state=42)\n", 351 | "\n", 352 | " return X_train, X_test, y_train, y_test\n", 353 | "\n" 354 | ], 355 | "execution_count": null, 356 | "outputs": [] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "metadata": { 361 | "id": "MdPv3Kv9atli" 362 | }, 363 | "source": [ 364 | "m = Model()\n", 365 | "\n", 366 | "df = m.df\n", 367 | "\n", 368 | "out= 'median_house_value'\n", 369 | "\n", 370 | "X_train, X_test, y_train, y_test = m.split(out, 0.2)" 371 | ], 372 | "execution_count": null, 373 | "outputs": [] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "metadata": { 378 | "colab": { 379 | "base_uri": "https://localhost:8080/" 380 | }, 381 | "id": "x2zGUa8CvpTq", 382 | "outputId": "33a7adc5-7f5b-4ea2-c288-9e7b4f87d2af" 383 | }, 384 | "source": [ 385 | "X_train.shape , y_train.shape" 386 | ], 387 | "execution_count": null, 388 | "outputs": [ 389 | { 390 | "output_type": "execute_result", 391 | "data": { 392 | "text/plain": [ 393 | "((13600, 8), (13600,))" 394 | ] 395 | }, 396 | "metadata": { 397 | "tags": [] 398 | }, 399 | "execution_count": 25 400 | } 401 | ] 402 | }, 403 | { 404 | "cell_type": "markdown", 405 | "metadata": { 406 | "id": "LvzfbQv7zTfu" 407 | }, 408 | "source": [ 409 | "## Update 3 : Fitting and Predicting Utilities. \n", 410 | "\n", 411 | "> Fitting on Training, Predicting on Testing." 412 | ] 413 | }, 414 | { 415 | "cell_type": "code", 416 | "metadata": { 417 | "id": "ZAKM_EyfzCKB" 418 | }, 419 | "source": [ 420 | "class Model:\n", 421 | "\n", 422 | " def __init__(self , datafile = traincsv):\n", 423 | " self.df = pd.read_csv(datafile)\n", 424 | " self.linear_reg = LinearRegression()\n", 425 | "\n", 426 | " def split(self, output_column ,test_fraction):\n", 427 | "\n", 428 | " X = np.array(self.df.drop(output_column, axis=1))\n", 429 | " y = np.array(self.df[output_column])\n", 430 | "\n", 431 | " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_fraction, random_state=42)\n", 432 | "\n", 433 | " # return X_train, X_test, y_train, y_test\n", 434 | "\n", 435 | " def fit(self):\n", 436 | " self.model = self.linear_reg.fit(X_train , y_train)\n", 437 | "\n", 438 | " def predict(self):\n", 439 | " yp = self.linear_reg.predict(X_test)\n", 440 | " return yp " 441 | ], 442 | "execution_count": null, 443 | "outputs": [] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "metadata": { 448 | "id": "389VJKNP0DG4" 449 | }, 450 | "source": [ 451 | "m = Model()\n", 452 | "m.split(out, 0.2)\n", 453 | "m.fit()\n", 454 | "yp = m.predict()" 455 | ], 456 | "execution_count": null, 457 | "outputs": [] 458 | }, 459 | { 460 | "cell_type": "markdown", 461 | "metadata": { 462 | "id": "7N2H1dtH1m3l" 463 | }, 464 | "source": [ 465 | "## Update 4 : Model Performance Utility" 466 | ] 467 | }, 468 | { 469 | "cell_type": "code", 470 | "metadata": { 471 | "id": "EFnjt6580O31" 472 | }, 473 | "source": [ 474 | "from sklearn.metrics import mean_squared_error as mse" 475 | ], 476 | "execution_count": null, 477 | "outputs": [] 478 | }, 479 | { 480 | "cell_type": "code", 481 | "metadata": { 482 | "id": "BrTm90-m0R67" 483 | }, 484 | "source": [ 485 | "class Model:\n", 486 | "\n", 487 | " def __init__(self , datafile = traincsv):\n", 488 | " self.df = pd.read_csv(datafile)\n", 489 | " self.linear_reg = LinearRegression()\n", 490 | "\n", 491 | " def split(self, output_column ,test_fraction):\n", 492 | "\n", 493 | " X = np.array(self.df.drop(output_column, axis=1))\n", 494 | " y = np.array(self.df[output_column])\n", 495 | "\n", 496 | " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_fraction, random_state=42)\n", 497 | "\n", 498 | " # return X_train, X_test, y_train, y_test\n", 499 | "\n", 500 | " def fit(self):\n", 501 | " self.model = self.linear_reg.fit(X_train , y_train)\n", 502 | "\n", 503 | " def predict(self):\n", 504 | " yp = self.linear_reg.predict(X_test)\n", 505 | " return yp \n", 506 | "\n", 507 | " def score(self):\n", 508 | " rmse = np.sqrt(mse(y_test , yp))\n", 509 | " return rmse" 510 | ], 511 | "execution_count": null, 512 | "outputs": [] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "metadata": { 517 | "colab": { 518 | "base_uri": "https://localhost:8080/" 519 | }, 520 | "id": "cskJ6n_y0ZPn", 521 | "outputId": "1e360512-e449-40d7-8dac-098a9a72290c" 522 | }, 523 | "source": [ 524 | "m = Model()\n", 525 | "m.split(out, 0.2)\n", 526 | "m.fit()\n", 527 | "yp = m.predict()\n", 528 | "\n", 529 | "print(f'The models error is : {m.score()}')" 530 | ], 531 | "execution_count": null, 532 | "outputs": [ 533 | { 534 | "output_type": "stream", 535 | "text": [ 536 | "The models error is : 68078.32552452666\n" 537 | ], 538 | "name": "stdout" 539 | } 540 | ] 541 | }, 542 | { 543 | "cell_type": "code", 544 | "metadata": { 545 | "id": "3TD7PM4n2KDV" 546 | }, 547 | "source": [ 548 | "" 549 | ], 550 | "execution_count": null, 551 | "outputs": [] 552 | } 553 | ] 554 | } -------------------------------------------------------------------------------- /Regression GUI.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Linear Regression GUI\n", 8 | "\n", 9 | "> Understanding ML the cool way \n", 10 | "\n", 11 | "> Divyanshu Vyas | Machine Learning" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "import numpy as np\n", 21 | "import matplotlib.pyplot as plt\n", 22 | "\n", 23 | "from ipywidgets import interact, interactive\n", 24 | "from IPython.display import clear_output, display, HTML" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 58, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "def linear(m,c):\n", 34 | " \n", 35 | " x = np.linspace(0,100,15)\n", 36 | " \n", 37 | " y = 2*x -40\n", 38 | " \n", 39 | " plt.style.use('default')\n", 40 | " \n", 41 | " plt.scatter(x,y,label='Actual Data',marker='*')\n", 42 | " \n", 43 | " yfit = m*x + c\n", 44 | " \n", 45 | " plt.plot(x,yfit,color='red',label='Linear Model',lw=3)\n", 46 | " \n", 47 | " plt.xlabel('X-Data')\n", 48 | " plt.ylabel('Y-Data')\n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " rmse = np.round(np.sqrt(np.mean((yfit-y)**2)))\n", 53 | " \n", 54 | " plt.title(f'LinearModel GUI\\nRMSE : {rmse}')\n", 55 | " \n", 56 | " plt.grid()\n", 57 | " plt.legend()\n", 58 | " \n", 59 | " \n", 60 | " plt.xlim(0,100)\n", 61 | " \n", 62 | " plt.ylim(-500,500)\n", 63 | " \n", 64 | " return x,y\n", 65 | " \n", 66 | " " 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 61, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "w = interactive(linear,m=(-10,10),c=(-50,100))" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 62, 81 | "metadata": {}, 82 | "outputs": [ 83 | { 84 | "data": { 85 | "application/vnd.jupyter.widget-view+json": { 86 | "model_id": "84b0237a9e734e0a9c6c60ec0d4391c9", 87 | "version_major": 2, 88 | "version_minor": 0 89 | }, 90 | "text/plain": [ 91 | "interactive(children=(IntSlider(value=0, description='m', max=10, min=-10), IntSlider(value=25, description='c…" 92 | ] 93 | }, 94 | "metadata": {}, 95 | "output_type": "display_data" 96 | } 97 | ], 98 | "source": [ 99 | "display(w)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [] 108 | } 109 | ], 110 | "metadata": { 111 | "kernelspec": { 112 | "display_name": "Python 3", 113 | "language": "python", 114 | "name": "python3" 115 | }, 116 | "language_info": { 117 | "codemirror_mode": { 118 | "name": "ipython", 119 | "version": 3 120 | }, 121 | "file_extension": ".py", 122 | "mimetype": "text/x-python", 123 | "name": "python", 124 | "nbconvert_exporter": "python", 125 | "pygments_lexer": "ipython3", 126 | "version": "3.8.3" 127 | } 128 | }, 129 | "nbformat": 4, 130 | "nbformat_minor": 4 131 | } 132 | --------------------------------------------------------------------------------