├── 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 | " Country | \n",
92 | " Age | \n",
93 | " Salary | \n",
94 | " Purchased | \n",
95 | "
\n",
96 | " \n",
97 | " \n",
98 | " \n",
99 | " 0 | \n",
100 | " France | \n",
101 | " 44.0 | \n",
102 | " 72000.0 | \n",
103 | " No | \n",
104 | "
\n",
105 | " \n",
106 | " 1 | \n",
107 | " Spain | \n",
108 | " 27.0 | \n",
109 | " 48000.0 | \n",
110 | " Yes | \n",
111 | "
\n",
112 | " \n",
113 | " 2 | \n",
114 | " Germany | \n",
115 | " 30.0 | \n",
116 | " 54000.0 | \n",
117 | " No | \n",
118 | "
\n",
119 | " \n",
120 | " 3 | \n",
121 | " Spain | \n",
122 | " 38.0 | \n",
123 | " 61000.0 | \n",
124 | " No | \n",
125 | "
\n",
126 | " \n",
127 | " 4 | \n",
128 | " Germany | \n",
129 | " 40.0 | \n",
130 | " NaN | \n",
131 | " Yes | \n",
132 | "
\n",
133 | " \n",
134 | "
\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 | " Country | \n",
249 | " Age | \n",
250 | " Salary | \n",
251 | "
\n",
252 | " \n",
253 | " \n",
254 | " \n",
255 | " 0 | \n",
256 | " France | \n",
257 | " 44.000000 | \n",
258 | " 72000.000000 | \n",
259 | "
\n",
260 | " \n",
261 | " 1 | \n",
262 | " Spain | \n",
263 | " 27.000000 | \n",
264 | " 48000.000000 | \n",
265 | "
\n",
266 | " \n",
267 | " 2 | \n",
268 | " Germany | \n",
269 | " 30.000000 | \n",
270 | " 54000.000000 | \n",
271 | "
\n",
272 | " \n",
273 | " 3 | \n",
274 | " Spain | \n",
275 | " 38.000000 | \n",
276 | " 61000.000000 | \n",
277 | "
\n",
278 | " \n",
279 | " 4 | \n",
280 | " Germany | \n",
281 | " 40.000000 | \n",
282 | " 63777.777778 | \n",
283 | "
\n",
284 | " \n",
285 | " 5 | \n",
286 | " France | \n",
287 | " 35.000000 | \n",
288 | " 58000.000000 | \n",
289 | "
\n",
290 | " \n",
291 | " 6 | \n",
292 | " Spain | \n",
293 | " 38.777778 | \n",
294 | " 52000.000000 | \n",
295 | "
\n",
296 | " \n",
297 | " 7 | \n",
298 | " France | \n",
299 | " 48.000000 | \n",
300 | " 79000.000000 | \n",
301 | "
\n",
302 | " \n",
303 | " 8 | \n",
304 | " Germany | \n",
305 | " 50.000000 | \n",
306 | " 83000.000000 | \n",
307 | "
\n",
308 | " \n",
309 | " 9 | \n",
310 | " France | \n",
311 | " 37.000000 | \n",
312 | " 67000.000000 | \n",
313 | "
\n",
314 | " \n",
315 | "
\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 | " Fruits | \n",
668 | "
\n",
669 | " \n",
670 | " \n",
671 | " \n",
672 | " 0 | \n",
673 | " Apple | \n",
674 | "
\n",
675 | " \n",
676 | " 1 | \n",
677 | " Banana | \n",
678 | "
\n",
679 | " \n",
680 | " 2 | \n",
681 | " Orange | \n",
682 | "
\n",
683 | " \n",
684 | " 3 | \n",
685 | " Apple | \n",
686 | "
\n",
687 | " \n",
688 | " 4 | \n",
689 | " Banana | \n",
690 | "
\n",
691 | " \n",
692 | " 5 | \n",
693 | " Banana | \n",
694 | "
\n",
695 | " \n",
696 | " 6 | \n",
697 | " Orange | \n",
698 | "
\n",
699 | " \n",
700 | "
\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 | " Fruits | \n",
832 | "
\n",
833 | " \n",
834 | " \n",
835 | " \n",
836 | " 0 | \n",
837 | " 0 | \n",
838 | "
\n",
839 | " \n",
840 | " 1 | \n",
841 | " 1 | \n",
842 | "
\n",
843 | " \n",
844 | " 2 | \n",
845 | " 2 | \n",
846 | "
\n",
847 | " \n",
848 | " 3 | \n",
849 | " 0 | \n",
850 | "
\n",
851 | " \n",
852 | " 4 | \n",
853 | " 1 | \n",
854 | "
\n",
855 | " \n",
856 | " 5 | \n",
857 | " 1 | \n",
858 | "
\n",
859 | " \n",
860 | " 6 | \n",
861 | " 2 | \n",
862 | "
\n",
863 | " \n",
864 | "
\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 | " Fruits | \n",
979 | " 0 | \n",
980 | " 1 | \n",
981 | " 2 | \n",
982 | "
\n",
983 | " \n",
984 | " \n",
985 | " \n",
986 | " 0 | \n",
987 | " 0 | \n",
988 | " 1.0 | \n",
989 | " 0.0 | \n",
990 | " 0.0 | \n",
991 | "
\n",
992 | " \n",
993 | " 1 | \n",
994 | " 1 | \n",
995 | " 0.0 | \n",
996 | " 1.0 | \n",
997 | " 0.0 | \n",
998 | "
\n",
999 | " \n",
1000 | " 2 | \n",
1001 | " 2 | \n",
1002 | " 0.0 | \n",
1003 | " 0.0 | \n",
1004 | " 1.0 | \n",
1005 | "
\n",
1006 | " \n",
1007 | " 3 | \n",
1008 | " 0 | \n",
1009 | " 1.0 | \n",
1010 | " 0.0 | \n",
1011 | " 0.0 | \n",
1012 | "
\n",
1013 | " \n",
1014 | " 4 | \n",
1015 | " 1 | \n",
1016 | " 0.0 | \n",
1017 | " 1.0 | \n",
1018 | " 0.0 | \n",
1019 | "
\n",
1020 | " \n",
1021 | " 5 | \n",
1022 | " 1 | \n",
1023 | " 0.0 | \n",
1024 | " 1.0 | \n",
1025 | " 0.0 | \n",
1026 | "
\n",
1027 | " \n",
1028 | " 6 | \n",
1029 | " 2 | \n",
1030 | " 0.0 | \n",
1031 | " 0.0 | \n",
1032 | " 1.0 | \n",
1033 | "
\n",
1034 | " \n",
1035 | "
\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 | "
"
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 | " 0 | \n",
118 | " 1 | \n",
119 | " 2 | \n",
120 | " 3 | \n",
121 | " 4 | \n",
122 | " 5 | \n",
123 | " 6 | \n",
124 | " 7 | \n",
125 | " 8 | \n",
126 | " 9 | \n",
127 | " 10 | \n",
128 | " 11 | \n",
129 | " 12 | \n",
130 | " 13 | \n",
131 | " 14 | \n",
132 | " 15 | \n",
133 | " 16 | \n",
134 | " 17 | \n",
135 | " 18 | \n",
136 | " 19 | \n",
137 | " 20 | \n",
138 | " 21 | \n",
139 | " 22 | \n",
140 | " 23 | \n",
141 | " 24 | \n",
142 | " 25 | \n",
143 | " 26 | \n",
144 | " 27 | \n",
145 | " 28 | \n",
146 | " 29 | \n",
147 | " 30 | \n",
148 | " 31 | \n",
149 | " 32 | \n",
150 | " 33 | \n",
151 | " 34 | \n",
152 | " 35 | \n",
153 | " 36 | \n",
154 | " 37 | \n",
155 | " 38 | \n",
156 | " 39 | \n",
157 | " 40 | \n",
158 | " 41 | \n",
159 | " 42 | \n",
160 | " 43 | \n",
161 | " 44 | \n",
162 | " 45 | \n",
163 | " 46 | \n",
164 | " 47 | \n",
165 | " 48 | \n",
166 | " 49 | \n",
167 | " 50 | \n",
168 | " 51 | \n",
169 | " 52 | \n",
170 | " 53 | \n",
171 | " 54 | \n",
172 | " 55 | \n",
173 | " 56 | \n",
174 | " 57 | \n",
175 | " 58 | \n",
176 | " 59 | \n",
177 | " 60 | \n",
178 | " 61 | \n",
179 | " 62 | \n",
180 | " 63 | \n",
181 | " y | \n",
182 | "
\n",
183 | " \n",
184 | " \n",
185 | " \n",
186 | " 0 | \n",
187 | " 0.0 | \n",
188 | " 0.0 | \n",
189 | " 5.0 | \n",
190 | " 13.0 | \n",
191 | " 9.0 | \n",
192 | " 1.0 | \n",
193 | " 0.0 | \n",
194 | " 0.0 | \n",
195 | " 0.0 | \n",
196 | " 0.0 | \n",
197 | " 13.0 | \n",
198 | " 15.0 | \n",
199 | " 10.0 | \n",
200 | " 15.0 | \n",
201 | " 5.0 | \n",
202 | " 0.0 | \n",
203 | " 0.0 | \n",
204 | " 3.0 | \n",
205 | " 15.0 | \n",
206 | " 2.0 | \n",
207 | " 0.0 | \n",
208 | " 11.0 | \n",
209 | " 8.0 | \n",
210 | " 0.0 | \n",
211 | " 0.0 | \n",
212 | " 4.0 | \n",
213 | " 12.0 | \n",
214 | " 0.0 | \n",
215 | " 0.0 | \n",
216 | " 8.0 | \n",
217 | " 8.0 | \n",
218 | " 0.0 | \n",
219 | " 0.0 | \n",
220 | " 5.0 | \n",
221 | " 8.0 | \n",
222 | " 0.0 | \n",
223 | " 0.0 | \n",
224 | " 9.0 | \n",
225 | " 8.0 | \n",
226 | " 0.0 | \n",
227 | " 0.0 | \n",
228 | " 4.0 | \n",
229 | " 11.0 | \n",
230 | " 0.0 | \n",
231 | " 1.0 | \n",
232 | " 12.0 | \n",
233 | " 7.0 | \n",
234 | " 0.0 | \n",
235 | " 0.0 | \n",
236 | " 2.0 | \n",
237 | " 14.0 | \n",
238 | " 5.0 | \n",
239 | " 10.0 | \n",
240 | " 12.0 | \n",
241 | " 0.0 | \n",
242 | " 0.0 | \n",
243 | " 0.0 | \n",
244 | " 0.0 | \n",
245 | " 6.0 | \n",
246 | " 13.0 | \n",
247 | " 10.0 | \n",
248 | " 0.0 | \n",
249 | " 0.0 | \n",
250 | " 0.0 | \n",
251 | " 0 | \n",
252 | "
\n",
253 | " \n",
254 | " 1 | \n",
255 | " 0.0 | \n",
256 | " 0.0 | \n",
257 | " 0.0 | \n",
258 | " 12.0 | \n",
259 | " 13.0 | \n",
260 | " 5.0 | \n",
261 | " 0.0 | \n",
262 | " 0.0 | \n",
263 | " 0.0 | \n",
264 | " 0.0 | \n",
265 | " 0.0 | \n",
266 | " 11.0 | \n",
267 | " 16.0 | \n",
268 | " 9.0 | \n",
269 | " 0.0 | \n",
270 | " 0.0 | \n",
271 | " 0.0 | \n",
272 | " 0.0 | \n",
273 | " 3.0 | \n",
274 | " 15.0 | \n",
275 | " 16.0 | \n",
276 | " 6.0 | \n",
277 | " 0.0 | \n",
278 | " 0.0 | \n",
279 | " 0.0 | \n",
280 | " 7.0 | \n",
281 | " 15.0 | \n",
282 | " 16.0 | \n",
283 | " 16.0 | \n",
284 | " 2.0 | \n",
285 | " 0.0 | \n",
286 | " 0.0 | \n",
287 | " 0.0 | \n",
288 | " 0.0 | \n",
289 | " 1.0 | \n",
290 | " 16.0 | \n",
291 | " 16.0 | \n",
292 | " 3.0 | \n",
293 | " 0.0 | \n",
294 | " 0.0 | \n",
295 | " 0.0 | \n",
296 | " 0.0 | \n",
297 | " 1.0 | \n",
298 | " 16.0 | \n",
299 | " 16.0 | \n",
300 | " 6.0 | \n",
301 | " 0.0 | \n",
302 | " 0.0 | \n",
303 | " 0.0 | \n",
304 | " 0.0 | \n",
305 | " 1.0 | \n",
306 | " 16.0 | \n",
307 | " 16.0 | \n",
308 | " 6.0 | \n",
309 | " 0.0 | \n",
310 | " 0.0 | \n",
311 | " 0.0 | \n",
312 | " 0.0 | \n",
313 | " 0.0 | \n",
314 | " 11.0 | \n",
315 | " 16.0 | \n",
316 | " 10.0 | \n",
317 | " 0.0 | \n",
318 | " 0.0 | \n",
319 | " 1 | \n",
320 | "
\n",
321 | " \n",
322 | " 2 | \n",
323 | " 0.0 | \n",
324 | " 0.0 | \n",
325 | " 0.0 | \n",
326 | " 4.0 | \n",
327 | " 15.0 | \n",
328 | " 12.0 | \n",
329 | " 0.0 | \n",
330 | " 0.0 | \n",
331 | " 0.0 | \n",
332 | " 0.0 | \n",
333 | " 3.0 | \n",
334 | " 16.0 | \n",
335 | " 15.0 | \n",
336 | " 14.0 | \n",
337 | " 0.0 | \n",
338 | " 0.0 | \n",
339 | " 0.0 | \n",
340 | " 0.0 | \n",
341 | " 8.0 | \n",
342 | " 13.0 | \n",
343 | " 8.0 | \n",
344 | " 16.0 | \n",
345 | " 0.0 | \n",
346 | " 0.0 | \n",
347 | " 0.0 | \n",
348 | " 0.0 | \n",
349 | " 1.0 | \n",
350 | " 6.0 | \n",
351 | " 15.0 | \n",
352 | " 11.0 | \n",
353 | " 0.0 | \n",
354 | " 0.0 | \n",
355 | " 0.0 | \n",
356 | " 1.0 | \n",
357 | " 8.0 | \n",
358 | " 13.0 | \n",
359 | " 15.0 | \n",
360 | " 1.0 | \n",
361 | " 0.0 | \n",
362 | " 0.0 | \n",
363 | " 0.0 | \n",
364 | " 9.0 | \n",
365 | " 16.0 | \n",
366 | " 16.0 | \n",
367 | " 5.0 | \n",
368 | " 0.0 | \n",
369 | " 0.0 | \n",
370 | " 0.0 | \n",
371 | " 0.0 | \n",
372 | " 3.0 | \n",
373 | " 13.0 | \n",
374 | " 16.0 | \n",
375 | " 16.0 | \n",
376 | " 11.0 | \n",
377 | " 5.0 | \n",
378 | " 0.0 | \n",
379 | " 0.0 | \n",
380 | " 0.0 | \n",
381 | " 0.0 | \n",
382 | " 3.0 | \n",
383 | " 11.0 | \n",
384 | " 16.0 | \n",
385 | " 9.0 | \n",
386 | " 0.0 | \n",
387 | " 2 | \n",
388 | "
\n",
389 | " \n",
390 | " 3 | \n",
391 | " 0.0 | \n",
392 | " 0.0 | \n",
393 | " 7.0 | \n",
394 | " 15.0 | \n",
395 | " 13.0 | \n",
396 | " 1.0 | \n",
397 | " 0.0 | \n",
398 | " 0.0 | \n",
399 | " 0.0 | \n",
400 | " 8.0 | \n",
401 | " 13.0 | \n",
402 | " 6.0 | \n",
403 | " 15.0 | \n",
404 | " 4.0 | \n",
405 | " 0.0 | \n",
406 | " 0.0 | \n",
407 | " 0.0 | \n",
408 | " 2.0 | \n",
409 | " 1.0 | \n",
410 | " 13.0 | \n",
411 | " 13.0 | \n",
412 | " 0.0 | \n",
413 | " 0.0 | \n",
414 | " 0.0 | \n",
415 | " 0.0 | \n",
416 | " 0.0 | \n",
417 | " 2.0 | \n",
418 | " 15.0 | \n",
419 | " 11.0 | \n",
420 | " 1.0 | \n",
421 | " 0.0 | \n",
422 | " 0.0 | \n",
423 | " 0.0 | \n",
424 | " 0.0 | \n",
425 | " 0.0 | \n",
426 | " 1.0 | \n",
427 | " 12.0 | \n",
428 | " 12.0 | \n",
429 | " 1.0 | \n",
430 | " 0.0 | \n",
431 | " 0.0 | \n",
432 | " 0.0 | \n",
433 | " 0.0 | \n",
434 | " 0.0 | \n",
435 | " 1.0 | \n",
436 | " 10.0 | \n",
437 | " 8.0 | \n",
438 | " 0.0 | \n",
439 | " 0.0 | \n",
440 | " 0.0 | \n",
441 | " 8.0 | \n",
442 | " 4.0 | \n",
443 | " 5.0 | \n",
444 | " 14.0 | \n",
445 | " 9.0 | \n",
446 | " 0.0 | \n",
447 | " 0.0 | \n",
448 | " 0.0 | \n",
449 | " 7.0 | \n",
450 | " 13.0 | \n",
451 | " 13.0 | \n",
452 | " 9.0 | \n",
453 | " 0.0 | \n",
454 | " 0.0 | \n",
455 | " 3 | \n",
456 | "
\n",
457 | " \n",
458 | " 4 | \n",
459 | " 0.0 | \n",
460 | " 0.0 | \n",
461 | " 0.0 | \n",
462 | " 1.0 | \n",
463 | " 11.0 | \n",
464 | " 0.0 | \n",
465 | " 0.0 | \n",
466 | " 0.0 | \n",
467 | " 0.0 | \n",
468 | " 0.0 | \n",
469 | " 0.0 | \n",
470 | " 7.0 | \n",
471 | " 8.0 | \n",
472 | " 0.0 | \n",
473 | " 0.0 | \n",
474 | " 0.0 | \n",
475 | " 0.0 | \n",
476 | " 0.0 | \n",
477 | " 1.0 | \n",
478 | " 13.0 | \n",
479 | " 6.0 | \n",
480 | " 2.0 | \n",
481 | " 2.0 | \n",
482 | " 0.0 | \n",
483 | " 0.0 | \n",
484 | " 0.0 | \n",
485 | " 7.0 | \n",
486 | " 15.0 | \n",
487 | " 0.0 | \n",
488 | " 9.0 | \n",
489 | " 8.0 | \n",
490 | " 0.0 | \n",
491 | " 0.0 | \n",
492 | " 5.0 | \n",
493 | " 16.0 | \n",
494 | " 10.0 | \n",
495 | " 0.0 | \n",
496 | " 16.0 | \n",
497 | " 6.0 | \n",
498 | " 0.0 | \n",
499 | " 0.0 | \n",
500 | " 4.0 | \n",
501 | " 15.0 | \n",
502 | " 16.0 | \n",
503 | " 13.0 | \n",
504 | " 16.0 | \n",
505 | " 1.0 | \n",
506 | " 0.0 | \n",
507 | " 0.0 | \n",
508 | " 0.0 | \n",
509 | " 0.0 | \n",
510 | " 3.0 | \n",
511 | " 15.0 | \n",
512 | " 10.0 | \n",
513 | " 0.0 | \n",
514 | " 0.0 | \n",
515 | " 0.0 | \n",
516 | " 0.0 | \n",
517 | " 0.0 | \n",
518 | " 2.0 | \n",
519 | " 16.0 | \n",
520 | " 4.0 | \n",
521 | " 0.0 | \n",
522 | " 0.0 | \n",
523 | " 4 | \n",
524 | "
\n",
525 | " \n",
526 | "
\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 | " model | \n",
686 | " best_score | \n",
687 | " best_params | \n",
688 | "
\n",
689 | " \n",
690 | " \n",
691 | " \n",
692 | " 0 | \n",
693 | " SVC | \n",
694 | " 0.947697 | \n",
695 | " {'C': 1, 'kernel': 'linear'} | \n",
696 | "
\n",
697 | " \n",
698 | " 1 | \n",
699 | " RandomForest | \n",
700 | " 0.933251 | \n",
701 | " {'n_estimators': 30} | \n",
702 | "
\n",
703 | " \n",
704 | " 2 | \n",
705 | " LogReg | \n",
706 | " 0.922114 | \n",
707 | " {'C': 1, 'solver': 'liblinear'} | \n",
708 | "
\n",
709 | " \n",
710 | " 3 | \n",
711 | " DTree | \n",
712 | " 0.814158 | \n",
713 | " {'criterion': 'entropy', 'max_depth': 11} | \n",
714 | "
\n",
715 | " \n",
716 | "
\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 | "
"
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 | "
"
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 | "
"
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 | " sepal length (cm) | \n",
122 | " sepal width (cm) | \n",
123 | " petal length (cm) | \n",
124 | " petal width (cm) | \n",
125 | " Species | \n",
126 | "
\n",
127 | " \n",
128 | " \n",
129 | " \n",
130 | " 0 | \n",
131 | " 5.1 | \n",
132 | " 3.5 | \n",
133 | " 1.4 | \n",
134 | " 0.2 | \n",
135 | " setosa | \n",
136 | "
\n",
137 | " \n",
138 | " 1 | \n",
139 | " 4.9 | \n",
140 | " 3.0 | \n",
141 | " 1.4 | \n",
142 | " 0.2 | \n",
143 | " setosa | \n",
144 | "
\n",
145 | " \n",
146 | " 2 | \n",
147 | " 4.7 | \n",
148 | " 3.2 | \n",
149 | " 1.3 | \n",
150 | " 0.2 | \n",
151 | " setosa | \n",
152 | "
\n",
153 | " \n",
154 | " 3 | \n",
155 | " 4.6 | \n",
156 | " 3.1 | \n",
157 | " 1.5 | \n",
158 | " 0.2 | \n",
159 | " setosa | \n",
160 | "
\n",
161 | " \n",
162 | " 4 | \n",
163 | " 5.0 | \n",
164 | " 3.6 | \n",
165 | " 1.4 | \n",
166 | " 0.2 | \n",
167 | " setosa | \n",
168 | "
\n",
169 | " \n",
170 | "
\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 | " param_C | \n",
291 | " param_kernel | \n",
292 | " mean_test_score | \n",
293 | "
\n",
294 | " \n",
295 | " \n",
296 | " \n",
297 | " 0 | \n",
298 | " 1 | \n",
299 | " rbf | \n",
300 | " 0.980000 | \n",
301 | "
\n",
302 | " \n",
303 | " 1 | \n",
304 | " 1 | \n",
305 | " linear | \n",
306 | " 0.980000 | \n",
307 | "
\n",
308 | " \n",
309 | " 2 | \n",
310 | " 1.59184 | \n",
311 | " rbf | \n",
312 | " 0.986667 | \n",
313 | "
\n",
314 | " \n",
315 | " 3 | \n",
316 | " 1.59184 | \n",
317 | " linear | \n",
318 | " 0.986667 | \n",
319 | "
\n",
320 | " \n",
321 | " 4 | \n",
322 | " 2.18367 | \n",
323 | " rbf | \n",
324 | " 0.980000 | \n",
325 | "
\n",
326 | " \n",
327 | "
\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 | " model | \n",
468 | " best_score | \n",
469 | " best_params | \n",
470 | "
\n",
471 | " \n",
472 | " \n",
473 | " \n",
474 | " 0 | \n",
475 | " svm | \n",
476 | " 0.980000 | \n",
477 | " {'C': 1, 'kernel': 'rbf'} | \n",
478 | "
\n",
479 | " \n",
480 | " 1 | \n",
481 | " random_forest | \n",
482 | " 0.966667 | \n",
483 | " {'n_estimators': 1} | \n",
484 | "
\n",
485 | " \n",
486 | " 2 | \n",
487 | " logistic_regression | \n",
488 | " 0.966667 | \n",
489 | " {'C': 5} | \n",
490 | "
\n",
491 | " \n",
492 | "
\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 | " longitude | \n",
128 | " latitude | \n",
129 | " housing_median_age | \n",
130 | " total_rooms | \n",
131 | " total_bedrooms | \n",
132 | " population | \n",
133 | " households | \n",
134 | " median_income | \n",
135 | " median_house_value | \n",
136 | "
\n",
137 | " \n",
138 | " \n",
139 | " \n",
140 | " 0 | \n",
141 | " -114.31 | \n",
142 | " 34.19 | \n",
143 | " 15.0 | \n",
144 | " 5612.0 | \n",
145 | " 1283.0 | \n",
146 | " 1015.0 | \n",
147 | " 472.0 | \n",
148 | " 1.4936 | \n",
149 | " 66900.0 | \n",
150 | "
\n",
151 | " \n",
152 | " 1 | \n",
153 | " -114.47 | \n",
154 | " 34.40 | \n",
155 | " 19.0 | \n",
156 | " 7650.0 | \n",
157 | " 1901.0 | \n",
158 | " 1129.0 | \n",
159 | " 463.0 | \n",
160 | " 1.8200 | \n",
161 | " 80100.0 | \n",
162 | "
\n",
163 | " \n",
164 | "
\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 | " longitude | \n",
220 | " latitude | \n",
221 | " housing_median_age | \n",
222 | " total_rooms | \n",
223 | " total_bedrooms | \n",
224 | " population | \n",
225 | " households | \n",
226 | " median_income | \n",
227 | " median_house_value | \n",
228 | "
\n",
229 | " \n",
230 | " \n",
231 | " \n",
232 | " 0 | \n",
233 | " -122.05 | \n",
234 | " 37.37 | \n",
235 | " 27.0 | \n",
236 | " 3885.0 | \n",
237 | " 661.0 | \n",
238 | " 1537.0 | \n",
239 | " 606.0 | \n",
240 | " 6.6085 | \n",
241 | " 344700.0 | \n",
242 | "
\n",
243 | " \n",
244 | " 1 | \n",
245 | " -118.30 | \n",
246 | " 34.26 | \n",
247 | " 43.0 | \n",
248 | " 1510.0 | \n",
249 | " 310.0 | \n",
250 | " 809.0 | \n",
251 | " 277.0 | \n",
252 | " 3.5990 | \n",
253 | " 176500.0 | \n",
254 | "
\n",
255 | " \n",
256 | "
\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 |
--------------------------------------------------------------------------------