├── images ├── dummy.txt ├── fb.png ├── ig.png ├── tw.png ├── add.png ├── arrow.png ├── logo.png ├── menu.png └── controller.png ├── index.html ├── Dictionary_Pratice.ipynb ├── style.css ├── Feature_Engineering_practice.ipynb ├── website.html ├── Practice_data_pre.ipynb ├── webstyle.css ├── class_pratice.ipynb ├── Practice_for_Day_6.ipynb ├── Cross_Validation_Practice.ipynb ├── Logistice_Regression.ipynb ├── Linear_Rgression_Basics_Prg_.ipynb └── Model_Wizard.ipynb /images/dummy.txt: -------------------------------------------------------------------------------- 1 | Hello 2 | -------------------------------------------------------------------------------- /images/fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/fb.png -------------------------------------------------------------------------------- /images/ig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/ig.png -------------------------------------------------------------------------------- /images/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/tw.png -------------------------------------------------------------------------------- /images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/add.png -------------------------------------------------------------------------------- /images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/arrow.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/menu.png -------------------------------------------------------------------------------- /images/controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RohithRagavender/practice/HEAD/images/controller.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 |
11 | 23 |
24 |
25 |

PS4 V2
DUALSHOCK

26 |

Wireless Controller for Playstaion 4

27 |

(compatible /Generic)

28 |

29 | $32.50 30 |

31 | 32 | 33 |
34 | 35 |
36 |
37 | 38 |
39 |
40 | 41 |

Add To Cart

42 |
43 | 44 |
45 | 46 |
47 |
48 | 49 | 54 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Dictionary_Pratice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyNXYBJU6ceTZ2MoFF3PHeqy", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 8, 32 | "metadata": { 33 | "colab": { 34 | "base_uri": "https://localhost:8080/" 35 | }, 36 | "id": "XyZ9CHY-WfNU", 37 | "outputId": "837983ac-9445-4729-c7a9-d6c257c63b03" 38 | }, 39 | "outputs": [ 40 | { 41 | "output_type": "stream", 42 | "name": "stdout", 43 | "text": [ 44 | "rog --> vowels: o\n", 45 | "max --> vowels: a\n", 46 | "love --> vowels: o\n", 47 | "love --> vowels: e\n", 48 | "computer --> vowels: o\n", 49 | "computer --> vowels: u\n", 50 | "computer --> vowels: e\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "a=['rog','max','love','gym','computer']\n", 56 | "b=['a','e','i','o','u']\n", 57 | "\n", 58 | "for i in a:\n", 59 | " for j in i:\n", 60 | " if j in b:\n", 61 | " print(i,\"-->\",\"vowels:\",j)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "source": [ 67 | "words=\"Presenting the lyrical video of the song Chammak Chhalo from the Bollywood movie Ra.One.The movie features Shahrukh Khan, Kareena Kapoor, Arjun Rampal, Armaan Verma, Shahana Goswami, Tom Wu in leading roles,Just keep giving us your love and keep listening to T-Series. Enjoy & stay connected with us \"\n", 68 | "dic={'a':0,'e':0,'i':0,'o':0,'u':0}\n", 69 | "\n", 70 | "for i in words.lower():\n", 71 | " if i in dic:\n", 72 | " dic[i]+=1\n", 73 | "\n", 74 | "for v,count in enumerate(dic.items()):\n", 75 | " print(count)\n" 76 | ], 77 | "metadata": { 78 | "colab": { 79 | "base_uri": "https://localhost:8080/" 80 | }, 81 | "id": "M7_Il20qXzpa", 82 | "outputId": "60b004cf-cc70-4952-8744-46d2a6756469" 83 | }, 84 | "execution_count": 22, 85 | "outputs": [ 86 | { 87 | "output_type": "stream", 88 | "name": "stdout", 89 | "text": [ 90 | "('a', 25)\n", 91 | "('e', 28)\n", 92 | "('i', 14)\n", 93 | "('o', 21)\n", 94 | "('u', 8)\n" 95 | ] 96 | } 97 | ] 98 | } 99 | ] 100 | } -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | *{ 2 | margin: 0; 3 | font-family: sans-serif; 4 | padding: 0; 5 | 6 | } 7 | 8 | .logo{ 9 | width: 50px; 10 | margin: 30px 0; 11 | cursor: pointer; 12 | } 13 | 14 | .menu-icon{ 15 | width: 25px; 16 | cursor: pointer; 17 | display: none; 18 | } 19 | nav{ 20 | flex: 1; 21 | text-align: right; 22 | 23 | } 24 | nav ul li{ 25 | list-style: none; 26 | display: inline-block; 27 | margin: 30px ; 28 | } 29 | nav ul li a { 30 | text-decoration: none; 31 | color: #000; 32 | font-size: 14px ; 33 | } 34 | 35 | nav ul li a:hover{ 36 | color: #ff5ea2; 37 | } 38 | .container{ 39 | width: 100%; 40 | min-height: 100%; 41 | box-sizing: border-box; 42 | padding-left: 8%; 43 | padding-right: 8%; 44 | overflow: hidden; 45 | 46 | } 47 | .navbar 48 | { 49 | width: 100%; 50 | display: flex; 51 | align-items: center; 52 | } 53 | 54 | 55 | .row{ 56 | display: flex; 57 | justify-content: space-between; 58 | align-items: center; 59 | margin: 100px 0; 60 | } 61 | 62 | .col-1{ 63 | flex-basis:40%; 64 | position: relative; 65 | margin-left: 50px; 66 | } 67 | 68 | .col-1 h2{ 69 | font-size: 54px; 70 | 71 | } 72 | .col-1 h3{ 73 | font-size: 30px; 74 | color: #707070; 75 | font-weight: 100; 76 | margin: 20px 0 10px; 77 | } 78 | 79 | .col-1 p{ 80 | font-size: 16px; 81 | color: #b7b7b7; 82 | font-weight: 100; 83 | } 84 | 85 | .col-1 h4{ 86 | margin: 30px; 87 | font-size: 20px 88 | 89 | } 90 | 91 | button{ 92 | width: 100px; 93 | border: 0; 94 | padding: 12px 10px; 95 | outline: none; 96 | background:linear-gradient(to right,#fb5283,#ff3527); 97 | border-radius: 6px; 98 | cursor: pointer; 99 | transition: 1s; 100 | 101 | } 102 | button img{ 103 | width: 30px; 104 | display:none; 105 | } 106 | button :hover img { 107 | display: block; 108 | 109 | } 110 | 111 | button:hover{ 112 | transition: 1s; 113 | width: 160px; 114 | border-radius: 24px; 115 | } 116 | .col-1::after{ 117 | content: ''; 118 | width: 10px; 119 | height: 57%; 120 | background:linear-gradient(#ff469f,#ff6062); 121 | position: absolute; 122 | left: -40px; 123 | top: 8px; 124 | } 125 | 126 | .col-2{ 127 | position: relative; 128 | flex-basis:60% ; 129 | display: flex; 130 | align-items: center; 131 | } 132 | 133 | .col-2.controller{ 134 | width: 90%; 135 | } 136 | 137 | .color-box{ 138 | position: absolute; 139 | right: 0; 140 | top: 0; 141 | background: linear-gradient(#ff54a2,#ff575a); 142 | border-radius: 20px 0 0 20px; 143 | height: 100%; 144 | width: 80%; 145 | z-index: -1; 146 | transform: translateX(150px); 147 | } 148 | 149 | .add-btn img{ 150 | width: 35px; 151 | margin-bottom: 5px ; 152 | 153 | } 154 | 155 | .add-btn{ 156 | 157 | text-align: center; 158 | color: white; 159 | cursor: pointer; 160 | } 161 | 162 | .social-link img{ 163 | height: 13px; 164 | margin: 20px; 165 | cursor: pointer; 166 | } 167 | 168 | .social-link{ 169 | text-align: center; 170 | } 171 | 172 | @media only screen and (max-width:700px) 173 | { 174 | 175 | 176 | nav ul { 177 | width: 100%; 178 | background: linear-gradient(#ff54a2,#ff575a); 179 | position: absolute; 180 | top: 75px; 181 | right: 0; 182 | z-index: 2; 183 | } 184 | nav ul li{ 185 | display: block; 186 | margin-top: 10px; 187 | margin-bottom: 10px; 188 | 189 | } 190 | nav ul li a { 191 | color: #fff; 192 | } 193 | } 194 | 195 | .menu-icon{ 196 | display: block; 197 | } 198 | 199 | #menuList{ 200 | overflow: hidden; 201 | transition: 0.5s; 202 | } 203 | .row{ 204 | flex-direction: column-reverse; 205 | margin: 50px 0; 206 | } 207 | 208 | .col-2{ 209 | flex-basis: 100%; 210 | margin-bottom: 50px; 211 | } 212 | .col-2.controller{ 213 | width: 77%; 214 | 215 | } 216 | .color-box{ 217 | transform: translateX(75px); 218 | 219 | } 220 | .col-1{ 221 | flex-basis: 100%; 222 | 223 | } 224 | .col-1 h2{ 225 | font-size: 34px; 226 | } 227 | .col-1 h3{ 228 | font-size: 15px; 229 | } -------------------------------------------------------------------------------- /Feature_Engineering_practice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyNWAbnlmISsSbzWXOdYEDKN", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 21, 32 | "metadata": { 33 | "colab": { 34 | "base_uri": "https://localhost:8080/" 35 | }, 36 | "id": "uMAvhb0tF63K", 37 | "outputId": "52f7ba4b-0b24-4428-d15d-1b8d863ec2ec" 38 | }, 39 | "outputs": [ 40 | { 41 | "output_type": "stream", 42 | "name": "stdout", 43 | "text": [ 44 | " Product Category Price Discount Purchase_Date\n", 45 | "0 Shirt Clothing 1200 10 2024-01-10\n", 46 | "1 Shoes Footwear 2500 20 2024-01-15\n", 47 | "2 Watch Accessories 5000 15 2024-02-20\n", 48 | "3 Shoes Footwear 3000 10 2024-02-25\n", 49 | "4 Shirt Clothing 1500 5 2024-03-05\n", 50 | "5 Watch Accessories 4500 25 2024-03-10\n", 51 | "\n", 52 | "\n", 53 | " Product Price Discount Category_Accessories Category_Clothing \\\n", 54 | "0 0 -1.238728 -0.620174 False True \n", 55 | "1 1 -0.318530 0.868243 False False \n", 56 | "2 2 1.451081 0.124035 True False \n", 57 | "3 1 0.035392 -0.620174 False False \n", 58 | "4 0 -1.026375 -1.364382 False True \n", 59 | "5 2 1.097159 1.612452 True False \n", 60 | "\n", 61 | " Category_Footwear Year Month Day \n", 62 | "0 False 2024 1 10 \n", 63 | "1 True 2024 1 15 \n", 64 | "2 False 2024 2 20 \n", 65 | "3 True 2024 2 25 \n", 66 | "4 False 2024 3 5 \n", 67 | "5 False 2024 3 10 \n" 68 | ] 69 | } 70 | ], 71 | "source": [ 72 | "import pandas as pd\n", 73 | "\n", 74 | "data = {\n", 75 | " 'Product': ['Shirt', 'Shoes', 'Watch', 'Shoes', 'Shirt', 'Watch'],\n", 76 | " 'Category': ['Clothing', 'Footwear', 'Accessories', 'Footwear', 'Clothing', 'Accessories'],\n", 77 | " 'Price': [1200, 2500, 5000, 3000, 1500, 4500],\n", 78 | " 'Discount': [10, 20, 15, 10, 5, 25],\n", 79 | " 'Purchase_Date': ['2024-01-10', '2024-01-15', '2024-02-20', '2024-02-25', '2024-03-05', '2024-03-10']\n", 80 | "}\n", 81 | "\n", 82 | "df = pd.DataFrame(data)\n", 83 | "print(df)\n", 84 | "\n", 85 | "\n", 86 | "from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler\n", 87 | "\n", 88 | "print(\"\\n\")\n", 89 | "le = LabelEncoder()\n", 90 | "df['Product']=le.fit_transform(df['Product'])\n", 91 | "#print(df)\n", 92 | "# grp=df.groupby('Category')\n", 93 | "# print('\\n')\n", 94 | "# print(grp.sum())\n", 95 | "\n", 96 | "df=pd.get_dummies(df,columns=['Category'])\n", 97 | "ss=StandardScaler()\n", 98 | "df[['Price','Discount']]=ss.fit_transform(df[['Price','Discount']])\n", 99 | "\n", 100 | "df['Purchase_Date']=pd.to_datetime(df['Purchase_Date'])\n", 101 | "df['Year']=df['Purchase_Date'].dt.year\n", 102 | "df['Month']=df['Purchase_Date'].dt.month\n", 103 | "df['Day']=df['Purchase_Date'].dt.day\n", 104 | "df.drop('Purchase_Date',axis=1,inplace=True)\n", 105 | "print(df)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "source": [ 111 | "📝 Your Tasks\n", 112 | "Label Encode the \"Product\" column.\n", 113 | "\n", 114 | "One-Hot Encode the \"Category\" column.\n", 115 | "\n", 116 | "Apply StandardScaler on \"Price\" and \"Discount\".\n", 117 | "\n", 118 | "Create New Features:\n", 119 | "\n", 120 | "Year, Month, Day from \"Purchase_Date\".\n", 121 | "\n", 122 | "Drop the \"Purchase_Date\" column after feature extraction." 123 | ], 124 | "metadata": { 125 | "id": "sYgsPd1YGV5U" 126 | } 127 | } 128 | ] 129 | } -------------------------------------------------------------------------------- /website.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | BootCamp 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 |
15 |

BootCamp

16 | 17 | 18 | 19 | 20 |
21 |

Become a WEB DEVELOPER

22 |

We focus on teaching our students the fundamentals of the latest and
greatest technologies to prepare them for their first dev role

23 |
24 |
25 |
26 | 27 | 28 |
29 |
30 |
31 | 32 |
33 |
34 | 35 |
36 | 37 |
38 |
39 |
40 | 41 | 42 | 43 |
44 |
45 |
46 | macbook 47 |

Virtual


48 |

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Asperiores iusto hic quam dolorum, perspiciatis voluptas


49 | 50 |
51 |
52 | macbook 53 |

Hybrid


54 |

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Asperiores iusto hic quam dolorum, perspiciatis voluptas


55 | 56 |
57 |
58 | macbook 59 |

In Person


60 |

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Asperiores iusto hic quam dolorum, perspiciatis voluptas


61 | 62 |
63 |
64 |
65 | 66 |
67 |
68 | 69 |
70 |

Learn The Fundamentals

71 |
72 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Rem dignissimos quae, temporibus eaque libero autem. 73 |
74 |

75 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam assumenda delectus totam voluptatibus natus error aperiam iusto aliquid? Eum cum nisi alias ea ipsa dolorum perspiciatis laudantium corporis maxime modi?

76 | 77 |

78 | 79 |
80 |
81 |

82 | 83 | 84 |
85 | 99 |
100 | 101 |
102 |

Frequently Asked Questions

103 |
104 |

What is the life time of the course?


105 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente dolores voluptate labore soluta deleniti? Sed molestias velit dolorum laudantium, adipisci deleniti quo, omnis,
sunt cum repellendus repellat nemo aut nostrum!

106 |

107 |

Where can I solve my doubt?


108 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente dolores voluptate labore soluta deleniti? Sed molestias velit dolorum laudantium, adipisci deleniti quo, omnis,
sunt cum repellendus repellat nemo aut nostrum!

109 |

110 |

Is any account available for students?


111 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente dolores voluptate labore soluta deleniti? Sed molestias velit dolorum laudantium, adipisci deleniti quo, omnis,
sunt cum repellendus repellat nemo aut nostrum!

112 |
113 |
114 |
115 | 116 | -------------------------------------------------------------------------------- /Practice_data_pre.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyPX2IZUbDMRv5TX3F23s0ef", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 24, 32 | "metadata": { 33 | "colab": { 34 | "base_uri": "https://localhost:8080/" 35 | }, 36 | "id": "AJtAaQc5DTO-", 37 | "outputId": "597ede4e-6fa2-4185-b53c-5b2cd27dcccf" 38 | }, 39 | "outputs": [ 40 | { 41 | "output_type": "stream", 42 | "name": "stdout", 43 | "text": [ 44 | "Missing Values Count Before Handling\n", 45 | "EmpID 0\n", 46 | "Name 0\n", 47 | "Department 0\n", 48 | "Gender 1\n", 49 | "Age 2\n", 50 | "Experience 0\n", 51 | "Salary 1\n", 52 | "JoiningCity 0\n", 53 | "Rating 0\n", 54 | "dtype: int64\n", 55 | "\n", 56 | "\n", 57 | "\n", 58 | "\n", 59 | "Mean Value\n", 60 | "Age -2.220446e-17\n", 61 | "Salary 2.886580e-16\n", 62 | "Experience 9.992007e-17\n", 63 | "dtype: float64\n", 64 | "\n", 65 | "\n", 66 | "Standard Deivation Value\n", 67 | "Age 1.054093\n", 68 | "Salary 1.054093\n", 69 | "Experience 1.054093\n", 70 | "dtype: float64\n" 71 | ] 72 | }, 73 | { 74 | "output_type": "stream", 75 | "name": "stderr", 76 | "text": [ 77 | "/tmp/ipython-input-3519740358.py:6: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 78 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 79 | "\n", 80 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 81 | "\n", 82 | "\n", 83 | " df['Age'].fillna(df['Age'].median(),inplace=True)\n", 84 | "/tmp/ipython-input-3519740358.py:7: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 85 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 86 | "\n", 87 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 88 | "\n", 89 | "\n", 90 | " df['Salary'].fillna(df['Salary'].mean(),inplace=True)\n", 91 | "/tmp/ipython-input-3519740358.py:8: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 92 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 93 | "\n", 94 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 95 | "\n", 96 | "\n", 97 | " df['Gender'].fillna(\"Unknown\",inplace=True)\n" 98 | ] 99 | } 100 | ], 101 | "source": [ 102 | "import pandas as pd\n", 103 | "from sklearn.preprocessing import LabelEncoder,StandardScaler\n", 104 | "df=pd.read_csv('employee_data.csv')\n", 105 | "print(\"Missing Values Count Before Handling\")\n", 106 | "print(df.isnull().sum())\n", 107 | "df['Age'].fillna(df['Age'].median(),inplace=True)\n", 108 | "df['Salary'].fillna(df['Salary'].mean(),inplace=True)\n", 109 | "df['Gender'].fillna(\"Unknown\",inplace=True)\n", 110 | "print(\"\\n\")\n", 111 | "# Starting to Encoding Section\n", 112 | "le=LabelEncoder()\n", 113 | "df['Gender']=le.fit_transform(df['Gender'])\n", 114 | "df['Department'] = le.fit_transform(df['Department'])\n", 115 | "df = pd.get_dummies(df,columns=['JoiningCity'],drop_first=True)\n", 116 | "print(\"\\n\")\n", 117 | "# Starting to Scaling the Data\n", 118 | "scaler=StandardScaler()\n", 119 | "cols_to_scale=['Age','Salary','Experience']\n", 120 | "df[cols_to_scale]=scaler.fit_transform(df[cols_to_scale])\n", 121 | "print(\"Mean Value\")\n", 122 | "print(df[cols_to_scale].mean())\n", 123 | "print(\"\\n\")\n", 124 | "print(\"Standard Deivation Value\")\n", 125 | "print(df[cols_to_scale].std())" 126 | ] 127 | } 128 | ] 129 | } -------------------------------------------------------------------------------- /webstyle.css: -------------------------------------------------------------------------------- 1 | *{ 2 | margin:0; 3 | padding:0; 4 | } 5 | .BootCamp{ 6 | padding-left: 8%; 7 | font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; 8 | color: white; 9 | float: left; 10 | } 11 | 12 | .middle{ 13 | width: 100%; 14 | } 15 | .front 16 | { 17 | width: 100%; 18 | height: 70vh; 19 | background-color:#212529; 20 | padding-top: 20px; 21 | font-size: 20px; 22 | padding-left: 0; 23 | list-style-type: none; 24 | } 25 | 26 | .top{ 27 | width: 90%; 28 | height:20px; 29 | padding: 2rex; 30 | padding-left: 5px; 31 | padding-top: 0; 32 | background-color: #212529; 33 | color: whitesmoke; 34 | } 35 | 36 | ul{ 37 | list-style-type: none; 38 | float:right; 39 | display: flex; 40 | margin-right: 10px; 41 | padding-left: 0; 42 | padding: 0; 43 | 44 | } 45 | 46 | .top a:hover{ 47 | padding-top: 0%; 48 | text-decoration: none; 49 | color:rgba(255,255,255,.55); 50 | transition: 1ms; 51 | } 52 | 53 | .image{ 54 | margin:58px; 55 | width: 38%; 56 | display:inline; 57 | position:absolute; 58 | right: -37px; 59 | padding-right:25%; 60 | padding:15px; 61 | height: 47; 62 | padding-top:63px; 63 | } 64 | 65 | .content{ 66 | padding: 5rem; 67 | padding-right: 20; 68 | color: white; 69 | padding-top: 12%; 70 | padding-left: 8%; 71 | padding-right: 35%; 72 | margin: 25px; 73 | } 74 | 75 | .role{ 76 | color: #0d6efd; 77 | } 78 | 79 | .quote{ 80 | color:rgb(204,204,204); 81 | padding-top: 3%; 82 | margin-top: 10px; 83 | margin-bottom: 10px; 84 | 85 | } 86 | 87 | .button 88 | { width: 20%; 89 | padding-top: 10px; 90 | padding-bottom: 10px; 91 | border-radius: 5px; 92 | border-style: none; 93 | color:rgb(185,185,189); 94 | background-color:#0d6efd; 95 | height: 10%; 96 | font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif; 97 | margin: 10px; 98 | } 99 | .sign { 100 | background-color:#0d6efd; 101 | color: white; 102 | font-family:Arial, Helvetica, sans-serif; 103 | padding: 50px; 104 | } 105 | form{ 106 | display:inline; 107 | cursor:pointer; 108 | } 109 | 110 | .form{ 111 | float:right; 112 | } 113 | 114 | 115 | h2{ 116 | width: 50px; 117 | display: inline; 118 | } 119 | 120 | #email{ 121 | width:600px; 122 | height:50px; 123 | border-radius: 2px; 124 | border-style:none; 125 | font-family:sans-serif; 126 | font-size:20px; 127 | } 128 | .subscribe{ 129 | width:120px; 130 | height:50px; 131 | display:inline; 132 | font-family:sans-serif; 133 | font-size:20px; 134 | background-color:black; 135 | color:white; 136 | } 137 | 138 | .contents{ 139 | margin:50px; 140 | } 141 | 142 | .content1{ 143 | background-color: black; 144 | color: white; 145 | width: 202px; 146 | height: 65%; 147 | padding: 65px; 148 | margin: 50px; 149 | border-radius: 5px ; 150 | font-family: sans-serif; 151 | display: inline-block ; 152 | } 153 | 154 | .content1 h3{ 155 | text-align: center; 156 | font-size: 32px; 157 | margin-right:39px; 158 | } 159 | 160 | .content1 p{ 161 | padding: 2px; 162 | display: inline; 163 | text-align:justify; 164 | } 165 | 166 | .lap{ 167 | background-color:white; 168 | padding: 25px; 169 | margin: 15px; 170 | padding-right:5px; 171 | padding-left:5px; 172 | padding-top:5px; 173 | padding-bottom:5px; 174 | width: 56px; 175 | display: flex; 176 | margin-left: 57px; 177 | } 178 | 179 | .content2{ 180 | display:inline-block; 181 | background-color: black; 182 | color: white; 183 | width: 202px; 184 | height: 65%; 185 | padding: 65px; 186 | margin: 50px; 187 | border-radius: 5px ; 188 | font-family: sans-serif; 189 | 190 | } 191 | 192 | .content2 h3{ 193 | text-align: center; 194 | font-size: 32px; 195 | margin-right:39px; 196 | } 197 | 198 | .content2 p{ 199 | padding: 2px; 200 | display: inline; 201 | text-align:justify; 202 | } 203 | 204 | .content3{ 205 | display:inline-block; 206 | background-color: black; 207 | color: white; 208 | width: 212px; 209 | height: 65%; 210 | padding: 65px; 211 | margin: 50px; 212 | border-radius: 5px ; 213 | font-family: sans-serif; 214 | 215 | } 216 | 217 | .content3 h3{ 218 | text-align: center; 219 | font-size: 32px; 220 | margin-right:39px; 221 | } 222 | 223 | .content3 p{ 224 | padding: 2px; 225 | display: inline; 226 | text-align:justify; 227 | } 228 | 229 | .onclick{ 230 | padding-top: 10px; 231 | margin: 38px; 232 | width: 80px; 233 | display: inline; 234 | background-color: #0d6efd; 235 | color: aliceblue; 236 | font-family: 'Courier New', Courier, monospace; 237 | } 238 | 239 | .java{ 240 | width: 43%; 241 | margin: 0%; 242 | } 243 | 244 | .about{ 245 | float: right; 246 | width: 810px; 247 | height: 50%; 248 | margin: 10px; 249 | padding: 15px; 250 | padding-top: 155px; 251 | font-family: 'Times New Roman', Times, serif; 252 | } 253 | 254 | .line2{ 255 | padding-top: 12px; 256 | } 257 | 258 | 259 | .bottom{ 260 | display: block; 261 | } 262 | 263 | .features2{ 264 | width: 100%; 265 | } 266 | .link{ 267 | background-color:rgb(#212529); 268 | } 269 | 270 | .rect{ 271 | float: right; 272 | width: 43%; 273 | margin: 0%; 274 | } 275 | .head{ 276 | float: right; 277 | } 278 | 279 | .para,.para2{ 280 | float: right; 281 | } 282 | 283 | .bottom3{ 284 | width:100%; 285 | height:50vh; 286 | margin-top:80px; 287 | 288 | } 289 | #quest{ 290 | color:black; 291 | text-align: center; 292 | font-family: sans-serif; 293 | } 294 | .questions{ 295 | font-size: 15px; 296 | font-family: sans-serif; 297 | } 298 | hr{ 299 | width:90%; 300 | } 301 | .qa{ 302 | margin-left:100px; 303 | margin-top:50px; 304 | } 305 | .answer{ 306 | display:none; 307 | } 308 | -------------------------------------------------------------------------------- /class_pratice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyNS0YJ78P2SvnFEW3LFFaMG", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "source": [ 32 | "class Car():\n", 33 | " def __init__(self,brand,model,color,full):\n", 34 | " self.full=full\n", 35 | " self.brand=brand\n", 36 | " self.model=model\n", 37 | " self.color=color\n", 38 | "\n", 39 | " def intro(self):\n", 40 | " print(f\"My Car Brand is {self.brand} and model is {self.model} and it's color is just wow {self.color}\")\n", 41 | "\n", 42 | " def full_tank(self):\n", 43 | " if self.full == True:\n", 44 | " print(\"Tank is full\")\n", 45 | " else:\n", 46 | " print(\"Tank is not full\")\n", 47 | "\n", 48 | "\n", 49 | "my_car=Car(\"audi\",\"a4\",\"black\",1)\n", 50 | "my_car.intro() # ---> First Method\n", 51 | "my_car.full_tank() # ---> Second Method\n", 52 | "\n", 53 | "\n", 54 | "print(my_car.model)\n", 55 | "print(my_car.brand)\n", 56 | "print(my_car.color)" 57 | ], 58 | "metadata": { 59 | "id": "9e5YPp3qY1Ku" 60 | }, 61 | "execution_count": null, 62 | "outputs": [] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "source": [ 67 | "🧠 Basic Level: Class and Object Creation\n", 68 | "✅ Create a class Car with attributes brand, model, and year. Write a method display_info() that prints the car details.\n", 69 | "\n", 70 | "✅ Create a class Student with attributes name, roll_no, and grade. Write a method display() to show student info.\n", 71 | "\n", 72 | "✅ Define a class Rectangle with attributes length and width. Add methods:\n", 73 | "\n", 74 | "area() to return the area.\n", 75 | "\n", 76 | "perimeter() to return the perimeter.\n", 77 | "\n", 78 | "✅ Create a class Circle with radius as attribute. Include:\n", 79 | "\n", 80 | "Method to calculate area.\n", 81 | "\n", 82 | "Method to calculate circumference.\n", 83 | "\n", 84 | "✅ Create a class BankAccount with attributes account_holder, balance. Add methods:\n", 85 | "\n", 86 | "deposit(amount)\n", 87 | "\n", 88 | "withdraw(amount)\n", 89 | "\n", 90 | "display_balance()" 91 | ], 92 | "metadata": { 93 | "id": "2kdr0C3scvVG" 94 | } 95 | }, 96 | { 97 | "cell_type": "code", 98 | "source": [ 99 | "class Student():\n", 100 | " def __init__(self,name,roll_no,grade):\n", 101 | " self.name=name\n", 102 | " self.roll_no=roll_no\n", 103 | " self.grade=grade\n", 104 | "\n", 105 | "\n", 106 | " def info(self):\n", 107 | " print( f\"Student Name: {self.name}\")\n", 108 | " print(f\"Student Roll_no: {self.roll_no}\")\n", 109 | " print(f\"Student Grade: {self.grade}\")\n", 110 | "\n", 111 | "\n", 112 | "\n", 113 | "My_info=Student(\"Manju\",25,\"A+\")\n", 114 | "My_info.info()" 115 | ], 116 | "metadata": { 117 | "colab": { 118 | "base_uri": "https://localhost:8080/" 119 | }, 120 | "id": "weC2nzANc9To", 121 | "outputId": "0e0c2a84-b203-466a-d4af-2c7b6a07344f" 122 | }, 123 | "execution_count": 16, 124 | "outputs": [ 125 | { 126 | "output_type": "stream", 127 | "name": "stdout", 128 | "text": [ 129 | "Student Name: Manju\n", 130 | "Student Roll_no: 25\n", 131 | "Student Grade: A+\n" 132 | ] 133 | } 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "source": [ 139 | "class Rectangle():\n", 140 | " def __init__(self,length,width):\n", 141 | " self.length=length\n", 142 | " self.width=width\n", 143 | "\n", 144 | " def area(self):\n", 145 | " return self.length*self.width\n", 146 | "\n", 147 | " def perimeter(self):\n", 148 | " return 2*(self.length+self.width)\n", 149 | "\n", 150 | "\n", 151 | "\n", 152 | "rec=Rectangle(10,20)\n", 153 | "print(\"Area of Rectangle : \",rec.area())\n", 154 | "print(\"Perimeter of Rectangle : \",rec.perimeter())\n" 155 | ], 156 | "metadata": { 157 | "colab": { 158 | "base_uri": "https://localhost:8080/" 159 | }, 160 | "id": "UFF6ElndezvC", 161 | "outputId": "86eb239c-d3a8-4bbf-8d88-7e56d518c9e3" 162 | }, 163 | "execution_count": 20, 164 | "outputs": [ 165 | { 166 | "output_type": "stream", 167 | "name": "stdout", 168 | "text": [ 169 | "Area of Rectangle : 200\n", 170 | "Perimeter of Rectangle : 60\n" 171 | ] 172 | } 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "source": [ 178 | "class Bank:\n", 179 | " def __init__(self, account_holder, balance):\n", 180 | " self.account_holder = account_holder\n", 181 | " self.balance = balance\n", 182 | "\n", 183 | " def deposit(self, amount):\n", 184 | " if amount > 0:\n", 185 | " self.balance += amount\n", 186 | " print(f\"Deposited ₹{amount}\")\n", 187 | " print(f'Total Balance {self.balance}')\n", 188 | " else:\n", 189 | " print(\"Invalid deposit amount.\")\n", 190 | "\n", 191 | " def withdraw(self, amount):\n", 192 | " if amount > 0 and amount <= self.balance:\n", 193 | " self.balance -= amount\n", 194 | " print(f\"Withdrawn ₹{amount}\")\n", 195 | " else:\n", 196 | " print(\"Invalid withdrawal amount or insufficient balance.\")\n", 197 | "\n", 198 | " def show_balance(self):\n", 199 | " print(f\"Available Balance: ₹{self.balance}\")\n", 200 | "\n", 201 | "\n", 202 | "bk = Bank(\"Manju\", 250000)\n", 203 | "bk.deposit(11000)\n", 204 | "print(\" \")\n", 205 | "bk.withdraw(5000)\n", 206 | "bk.show_balance()\n" 207 | ], 208 | "metadata": { 209 | "colab": { 210 | "base_uri": "https://localhost:8080/" 211 | }, 212 | "id": "UgYKm27sfmjx", 213 | "outputId": "4226b590-bf78-4bb4-f4cc-2f3ed6c1d3e9" 214 | }, 215 | "execution_count": 26, 216 | "outputs": [ 217 | { 218 | "output_type": "stream", 219 | "name": "stdout", 220 | "text": [ 221 | "Deposited ₹11000\n", 222 | "Total Balance 261000\n", 223 | " \n", 224 | "Withdrawn ₹5000\n", 225 | "Available Balance: ₹256000\n" 226 | ] 227 | } 228 | ] 229 | } 230 | ] 231 | } -------------------------------------------------------------------------------- /Practice_for_Day_6.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyOuJ6LEn7Q+NkZnrB+Ww3p1", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 7, 32 | "metadata": { 33 | "colab": { 34 | "base_uri": "https://localhost:8080/" 35 | }, 36 | "id": "Sug_xwYE3ghQ", 37 | "outputId": "051e9634-daf8-4f91-ded6-933219764d58" 38 | }, 39 | "outputs": [ 40 | { 41 | "output_type": "stream", 42 | "name": "stdout", 43 | "text": [ 44 | "First 5 Rows:\n", 45 | " PassengerId Survived Pclass ... Fare Cabin Embarked\n", 46 | "0 1 0 3 ... 7.2500 NaN S\n", 47 | "1 2 1 1 ... 71.2833 C85 C\n", 48 | "2 3 1 3 ... 7.9250 NaN S\n", 49 | "3 4 1 1 ... 53.1000 C123 S\n", 50 | "4 5 0 3 ... 8.0500 NaN S\n", 51 | "\n", 52 | "[5 rows x 13 columns]\n", 53 | "\n", 54 | " Missing Values Befroe Handling\n", 55 | "PassengerId 0\n", 56 | "Survived 0\n", 57 | "Pclass 0\n", 58 | "First Person 0\n", 59 | "Second Person 0\n", 60 | "Sex 0\n", 61 | "Age 177\n", 62 | "SibSp 0\n", 63 | "Parch 0\n", 64 | "Ticket 0\n", 65 | "Fare 0\n", 66 | "Cabin 687\n", 67 | "Embarked 2\n", 68 | "dtype: int64\n", 69 | "\n", 70 | "✅ Missing Values After Handling:\n", 71 | "PassengerId 0\n", 72 | "Survived 0\n", 73 | "Pclass 0\n", 74 | "First Person 0\n", 75 | "Second Person 0\n", 76 | "Sex 0\n", 77 | "Age 177\n", 78 | "SibSp 0\n", 79 | "Parch 0\n", 80 | "Ticket 0\n", 81 | "Fare 0\n", 82 | "Embarked 0\n", 83 | "dtype: int64\n", 84 | "\n", 85 | "🔢 Encoded Data Sample:\n", 86 | " Sex Embarked\n", 87 | "0 1 2\n", 88 | "1 0 0\n", 89 | "2 0 2\n", 90 | "3 0 2\n", 91 | "4 1 2\n", 92 | "\n", 93 | "📏 Scaled Data Sample:\n", 94 | " Age Fare\n", 95 | "0 -0.530377 -0.502445\n", 96 | "1 0.571831 0.786845\n", 97 | "2 -0.254825 -0.488854\n", 98 | "3 0.365167 0.420730\n", 99 | "4 0.365167 -0.486337\n", 100 | "\n", 101 | "💾 Preprocessed data saved to titanic_preprocessed.csv\n" 102 | ] 103 | }, 104 | { 105 | "output_type": "stream", 106 | "name": "stderr", 107 | "text": [ 108 | "/tmp/ipython-input-1085836434.py:15: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 109 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 110 | "\n", 111 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 112 | "\n", 113 | "\n", 114 | " df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)\n" 115 | ] 116 | } 117 | ], 118 | "source": [ 119 | "import pandas as pd\n", 120 | "from sklearn.preprocessing import LabelEncoder,StandardScaler\n", 121 | "\n", 122 | "df = pd.read_csv('Titanic.csv')\n", 123 | "print('First 5 Rows:')\n", 124 | "print(df.head())\n", 125 | "\n", 126 | "# ========================\n", 127 | "# Step 1: Check Missing Values\n", 128 | "# ========================\n", 129 | "\n", 130 | "print(\"\\n Missing Values Befroe Handling\")\n", 131 | "print(df.isnull().sum())\n", 132 | "# Fill Embarked missing values with mode\n", 133 | "df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)\n", 134 | "\n", 135 | "# Drop Cabin column (too many missing values)\n", 136 | "df.drop(columns=['Cabin'], inplace=True)\n", 137 | "\n", 138 | "print(\"\\n✅ Missing Values After Handling:\")\n", 139 | "print(df.isnull().sum())\n", 140 | "\n", 141 | "# ========================\n", 142 | "# Step 2: Encode Categorical Variables\n", 143 | "# ========================\n", 144 | "le = LabelEncoder()\n", 145 | "df['Sex'] = le.fit_transform(df['Sex']) # male=1, female=0\n", 146 | "df['Embarked'] = le.fit_transform(df['Embarked'])\n", 147 | "\n", 148 | "print(\"\\n🔢 Encoded Data Sample:\")\n", 149 | "print(df[['Sex', 'Embarked']].head())\n", 150 | "\n", 151 | "# ========================\n", 152 | "# Step 3: Feature Scaling\n", 153 | "# ========================\n", 154 | "scaler = StandardScaler()\n", 155 | "numeric_cols = ['Age', 'Fare']\n", 156 | "df[numeric_cols] = scaler.fit_transform(df[numeric_cols])\n", 157 | "\n", 158 | "print(\"\\n📏 Scaled Data Sample:\")\n", 159 | "print(df[numeric_cols].head())\n", 160 | "\n", 161 | "# ========================\n", 162 | "# Step 4: Save Preprocessed Data\n", 163 | "# ========================\n", 164 | "df.to_csv(\"titanic_preprocessed.csv\", index=False)\n", 165 | "print(\"\\n💾 Preprocessed data saved to titanic_preprocessed.csv\")" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "source": [], 171 | "metadata": { 172 | "id": "KQu_ee3M4RmU" 173 | }, 174 | "execution_count": null, 175 | "outputs": [] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "source": [ 180 | "import pandas as pd\n", 181 | "from sklearn.preprocessing import LabelEncoder , StandardScaler\n", 182 | "df = pd.read_csv('Student.csv')\n", 183 | "print(\"First 5 Rows\")\n", 184 | "print(df.head())\n", 185 | "print(\"\\n Missing Values before the handling\")\n", 186 | "print(df.isnull().sum())\n", 187 | "df['Age'].fillna(df['Age'].median(), inplace=True)\n", 188 | "df['Marks'].fillna(df['Marks'].mean(),inplace=True)\n", 189 | "df['Gender'].fillna(\"Unknown\", inplace=True)\n", 190 | "print(\"\\n✅ After Handling Nulls:\")\n", 191 | "print(df.isnull().sum())\n", 192 | "\n", 193 | "\n", 194 | "le=LabelEncoder()\n", 195 | "df['Gender']=le.fit_transform(df['Gender'])\n", 196 | "# print(\"\\n🔢 Encoded Data Sample:\")\n", 197 | "# print(df[['Gender']])\n", 198 | "\n", 199 | "df['Department'] = le.fit_transform(df['Department'])\n", 200 | "# print(\"\\n🔢 Encoded Data Sample:\")\n", 201 | "# print(df[['Department']])\n", 202 | "\n", 203 | "df=pd.get_dummies(df,columns=['City'],drop_first=True)\n", 204 | "# print(\"\\n🔢 Encoded Data Sample:\")\n", 205 | "# print(df)\n", 206 | "\n", 207 | "scaler=StandardScaler()\n", 208 | "numeric_cols=['Age','Marks']\n", 209 | "df[numeric_cols]=scaler.fit_transform(df[numeric_cols])\n", 210 | "print(\"\\n📏 Scaled Data Sample:\")\n", 211 | "print(df[numeric_cols].head())" 212 | ], 213 | "metadata": { 214 | "colab": { 215 | "base_uri": "https://localhost:8080/" 216 | }, 217 | "id": "bR5LNiLN8GXt", 218 | "outputId": "a21e39b5-dc99-458b-bd8f-20b736918fa6" 219 | }, 220 | "execution_count": 26, 221 | "outputs": [ 222 | { 223 | "output_type": "stream", 224 | "name": "stdout", 225 | "text": [ 226 | "First 5 Rows\n", 227 | " ID Name Gender Age Department Marks City\n", 228 | "0 1 Alice Female 20.0 Science 85.0 Chennai\n", 229 | "1 2 Bob Male 21.0 Commerce 78.0 Chennai\n", 230 | "2 3 Charlie Male NaN Science 92.0 Coimbatore\n", 231 | "3 4 David Male 23.0 Arts NaN Madurai\n", 232 | "4 5 Eva Female 22.0 Science 88.0 Chennai\n", 233 | "\n", 234 | " Missing Values before the handling\n", 235 | "ID 0\n", 236 | "Name 0\n", 237 | "Gender 1\n", 238 | "Age 2\n", 239 | "Department 0\n", 240 | "Marks 2\n", 241 | "City 0\n", 242 | "dtype: int64\n", 243 | "\n", 244 | "✅ After Handling Nulls:\n", 245 | "ID 0\n", 246 | "Name 0\n", 247 | "Gender 0\n", 248 | "Age 0\n", 249 | "Department 0\n", 250 | "Marks 0\n", 251 | "City 0\n", 252 | "dtype: int64\n", 253 | "\n", 254 | "📏 Scaled Data Sample:\n", 255 | " Age Marks\n", 256 | "0 -1.5 0.272664\n", 257 | "1 -0.5 -0.745282\n", 258 | "2 0.0 1.290610\n", 259 | "3 1.5 0.000000\n", 260 | "4 0.5 0.708927\n" 261 | ] 262 | }, 263 | { 264 | "output_type": "stream", 265 | "name": "stderr", 266 | "text": [ 267 | "/tmp/ipython-input-2300412600.py:8: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 268 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 269 | "\n", 270 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 271 | "\n", 272 | "\n", 273 | " df['Age'].fillna(df['Age'].median(), inplace=True)\n", 274 | "/tmp/ipython-input-2300412600.py:9: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 275 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 276 | "\n", 277 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 278 | "\n", 279 | "\n", 280 | " df['Marks'].fillna(df['Marks'].mean(),inplace=True)\n", 281 | "/tmp/ipython-input-2300412600.py:10: FutureWarning: A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.\n", 282 | "The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.\n", 283 | "\n", 284 | "For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.\n", 285 | "\n", 286 | "\n", 287 | " df['Gender'].fillna(\"Unknown\", inplace=True)\n" 288 | ] 289 | } 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "source": [], 295 | "metadata": { 296 | "id": "VsI7KxqS9U6v" 297 | }, 298 | "execution_count": null, 299 | "outputs": [] 300 | } 301 | ] 302 | } -------------------------------------------------------------------------------- /Cross_Validation_Practice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyMFN5WIqT4632eAqfR/Chwm", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 35, 32 | "metadata": { 33 | "id": "hAU-0-Xl91RE" 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "import numpy as np\n", 38 | "import pandas as pd\n", 39 | "import matplotlib.pyplot as plt\n", 40 | "import warnings\n", 41 | "warnings.filterwarnings('ignore')\n", 42 | "\n", 43 | "from sklearn.tree import DecisionTreeRegressor\n", 44 | "from sklearn.model_selection import train_test_split,cross_val_score,KFold\n", 45 | "from sklearn.metrics import accuracy_score,classification_report\n", 46 | "from sklearn.preprocessing import StandardScaler\n", 47 | "\n", 48 | "\n", 49 | "df=pd.read_csv(\"/content/sample_data/california_housing_train.csv\")\n", 50 | "\n", 51 | "X=df.drop('median_house_value',axis=1)\n", 52 | "y=df['median_house_value']\n", 53 | "\n", 54 | "scaler = StandardScaler()\n", 55 | "X_scaled= scaler.fit_transform(X)\n", 56 | "\n", 57 | "model = DecisionTreeRegressor(random_state=42)\n", 58 | "\n" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "source": [ 64 | "kf=KFold(n_splits=5,shuffle=True,random_state=42)\n", 65 | "cv=cross_val_score(model,X_scaled,y,cv=kf,scoring='r2')\n", 66 | "print(f\"Accuracy:{cv.mean()}\")" 67 | ], 68 | "metadata": { 69 | "colab": { 70 | "base_uri": "https://localhost:8080/" 71 | }, 72 | "id": "4qVl5aRCBidx", 73 | "outputId": "c7f53521-7511-46e8-8181-d5e76bb5e5b5" 74 | }, 75 | "execution_count": 39, 76 | "outputs": [ 77 | { 78 | "output_type": "stream", 79 | "name": "stdout", 80 | "text": [ 81 | "Accuracy:0.6419646344238668\n" 82 | ] 83 | } 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "source": [ 89 | "import numpy as np\n", 90 | "import pandas as pd\n", 91 | "import warnings\n", 92 | "warnings.filterwarnings('ignore')\n", 93 | "\n", 94 | "from sklearn.ensemble import RandomForestRegressor\n", 95 | "from sklearn.model_selection import KFold, cross_val_score\n", 96 | "from sklearn.preprocessing import StandardScaler\n", 97 | "\n", 98 | "# Load dataset\n", 99 | "df = pd.read_csv(\"/content/sample_data/california_housing_train.csv\")\n", 100 | "\n", 101 | "# Features & target\n", 102 | "X = df.drop('median_house_value', axis=1)\n", 103 | "y = df['median_house_value']\n", 104 | "\n", 105 | "# Scale features\n", 106 | "scaler = StandardScaler()\n", 107 | "X_scaled = scaler.fit_transform(X)\n", 108 | "\n", 109 | "# Model\n", 110 | "model = RandomForestRegressor(random_state=42)\n", 111 | "\n", 112 | "# Cross Validation\n", 113 | "kf = KFold(n_splits=5, shuffle=True, random_state=42)\n", 114 | "cv = cross_val_score(model, X_scaled, y, cv=kf, scoring='r2')\n", 115 | "\n", 116 | "print(\"Cross Validation R² Scores:\", cv)\n", 117 | "print(\"Average R² Score:\", np.mean(cv))\n" 118 | ], 119 | "metadata": { 120 | "colab": { 121 | "base_uri": "https://localhost:8080/" 122 | }, 123 | "id": "XhSFJdAAB98P", 124 | "outputId": "491b77b9-bc38-4b03-c3ea-b82ccc2bd522" 125 | }, 126 | "execution_count": 34, 127 | "outputs": [ 128 | { 129 | "output_type": "stream", 130 | "name": "stdout", 131 | "text": [ 132 | "Cross Validation R² Scores: [0.82221567 0.81649232 0.82249634 0.83059332 0.81128691]\n", 133 | "Average R² Score: 0.8206169125484534\n" 134 | ] 135 | } 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "source": [ 141 | "# Exercise: Machine Learning Finding Optimal Model and Hyperparameters\n", 142 | "# For digits dataset in sklearn.dataset, please try following classifiers and find out the one that gives best performance. Also find the optimal parameters for that classifier.\n", 143 | "\n", 144 | "# from sklearn import svm\n", 145 | "# from sklearn.ensemble import RandomForestClassifier\n", 146 | "# from sklearn.linear_model import LogisticRegression\n", 147 | "# from sklearn.naive_bayes import GaussianNB\n", 148 | "# from sklearn.naive_bayes import MultinomialNB\n", 149 | "# from sklearn.tree import DecisionTreeClassifier" 150 | ], 151 | "metadata": { 152 | "id": "36lotqPxJg86" 153 | }, 154 | "execution_count": 50, 155 | "outputs": [] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "source": [ 160 | "from sklearn import svm\n", 161 | "from sklearn.ensemble import RandomForestClassifier\n", 162 | "from sklearn.linear_model import LogisticRegression\n", 163 | "from sklearn.naive_bayes import GaussianNB\n", 164 | "from sklearn.naive_bayes import MultinomialNB\n", 165 | "from sklearn.tree import DecisionTreeClassifier\n", 166 | "\n", 167 | "from sklearn import datasets\n", 168 | "digits = datasets.load_digits()\n", 169 | "\n", 170 | "\n", 171 | "model_params = {\n", 172 | " 'svm': {\n", 173 | " 'model': svm.SVC(gamma='auto'),\n", 174 | " 'params' : {\n", 175 | " 'C': [1,10,20],\n", 176 | " 'kernel': ['rbf','linear']\n", 177 | " }\n", 178 | " },\n", 179 | " 'random_forest': {\n", 180 | " 'model': RandomForestClassifier(),\n", 181 | " 'params' : {\n", 182 | " 'n_estimators': [1,5,10]\n", 183 | " }\n", 184 | " },\n", 185 | " 'logistic_regression' : {\n", 186 | " 'model': LogisticRegression(solver='liblinear',multi_class='auto'),\n", 187 | " 'params': {\n", 188 | " 'C': [1,5,10]\n", 189 | " }\n", 190 | " },\n", 191 | " 'naive_bayes_gaussian': {\n", 192 | " 'model': GaussianNB(),\n", 193 | " 'params': {}\n", 194 | " },\n", 195 | " 'naive_bayes_multinomial': {\n", 196 | " 'model': MultinomialNB(),\n", 197 | " 'params': {}\n", 198 | " },\n", 199 | " 'decision_tree': {\n", 200 | " 'model': DecisionTreeClassifier(),\n", 201 | " 'params': {\n", 202 | " 'criterion': ['gini','entropy'],\n", 203 | "\n", 204 | " }\n", 205 | " }\n", 206 | "}\n", 207 | "\n", 208 | "\n", 209 | "\n", 210 | "from sklearn.model_selection import GridSearchCV\n", 211 | "import pandas as pd\n", 212 | "scores = []\n", 213 | "\n", 214 | "\n", 215 | "\n", 216 | "for model_name,mp in model_params.items():\n", 217 | " clf=GridSearchCV(mp['model'],mp['params'],cv=5,return_train_score=False)\n", 218 | " clf.fit(digits.data,digits.target)\n", 219 | " scores.append({\n", 220 | " 'model':model_name,\n", 221 | " 'best_score':clf.best_score_,\n", 222 | " 'best_params':clf.best_params_\n", 223 | " })\n", 224 | "\n", 225 | "\n", 226 | "df= pd.DataFrame(scores,columns=['model','best_params','best_score'])\n", 227 | "df" 228 | ], 229 | "metadata": { 230 | "colab": { 231 | "base_uri": "https://localhost:8080/", 232 | "height": 237 233 | }, 234 | "id": "ZoSeFgQxGReV", 235 | "outputId": "f8b39a26-fa2b-47cf-829f-8cf58e7c1ebf" 236 | }, 237 | "execution_count": 51, 238 | "outputs": [ 239 | { 240 | "output_type": "execute_result", 241 | "data": { 242 | "text/plain": [ 243 | " model best_params best_score\n", 244 | "0 svm {'C': 1, 'kernel': 'linear'} 0.947697\n", 245 | "1 random_forest {'n_estimators': 10} 0.914872\n", 246 | "2 logistic_regression {'C': 1} 0.922114\n", 247 | "3 naive_bayes_gaussian {} 0.806928\n", 248 | "4 naive_bayes_multinomial {} 0.870350\n", 249 | "5 decision_tree {'criterion': 'entropy'} 0.815268" 250 | ], 251 | "text/html": [ 252 | "\n", 253 | "
\n", 254 | "
\n", 255 | "\n", 268 | "\n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | "
modelbest_paramsbest_score
0svm{'C': 1, 'kernel': 'linear'}0.947697
1random_forest{'n_estimators': 10}0.914872
2logistic_regression{'C': 1}0.922114
3naive_bayes_gaussian{}0.806928
4naive_bayes_multinomial{}0.870350
5decision_tree{'criterion': 'entropy'}0.815268
\n", 316 | "
\n", 317 | "
\n", 318 | "\n", 319 | "
\n", 320 | " \n", 328 | "\n", 329 | " \n", 369 | "\n", 370 | " \n", 394 | "
\n", 395 | "\n", 396 | "\n", 397 | "
\n", 398 | " \n", 409 | "\n", 410 | "\n", 499 | "\n", 500 | " \n", 522 | "
\n", 523 | "\n", 524 | "
\n", 525 | " \n", 556 | " \n", 565 | " \n", 577 | "
\n", 578 | "\n", 579 | "
\n", 580 | "
\n" 581 | ], 582 | "application/vnd.google.colaboratory.intrinsic+json": { 583 | "type": "dataframe", 584 | "variable_name": "df", 585 | "summary": "{\n \"name\": \"df\",\n \"rows\": 6,\n \"fields\": [\n {\n \"column\": \"model\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"svm\",\n \"random_forest\",\n \"decision_tree\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"best_params\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"best_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.05864151308007648,\n \"min\": 0.8069281956050759,\n \"max\": 0.9476973073351903,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.9476973073351903,\n 0.9148715567935624,\n 0.8152677189724544\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" 586 | } 587 | }, 588 | "metadata": {}, 589 | "execution_count": 51 590 | } 591 | ] 592 | } 593 | ] 594 | } -------------------------------------------------------------------------------- /Logistice_Regression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyM6fZ6/wtva69xuSU4wXoti", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "id": "4T5K-wVEsyWE" 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "import pandas as pd\n", 38 | "import numpy as np\n", 39 | "import seaborn as sns\n", 40 | "import matplotlib.pyplot as plt\n", 41 | "\n", 42 | "df=pd.read_csv(\"framingham_heart_disease.csv\")\n", 43 | "df.head()" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "source": [ 49 | "df.isnull().sum()" 50 | ], 51 | "metadata": { 52 | "id": "jBBWdnZ3taS1" 53 | }, 54 | "execution_count": null, 55 | "outputs": [] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "source": [ 60 | "df= df.drop(['education'],axis=1)" 61 | ], 62 | "metadata": { 63 | "id": "oJStLTG8vu8R" 64 | }, 65 | "execution_count": 6, 66 | "outputs": [] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "source": [ 71 | "#Lets find out the mean values for replacing with missing values\n", 72 | "cigsPerDay_mean = round(df[\"cigsPerDay\"].mean())\n", 73 | "BPMeds_mean = round(df[\"BPMeds\"].mean())\n", 74 | "totChol_mean = round(df[\"totChol\"].mean())\n", 75 | "BMI_mean = round(df[\"BMI\"].mean())\n", 76 | "heartRate_mean = round(df[\"heartRate\"].mean())\n", 77 | "glucose_mean = round(df[\"glucose\"].mean())" 78 | ], 79 | "metadata": { 80 | "id": "u6zYXOWHv5bY" 81 | }, 82 | "execution_count": 10, 83 | "outputs": [] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "source": [ 88 | "df['cigsPerDay'].fillna(cigsPerDay_mean,inplace=True)\n", 89 | "df['BPMeds'].fillna(BPMeds_mean, inplace = True)\n", 90 | "df['totChol'].fillna(totChol_mean, inplace = True)\n", 91 | "df['BMI'].fillna(BMI_mean, inplace = True)\n", 92 | "df['heartRate'].fillna(heartRate_mean, inplace = True)\n", 93 | "df['glucose'].fillna(glucose_mean, inplace = True)" 94 | ], 95 | "metadata": { 96 | "id": "4Ghft7GwwHqE" 97 | }, 98 | "execution_count": null, 99 | "outputs": [] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "source": [ 104 | "X= df.drop('TenYearCHD',axis=1)\n", 105 | "\n", 106 | "y=df['TenYearCHD']" 107 | ], 108 | "metadata": { 109 | "id": "W2Ivib8IwlHu" 110 | }, 111 | "execution_count": 20, 112 | "outputs": [] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "source": [ 117 | "from sklearn.model_selection import train_test_split\n", 118 | "X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.75,random_state=42)\n", 119 | "\n", 120 | "\n", 121 | "print(X.shape)\n", 122 | "print(y.shape)\n", 123 | "print(X_train.shape)\n", 124 | "print(X_test.shape)\n", 125 | "print(y_train.shape)\n", 126 | "print(y_test.shape)" 127 | ], 128 | "metadata": { 129 | "colab": { 130 | "base_uri": "https://localhost:8080/" 131 | }, 132 | "id": "UfD7Bnadwxn_", 133 | "outputId": "3886e6c6-6952-4019-e866-9e923cb1fafb" 134 | }, 135 | "execution_count": 23, 136 | "outputs": [ 137 | { 138 | "output_type": "stream", 139 | "name": "stdout", 140 | "text": [ 141 | "(4238, 14)\n", 142 | "(4238,)\n", 143 | "(3178, 14)\n", 144 | "(1060, 14)\n", 145 | "(3178,)\n", 146 | "(1060,)\n" 147 | ] 148 | } 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "source": [ 154 | "from sklearn.linear_model import LogisticRegression\n", 155 | "\n", 156 | "classifier= LogisticRegression(class_weight='balanced')\n", 157 | "classifier.fit(X_train,y_train)" 158 | ], 159 | "metadata": { 160 | "colab": { 161 | "base_uri": "https://localhost:8080/", 162 | "height": 219 163 | }, 164 | "id": "NafeYLNjxe1f", 165 | "outputId": "f1b54ab3-ee5e-4f52-8816-764bee43bb12" 166 | }, 167 | "execution_count": 31, 168 | "outputs": [ 169 | { 170 | "output_type": "stream", 171 | "name": "stderr", 172 | "text": [ 173 | "/usr/local/lib/python3.12/dist-packages/sklearn/linear_model/_logistic.py:465: ConvergenceWarning: lbfgs failed to converge (status=1):\n", 174 | "STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT.\n", 175 | "\n", 176 | "Increase the number of iterations (max_iter) or scale the data as shown in:\n", 177 | " https://scikit-learn.org/stable/modules/preprocessing.html\n", 178 | "Please also refer to the documentation for alternative solver options:\n", 179 | " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", 180 | " n_iter_i = _check_optimize_result(\n" 181 | ] 182 | }, 183 | { 184 | "output_type": "execute_result", 185 | "data": { 186 | "text/plain": [ 187 | "LogisticRegression(class_weight='balanced')" 188 | ], 189 | "text/html": [ 190 | "
LogisticRegression(class_weight='balanced')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" 606 | ] 607 | }, 608 | "metadata": {}, 609 | "execution_count": 31 610 | } 611 | ] 612 | }, 613 | { 614 | "cell_type": "code", 615 | "source": [ 616 | "from sklearn.metrics import accuracy_score\n", 617 | "\n", 618 | "X_Train_Prediction = classifier.predict(X_train)\n", 619 | "training_data_accuracy = accuracy_score(X_Train_Prediction, y_train)\n", 620 | "print('Accuracy score of the training data : ', training_data_accuracy)" 621 | ], 622 | "metadata": { 623 | "colab": { 624 | "base_uri": "https://localhost:8080/" 625 | }, 626 | "id": "GWCa-YuhxrWA", 627 | "outputId": "a3deb494-74ee-4896-eed8-d9b2450e04bf" 628 | }, 629 | "execution_count": 33, 630 | "outputs": [ 631 | { 632 | "output_type": "stream", 633 | "name": "stdout", 634 | "text": [ 635 | "Accuracy score of the training data : 0.6526117054751416\n" 636 | ] 637 | } 638 | ] 639 | }, 640 | { 641 | "cell_type": "code", 642 | "source": [ 643 | "# accuracy on test data\n", 644 | "X_test_prediction = classifier.predict(X_test)\n", 645 | "test_data_accuracy = accuracy_score(X_test_prediction, y_test)\n", 646 | "\n", 647 | "print('Accuracy on Test data : ', test_data_accuracy)" 648 | ], 649 | "metadata": { 650 | "colab": { 651 | "base_uri": "https://localhost:8080/" 652 | }, 653 | "id": "aKmOFH53yLvz", 654 | "outputId": "3fd5d27b-eaf9-4486-8022-36399adaad61" 655 | }, 656 | "execution_count": 34, 657 | "outputs": [ 658 | { 659 | "output_type": "stream", 660 | "name": "stdout", 661 | "text": [ 662 | "Accuracy on Test data : 0.6320754716981132\n" 663 | ] 664 | } 665 | ] 666 | }, 667 | { 668 | "cell_type": "code", 669 | "source": [ 670 | "#Lets print the classification report\n", 671 | "from sklearn.metrics import classification_report\n", 672 | "\n", 673 | "print(classification_report(y_test, X_test_prediction))" 674 | ], 675 | "metadata": { 676 | "colab": { 677 | "base_uri": "https://localhost:8080/" 678 | }, 679 | "id": "az522fqSyV9Z", 680 | "outputId": "df1963a6-a746-495f-8013-dd85453b519f" 681 | }, 682 | "execution_count": 35, 683 | "outputs": [ 684 | { 685 | "output_type": "stream", 686 | "name": "stdout", 687 | "text": [ 688 | " precision recall f1-score support\n", 689 | "\n", 690 | " 0 0.92 0.63 0.75 908\n", 691 | " 1 0.23 0.66 0.34 152\n", 692 | "\n", 693 | " accuracy 0.63 1060\n", 694 | " macro avg 0.57 0.64 0.54 1060\n", 695 | "weighted avg 0.82 0.63 0.69 1060\n", 696 | "\n" 697 | ] 698 | } 699 | ] 700 | } 701 | ] 702 | } -------------------------------------------------------------------------------- /Linear_Rgression_Basics_Prg_.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "toc_visible": true, 8 | "authorship_tag": "ABX9TyPdaga/wyMDEPmNX/C/x8gJ", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | } 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "metadata": { 23 | "id": "view-in-github", 24 | "colab_type": "text" 25 | }, 26 | "source": [ 27 | "\"Open" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 10, 33 | "metadata": { 34 | "colab": { 35 | "base_uri": "https://localhost:8080/" 36 | }, 37 | "id": "54IhFr7KZwr7", 38 | "outputId": "f86675c4-7289-4ad0-a378-158ac20b3b8c" 39 | }, 40 | "outputs": [ 41 | { 42 | "output_type": "stream", 43 | "name": "stdout", 44 | "text": [ 45 | "(5, 1)\n", 46 | "(5,)\n", 47 | "If the Student study for 8 hours he score mark of: 65\n" 48 | ] 49 | } 50 | ], 51 | "source": [ 52 | "import numpy as np\n", 53 | "from sklearn.linear_model import LinearRegression\n", 54 | "import matplotlib.pyplot as plt\n", 55 | "\n", 56 | "hours = np.array([[1],[2],[3],[4],[5]])\n", 57 | "marks=np.array([30,35,40,45,50])\n", 58 | "print(hours.shape)\n", 59 | "print(marks.shape)\n", 60 | "\n", 61 | "model = LinearRegression()\n", 62 | "model.fit(hours,marks)\n", 63 | "\n", 64 | "predict= model.predict([[8]])\n", 65 | "\n", 66 | "print(f\"If the Student study for 8 hours he score mark of: {round(predict[0])}\")" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "source": [ 72 | "pred= model.predict(hours)\n", 73 | "plt.figure(figsize=(8,5))\n", 74 | "plt.scatter(hours,marks, color='blue',label = \"Actual Marks\")\n", 75 | "plt.plot(hours,pred,color='red',label=\"Predicted Marks\")\n", 76 | "plt.scatter(8, predict, color='green', label='Prediction for 8 hrs', marker='o', s=100)\n", 77 | "plt.xlabel(\"Hours\")\n", 78 | "plt.ylabel(\"Marks\")\n", 79 | "plt.legend()\n", 80 | "plt.grid(True)\n", 81 | "plt.show()" 82 | ], 83 | "metadata": { 84 | "colab": { 85 | "base_uri": "https://localhost:8080/", 86 | "height": 465 87 | }, 88 | "id": "hirmEWlSbVlV", 89 | "outputId": "9020021e-9b47-4787-ec96-48d03259e9c7" 90 | }, 91 | "execution_count": 19, 92 | "outputs": [ 93 | { 94 | "output_type": "display_data", 95 | "data": { 96 | "text/plain": [ 97 | "
" 98 | ], 99 | "image/png": "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vvrqq1ue9+mnn2bJkiVMmzaNAwcOMGfOHHx9fQkODubLL78E4NChQ8TExDB16tQbHqNXr17s3LmTb775hh9//BGbzUaXLl2wWq3258THx/Pee+/xySefsHHjRk6ePMlLL710w+MFBwcTExODv78/U6ZMISYmhq5du/L777/Trl077r33Xn755RdmzZrF/PnzGTduXLrXL1q0CA8PDzZv3szs2bNveI5GjRqxa9cue1A9duwYa9asoV27drfsV2bex/Xfu507dzJw4EDGjh3LoUOH+N///kfTpk1veR4REZGCSKsKZIHNZuOD7R9k67XTtk1jQIMBWCyWHK9p3bp1REREMGDAAPv+QoUKMW/ePDw8PAD49NNPSU1NZd68efYaFixYQEBAAFFRUTz44INMmTKFkSNH0qlTJwBmz55NRMTNpzn8+uuvLFu2jMjISFq1agVApUqV7I8XLVoUgBIlStz0T/WHDx/mm2++YfPmzTRq1Mhea/ny5VmxYgVdu3YFwGq1Mnv2bCpXrgzAiy++yNixY294TFdXV0qVKoXFYqFw4cKUKlUKMEYtg4ODmT59OhaLhZCQEM6cOcPw4cN54403cHExfo+rWrUq77zzzk3fN0D37t25cOECTZo0wWazce3aNfr27XvbqQKZeR/Xf++WL19OoUKFePjhh/Hz86N8+fLcc889tzyPiIhIQaQR1yy4mHCRo38dzTCn9XZs2Dj611H+TPgzx2pZtWoVvr6+eHl50bZtW7p27cro0aPtj9eqVcsefAB++eUXjhw5gp+fH76+vvj6+lK0aFESExM5evQoly9fJiYmhoYNG9pf4+bmRv369W9aQ3R0NK6urjzwwAPZfh8HDhzAzc0t3XkDAwOpUqUKBw8etO/z8fGxhz2A0qVLc/78+SyfKywsLN0vD40bNyYuLo7Tp0/b99WrV++2x4qKimL8+PHMnDmTn376ieXLl7N69erbXnSWmfdx/feudevWlC9fnkqVKvHUU0+xePFi4uPjb1ujiIhIQaMR1yyIS45z6PVXkq8Q6BOYI7U0b96cWbNm4eHhQVBQEG5u6b+VhQoVSrcdFxdHvXr1WLx4cYZjFS9ePFs1eHt7Z+t12eHunn5tXIvFkmH+bU65vnc38vrrr/PUU0/x7LPPAkbYvHr1Kv/5z3949dVX7aO318vM+7j+/H5+fvz0009E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zLDf3d09T3948/p8BZF66Bj1z3HqoWPUP8eph45R/xyXVz3M7Dny1TqucXFxHD16lNKlS9/w8ejoaICbPi4iIiIiBZepI64vvfQSHTp0oHz58pw5c4ZRo0bh6upKt27dOHr0KOHh4bRr147AwEB2797NkCFDaNq0KbVr1zazbBERERExganB9fTp03Tr1o2LFy9SvHhxmjRpwtatWylevDiJiYl89913TJkyhatXrxIcHEznzp157bXXzCxZRERERExianBdunTpTR8LDg5mw4YNeViNiIiIiORn+WqOq4iIiIjIzSi4ioiIiIhTUHAVEREREaeg4CoiIiIiTkHBVUREREScgoKriIiIiDgFBVcRERERcQoKriIiIiLiFBRcRURERMQpKLiKiIiIiFNQcBURERERp6DgKiIiIiJOQcFVRERERJyCgquIiIiIOAUFVxERERFxCgquIiIiIuIUFFxFRERExCkouIqIiIiIU1BwFRERERGnoOAqIiIiIk5BwVVEREREnIKCq4iIiIg4BQVXEREREXEKCq4iIiIi4hQUXEVERETEKSi4ioiIiIhTUHAVEREREaeg4CoiIiIiTkHBVUREREScgoKriIiIiDgFBVcRERERcQoKriIiIiLiFBRcRURERMQpKLiKiIiIiFNQcBURERERp6DgKiIiIiJOQcFVRERERJyCgquIiIiIOAUFVxERyTEpKbBpk/H1pk3GtohITjE1uI4ePRqLxZLuIyQkxP54YmIi/fv3JzAwEF9fXzp37sy5c+dMrFhERG5m+XKoUAHatze227c3tpcvN7MqESlITB9xrVGjBjExMfaPTWm/qgNDhgxh5cqVfP7552zYsIEzZ87QqVMnE6sVEZEbWb4cHnsMTp9Ov//33439Cq8ikhPcTC/AzY1SpUpl2H/58mXmz59PeHg4LVq0AGDBggWEhoaydetW7rvvvrwuVUREbiAlBQYNApvtn31uCQmAsc9igcGDoWNHcHU1p0YRKRhMD66HDx8mKCgILy8vwsLCmDBhAuXKlWPXrl1YrVZatWplf25ISAjlypXjxx9/vGlwTUpKIikpyb4dGxsLgNVqxWq15u6b+fs8//4sWaceOkb9c5x6mDWbNsHFi+DtDQG2vxifOpLmA76huFdz/qAoABcuwMaN0KSJycU6Cf0MOkb9c1xe9zCz57HYbP/+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Uf8cpx46Rv1znHroGPXPcXndQ5vNxpUrVwgKCsLF5eYzWQv8iKuLiwtly5bN8/P6+/vrXxYHqYeOUf8cpx46Rv1znHroGPXPcXnZw1uNtKbRxVkiIiIi4hQUXEVERETEKSi45jBPT09GjRqFp6en2aU4LfXQMeqf49RDx6h/jlMPHaP+OS6/9rDAX5wlIiIiIgWDRlxFRERExCkouIqIiIiIU1BwFRERERGnoOAqIiIiIk5BwTWHbNy4kQ4dOhAUFITFYmHFihVml+RUJkyYwL333oufnx8lSpTgkUce4dChQ2aX5VRmzZpF7dq17YtFh4WFsXbtWrPLclpvv/02FouFwYMHm12K0xg9ejQWiyXdR0hIiNllOZXff/+dJ598ksDAQLy9valVqxY7d+40uyynUaFChQw/gxaLhf79+5tdmlNISUnh9ddfp2LFinh7e1O5cmXefPNN8tN1/AX+zll55erVq9SpU4fevXvTqVMns8txOhs2bKB///7ce++9XLt2jVdeeYUHH3yQ/fv3U6hQIbPLcwply5bl7bffpmrVqthsNhYtWkTHjh35+eefqVGjhtnlOZUdO3YwZ84cateubXYpTqdGjRp899139m03N/1vJrP++usvGjduTPPmzVm7di3Fixfn8OHDFClSxOzSnMaOHTtISUmxb+/du5fWrVvz+OOPm1iV85g4cSKzZs1i0aJF1KhRg507d/LMM89QuHBhBg4caHZ5gIJrjmnbti1t27Y1uwyn9b///S/d9sKFCylRogS7du2iadOmJlXlXDp06JBu+6233mLWrFls3bpVwTUL4uLi6NGjBx9++CHjxo0zuxyn4+bmRqlSpcwuwylNnDiR4OBgFixYYN9XsWJFEytyPsWLF0+3/fbbb1O5cmUeeOABkypyLlu2bKFjx460b98eMEawlyxZwvbt202u7B+aKiD50uXLlwEoWrSoyZU4p5SUFJYuXcrVq1cJCwszuxyn0r9/f9q3b0+rVq3MLsUpHT58mKCgICpVqkSPHj04efKk2SU5jW+++Yb69evz+OOPU6JECe655x4+/PBDs8tyWsnJyXz66af07t0bi8VidjlOoVGjRqxbt45ff/0VgF9++YVNmzblq4E5jbhKvpOamsrgwYNp3LgxNWvWNLscp7Jnzx7CwsJITEzE19eXr776irvuusvsspzG0qVL+emnn9ixY4fZpTilhg0bsnDhQqpXr05MTAxjxozh/vvvZ+/evfj5+ZldXr537NgxZs2axdChQ3nllVfYsWMHAwcOxMPDg549e5pdntNZsWIFly5dolevXmaX4jRGjBhBbGwsISEhuLq6kpKSwltvvUWPHj3MLs1OwVXynf79+7N37142bdpkdilOp3r16kRHR3P58mW++OILevbsyYYNGxReM+HUqVMMGjSIyMhIvLy8zC7HKf17VKZ27do0bNiQ8uXLs2zZMvr06WNiZc4hNTWV+vXrM378eADuuece9u7dy+zZsxVcs2H+/Pm0bduWoKAgs0txGsuWLWPx4sWEh4dTo0YNoqOjGTx4MEFBQfnmZ1DBVfKVF198kVWrVrFx40bKli1rdjlOx8PDgypVqgBQr149duzYwdSpU5kzZ47JleV/u3bt4vz589StW9e+LyUlhY0bNzJ9+nSSkpJwdXU1sULnExAQQLVq1Thy5IjZpTiF0qVLZ/glMzQ0lC+//NKkipzXb7/9xnfffcfy5cvNLsWp/Pe//2XEiBE88cQTANSqVYvffvuNCRMmKLiK/JvNZmPAgAF89dVXREVF6YKEHJKamkpSUpLZZTiFli1bsmfPnnT7nnnmGUJCQhg+fLhCazbExcVx9OhRnnrqKbNLcQqNGzfOsAzgr7/+Svny5U2qyHktWLCAEiVK2C8yksyJj4/HxSX95U+urq6kpqaaVFFGCq45JC4uLt2owvHjx4mOjqZo0aKUK1fOxMqcQ//+/QkPD+frr7/Gz8+Ps2fPAlC4cGG8vb1Nrs45jBw5krZt21KuXDmuXLlCeHg4UVFRREREmF2aU/Dz88swp7pQoUIEBgZqrnUmvfTSS3To0IHy5ctz5swZRo0ahaurK926dTO7NKcwZMgQGjVqxPjx4+nSpQvbt29n7ty5zJ071+zSnEpqaioLFiygZ8+eWo4tizp06MBbb71FuXLlqFGjBj///DOTJ0+md+/eZpf2D5vkiO+//94GZPjo2bOn2aU5hRv1DrAtWLDA7NKcRu/evW3ly5e3eXh42IoXL25r2bKl7dtvvzW7LKf2wAMP2AYNGmR2GU6ja9euttKlS9s8PDxsZcqUsXXt2tV25MgRs8tyKitXrrTVrFnT5unpaQsJCbHNnTvX7JKcTkREhA2wHTp0yOxSnE5sbKxt0KBBtnLlytm8vLxslSpVsr366qu2pKQks0uzs9hs+eh2CCIiIiIiN6F1XEVERETEKSi4ioiIiIhTUHAVEREREaeg4CoiIiIiTkHBVUREREScgoKriIiIiDgFBVcRERERcQoKriIiIiLiFBRcRUTySK9evXjkkUcy7I+KisJisXDp0qU8r0lExJkouIqI3AGsVqvZJYiIOEzBVUQkn/nyyy+pUaMGnp6eVKhQgUmTJqV73GKxsGLFinT7AgICWLhwIQAnTpzAYrHw2Wef8cADD+Dl5cXixYv57bff6NChA0WKFKFQoULUqFGDNWvW5NG7EhFxnJvZBYiIyD927dpFly5dGD16NF27dmXLli3069ePwMBAevXqlaVjjRgxgkmTJnHPPffg5eXFc889R3JyMhs3bqRQoULs378fX1/f3HkjIiK5QMFVRCQPrVq1KkNYTElJsX89efJkWrZsyeuvvw5AtWrV2L9/P++++26Wg+vgwYPp1KmTffvkyZN07tyZWrVqAVCpUqVsvgsREXNoqoCISB5q3rw50dHR6T7mzZtnf/zAgQM0btw43WsaN27M4cOH0wXczKhfv3667YEDBzJu3DgaN27MqFGj2L17d/bfiIiICRRcRUTyUKFChahSpUq6jzJlymTpGBaLBZvNlm7fjS6+KlSoULrtZ599lmPHjvHUU0+xZ88e6tevzwcffJD1NyEiYhIFVxGRfCQ0NJTNmzen27d582aqVauGq6srAMWLFycmJsb++OHDh4mPj8/U8YODg+nbty/Lly9n2LBhfPjhhzlXvIhILtMcVxGRfGTYsGHce++9vPnmm3Tt2pUff/yR6dOnM3PmTPtzWrRowfTp0wkLCyMlJYXhw4fj7u5+22MPHjyYtm3bUq1aNf766y++//57QkNDc/PtiIjkKI24iojkI3Xr1mXZsmUsXbqUmjVr8sYbbzB27Nh0F2ZNmjSJ4OBg7r//frp3785LL72Ej4/PbY+dkpJC//79CQ0N5aGHHqJatWrpArGISH5nsV0/UUpEREREJB/SiKuIiIiIOAUFVxERERFxCgquIiIiIuIUFFxFRERExCkouIqIiIiIU1BwFRERERGnoOAqIiIiIk5BwVVEREREnIKCq4iIiIg4BQVXEREREXEKCq4iIiIi4hQUXEVERETEKfw/LGuP5kHX28EAAAAASUVORK5CYII=\n" 100 | }, 101 | "metadata": {} 102 | } 103 | ] 104 | } 105 | ] 106 | } -------------------------------------------------------------------------------- /Model_Wizard.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "authorship_tag": "ABX9TyNxBNAVe0EAs7XxssvHv7fR", 8 | "include_colab_link": true 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": "view-in-github", 23 | "colab_type": "text" 24 | }, 25 | "source": [ 26 | "\"Open" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 5, 32 | "metadata": { 33 | "id": "WqaAqFxMLIdM" 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "import pandas as pd\n", 38 | "import numpy as np\n", 39 | "from sklearn.model_selection import RandomizedSearchCV\n", 40 | "from sklearn.svm import SVC, SVR\n", 41 | "from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n", 42 | "from sklearn.linear_model import LogisticRegression, LinearRegression\n", 43 | "from sklearn.naive_bayes import GaussianNB, MultinomialNB\n", 44 | "from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor\n", 45 | "\n", 46 | "def auto_ml_genie(X, y, n_iter=10, cv=3):\n", 47 | " # Detect problem type\n", 48 | " problem_type = \"classification\"\n", 49 | " if np.issubdtype(y.dtype, np.number) and np.unique(y).size > 20:\n", 50 | " problem_type = \"regression\"\n", 51 | "\n", 52 | " print(f\"👉 Detected Problem Type: {problem_type}\")\n", 53 | "\n", 54 | " if problem_type == \"classification\":\n", 55 | " model_params = {\n", 56 | " 'svm': {'model': SVC(gamma='auto'), 'params': {'C':[1,10],'kernel':['rbf','linear']}},\n", 57 | " 'random_forest': {'model': RandomForestClassifier(), 'params': {'n_estimators':[10,50]}},\n", 58 | " 'logistic_regression': {'model': LogisticRegression(solver='liblinear',multi_class='auto'), 'params': {'C':[1,5]}},\n", 59 | " 'naive_bayes_gaussian': {'model': GaussianNB(), 'params': {}},\n", 60 | " 'naive_bayes_multinomial': {'model': MultinomialNB(), 'params': {}},\n", 61 | " 'decision_tree': {'model': DecisionTreeClassifier(), 'params': {'criterion':['gini','entropy'],'max_depth':[None,5]}}\n", 62 | " }\n", 63 | " scoring = \"accuracy\"\n", 64 | " else: # regression\n", 65 | " model_params = {\n", 66 | " 'svm': {'model': SVR(), 'params': {'C':[1,10],'kernel':['rbf','linear']}},\n", 67 | " 'random_forest': {'model': RandomForestRegressor(), 'params': {'n_estimators':[10,50]}},\n", 68 | " 'linear_regression': {'model': LinearRegression(), 'params': {}},\n", 69 | " 'decision_tree': {'model': DecisionTreeRegressor(), 'params': {'max_depth':[None,5]}}\n", 70 | " }\n", 71 | " scoring = \"r2\"\n", 72 | "\n", 73 | " results = []\n", 74 | " for name, mp in model_params.items():\n", 75 | " clf = RandomizedSearchCV(mp['model'], mp['params'], n_iter=n_iter, cv=cv, scoring=scoring, n_jobs=-1)\n", 76 | " clf.fit(X, y)\n", 77 | " results.append({'model': name, 'best_score': clf.best_score_, 'best_params': clf.best_params_})\n", 78 | "\n", 79 | " df = pd.DataFrame(results).sort_values(by='best_score', ascending=False).reset_index(drop=True)\n", 80 | " return df" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "source": [ 86 | "from sklearn import datasets\n", 87 | "\n", 88 | "from warnings import filterwarnings\n", 89 | "filterwarnings('ignore')\n", 90 | "\n", 91 | "# Classification example\n", 92 | "digits = datasets.load_digits()\n", 93 | "results_class = auto_ml_genie(digits.data, digits.target)\n", 94 | "\n", 95 | "df = pd.DataFrame(results_class)\n", 96 | "print(df)\n", 97 | "\n", 98 | "import seaborn as sns\n", 99 | "import matplotlib.pyplot as plt\n", 100 | "\n", 101 | "# Sort models by accuracy for better visual flow\n", 102 | "df_sorted = df.sort_values(by='best_score', ascending=False)\n", 103 | "\n", 104 | "plt.figure(figsize=(10, 6))\n", 105 | "sns.barplot(x='best_score', y='model', data=df_sorted, palette='viridis')\n", 106 | "\n", 107 | "plt.xlabel('Accuracy Score')\n", 108 | "plt.ylabel('Model')\n", 109 | "plt.title('Model Accuracy Comparison')\n", 110 | "plt.xlim(0, 1) # Optional: set limits for better scale\n", 111 | "plt.tight_layout()\n", 112 | "plt.legend()\n", 113 | "plt.show()\n" 114 | ], 115 | "metadata": { 116 | "colab": { 117 | "base_uri": "https://localhost:8080/", 118 | "height": 899 119 | }, 120 | "id": "pbmDScljMEUT", 121 | "outputId": "9aed845c-356a-4015-81b4-ffa9e023a1b5" 122 | }, 123 | "execution_count": 18, 124 | "outputs": [ 125 | { 126 | "output_type": "stream", 127 | "name": "stdout", 128 | "text": [ 129 | "👉 Detected Problem Type: classification\n", 130 | " model best_score \\\n", 131 | "0 svm 0.943795 \n", 132 | "1 random_forest 0.935448 \n", 133 | "2 logistic_regression 0.919310 \n", 134 | "3 naive_bayes_multinomial 0.870896 \n", 135 | "4 naive_bayes_gaussian 0.813578 \n", 136 | "5 decision_tree 0.776294 \n", 137 | "\n", 138 | " best_params \n", 139 | "0 {'kernel': 'linear', 'C': 1} \n", 140 | "1 {'n_estimators': 50} \n", 141 | "2 {'C': 1} \n", 142 | "3 {} \n", 143 | "4 {} \n", 144 | "5 {'max_depth': None, 'criterion': 'gini'} \n" 145 | ] 146 | }, 147 | { 148 | "output_type": "display_data", 149 | "data": { 150 | "text/plain": [ 151 | "
" 152 | ], 153 | "image/png": "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ez4GDhyo7t27q169eho/fry1npQcPnxY1apVs1lWrVo16+/qnrJly1p/dnNzk6enp86fP//QfocNG6arV69aX2fOnHloWwAAAADPD0L3v1RISIh2796tqlWraunSpSpevLh++umnVG//pA8Pc3Nzs3l/48YN5c2bV5GRkTav6OhoDR48+In7rlixYrK+jx49qvbt20t69PkYOXKkDh06pCZNmmjr1q0qWbKkVq5c+QRHr2TT0y0WyyOn5js5OcnT09PmBQAAAACE7icUEBCghIQEmweUXbx4UdHR0SpZsqQkyd/fX/v27bPZ7sH3KSlfvryGDRumXbt2qXTp0lq0aJEkydHRUYmJiY/ctmzZsoqMjHzkfchpUaFCBf35559ycHBQ0aJFbV45c+aUlP7jrFChgo4dO6ZcuXIl69vLy8va7mHnQ7o7ZX/AgAHauHGjWrZsqZCQkBT3FRAQoIiICJtlERER1t8VAAAAAGQkQvcTKlasmJo1a6YePXpo586dioqK0ptvvqn8+fOrWbNmkqR3331Xa9eu1eTJk3Xs2DHNmTNH69ats96//KBTp05p2LBh2r17t06fPq2NGzfq2LFj1vuYCxUqpFOnTikyMlJ///23bt++nayPoKAg5cmTR82bN1dERIROnjyp5cuXa/fu3ek6znr16qlKlSpq3ry5Nm7cqJiYGO3atUsffvih9Unh7777rubPn68FCxbo2LFj+uSTT/TLL7889Djv6dChg3LmzKlmzZppx44dOnXqlMLDw9W3b1/98ccfjzwft27dUp8+fRQeHq7Tp08rIiJC+/bts7nn+36DBw9WaGioZs2apWPHjmny5MlasWKF9X57AAAAAMhIhO4MEBISoooVK6pp06aqUqWKDMPQ2rVrrVOUq1WrptmzZ2vy5MkqV66c1q9frwEDBli/iutBrq6uOnLkiN544w0VL15cPXv2VO/evfXWW29Jkt544w01bNhQtWvXlq+vrxYvXpysD0dHR23cuFG5cuVS48aNVaZMGY0fP1729vbpOkaLxaK1a9eqRo0a6tKli4oXL6527drp9OnTyp07t6S74XnYsGEaNGiQKlSooFOnTik4OPihx3n/8W7fvl0FChRQy5YtFRAQoG7duumff/6Rp6fnI8+Hvb29Ll68qE6dOql48eJq06aNGjVq9NCHmjVv3lxTp07VxIkT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as6cOfr2229TfU7u5+fnp+XLl0uSoqOjde7cuUcG2EmTJqlSpUo6ePCgevXqpXfeeUfR0dGSpJs3b6pBgwbKnj279u3bp2XLlmnz5s3q06ePTR9bt27V2bNntX37dk2ePFkjRoxQ06ZNlT17du3Zs0dvv/223nrrLf3xxx8p1pCUlKQXXnhBy5Yt0++//67hw4frgw8+0DfffJOucwAAAAAA92T69PKyZctqxIgRkqRixYppxowZ2rJli+rXr59sVPSTTz7R22+/rZkzZ6bYV4cOHTRjxgx9/PHHku6Ofh84cEBff/21JGnGjBkqX768xo4da93myy+/lJ+fn44eParixYs/tl4/Pz999tlnslgs8vf316+//qrPPvtMPXr0kCR17drV2rZw4cKaNm2aXn75Zd24cUPu7u4KDg7W8OHDtXfvXlWuXFnx8fFatGiRdfR7586d2rt3r86fPy8nJydJ0sSJE7Vq1Sp9++236tmzp2JjYzV48GCVKFHCet5SKz4+XrNmzbKO/rdq1UoLFy7UX3/9JXd3d5UsWVK1a9fWtm3b1LZt21T3e4+9vb11GnmuXLke+6C7xo0bq1evXpKk999/X5999pm2bdsmf39/LVq0SP/884+++uorubm5Sbr7OwwMDNSnn36q3LlzS7o7bX3atGmys7OTv7+/JkyYoLi4OH3wwQeSpGHDhmn8+PHauXOn2rVrl6yGbNmyadSoUdb3L774onbv3q1vvvkm1X+QuX37tm7fvm19f+3atVRtBwAAAODZlukj3WXLlrV5nzdvXut07M2bN6tu3brKnz+/PDw81LFjR128eFFxcXEp9tWuXTvFxMTop59+knR3lLtChQrWcBoVFaVt27bJ3d3d+rq37sSJE6mq99VXX5XFYrG+r1Klio4dO2adjn3gwAEFBgaqQIEC8vDwUM2aNSVJsbGxkqR8+fKpSZMm+vLLLyVJ33//vW7fvq3WrVtba7xx44Zy5MhhU+epU6esNQ4cOFDdu3dXvXr1NH78+FTXLkmurq420+1z586tQoUKyd3d3WbZvd+B2e7//VssFuXJk8e678OHD6tcuXLWwC1J1apVU1JSknU0XJJKlSolO7v/fynnzp1bZcqUsb63t7dXjhw5HnlMn3/+uSpWrChfX1+5u7vriy++sP7OUmPcuHHy8vKyvvz8/FK9LQAAAIBnV6aH7genRVssFiUlJSkmJkZNmzZV2bJltXz5ch04cECff/65JOnOnTsp9pUnTx7VqVNHixYtkiQtWrRIHTp0sK6/ceOGAgMDFRkZafM6duyYatSo8cTHcm86tKenp8LCwrRv3z6tXLkyWc3du3fXkiVLdOvWLYWEhKht27ZydXW11pg3b95kNUZHR2vw4MGSpJEjR+rQoUNq0qSJtm7dqpIlS1r38zgpne+H/Q7uf3//fevS3RHzjPC4fae3j7T0u2TJEg0aNEjdunXTxo0bFRkZqS5dujz0OkvJsGHDdPXqVevrzJkzaToGAAAAAM+mTJ9e/jAHDhxQUlKSJk2aZB3FTM09th06dNCQIUMUFBSkkydP2kwnrlChgpYvX65ChQrJwSF9h75nzx6b9z/99JOKFSsme3t7HTlyRBcvXtT48eOtI50pPeCscePGcnNz06xZs7R+/Xpt377dpsY///xTDg4OKlSo0EPrKF68uIoXL64BAwYoKChIISEhatGiRbqO6XF8fX117tw56/tjx449dLaBJDk6OkqSzcPY0iMgIEChoaG6efOmdbQ7IiLCOo08o0RERKhq1arWae5S6mc+3OPk5GS9HQAAAAAA7sn0ke6HKVq0qOLj4zV9+nSdPHlSCxcu1OzZsx+7XcuWLXX9+nW98847ql27tvLly2dd17t3b126dElBQUHat2+fTpw4oQ0bNqhLly6pDoixsbEaOHCgoqOjtXjxYk2fPl39+vWTJBUoUECOjo7WmlevXm29v/x+9vb2Cg4O1rBhw1SsWDFVqVLFuq5evXqqUqWKmjdvro0bNyomJka7du3Shx9+qP379+vWrVvq06ePwsPDdfr0aUVERGjfvn0KCAhIVf3pUadOHc2YMUMHDx7U/v379fbbbz/ywW0FCxaUxWLRmjVrdOHCBZunjadFhw4d5OzsrM6dO+u3337Ttm3b9O6776pjx47W+7kzQrFixbR//35t2LBBR48e1UcffaR9+/ZlWP8AAAAAnl//2tBdrlw5TZ48WZ9++qlKly6tsLAwjRs37rHbeXh4KDAwUFFRUTZTy6W791NHREQoMTFRr7/+usqUKaP+/fvL29vb5p7gR+nUqZNu3bqlypUrq3fv3urXr5969uwp6e6IcGhoqJYtW6aSJUtq/Pjxyb4e7J5u3brpzp076tKli81yi8WitWvXqkaNGurSpYuKFy+udu3a6fTp08qdO7fs7e118eJFderUScWLF1ebNm3UqFEjmweBZbRJkybJz89P1atXV/v27TVo0CDrdPiU5M+fX6NGjdLQoUOVO3fuZE8bTy1XV1dt2LBBly5d0ssvv6xWrVqpbt26mjFjRnoPJUVvvfWWWrZsqbZt2+qVV17RxYsXbUa9AQAAACC9LMaDN+viqdixY4fq1q2rM2fOZOioLf4drl27Ji8vL5X+9H3ZOzPtHAAAAKkT2de8wTQ83r3P8VevXpWnp2eG9Pmvvaf7WXX79m1duHBBI0eOVOvWrQncAAAAAPAM+9dOL3/aYmNjbb6i68FXWr4+6lEWL16sggUL6sqVK5owYUKG9HlPo0aNHlr//d9NDgAAAAB4Ohjp/j/58uVTZGTkI9dnhODgYAUHB2dIXw+aN2+ebt26leI6Hx8fU/YJAAAAAHg4Qvf/cXBwUNGiRTO7jCeSP3/+zC4BAAAAAHAfppcDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEofMLgB4lkW8/YE8PT0zuwwAAAAAmYSRbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAAMAkhG4AAAAAAExC6AYAAAAAwCSEbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAAMAkhG4AAAAAAExC6AYAAAAAwCSEbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAAMAkDpldAPAs67buQ2VzdcrsMgAAAJ5biwInZnYJeM4x0g0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdDwgNDZW3t/dT21+tWrXUv3//p7a/51GhQoU0ZcqUzC4DAAAAwHPIIbML+Ldp27atGjdunNllIAPt27dPbm5umV0GAAAAgOcQofsBLi4ucnFxyewykIF8fX0zuwQAAAAAz6lnbnp5rVq11LdvXw0ZMkQ+Pj7KkyePRo4caV0/efJklSlTRm5ubvLz81OvXr1048YN6/r7p5cfPXpUFotFR44csdnHZ599piJFiljf//bbb2rUqJHc3d2VO3dudezYUX///Xeqa05ISFCfPn3k5eWlnDlz6qOPPpJhGNb1CxcuVKVKleTh4aE8efKoffv2On/+vCTJMAwVLVpUEydOtOkzMjJSFotFx48flyRduXJF3bt3l6+vrzw9PVWnTh1FRUVZ20dFRal27dry8PCQp6enKlasqP3796eq/rlz58rPz0+urq5q0aKFJk+ebDNF/8SJE2rWrJly584td3d3vfzyy9q8ebNNHxaLRatWrbJZ5u3trdDQUEnSnTt31KdPH+XNm1fOzs4qWLCgxo0bZz0HI0eOVIECBeTk5KR8+fKpb9++1n4enF6e2mtgw4YNCggIkLu7uxo2bKhz586l6nwAAAAAwD3PXOiWpAULFsjNzU179uzRhAkTNHr0aG3atEmSZGdnp2nTpunQoUNasGCBtm7dqiFDhqTYT/HixVWpUiWFhYXZLA8LC1P79u0l3Q2zderUUfny5bV//36tX79ef/31l9q0aZOmeh0cHLR3715NnTpVkydP1rx586zr4+Pj9fHHHysqKkqrVq1STEyMgoODJd0Nq127dlVISIhNnyEhIapRo4aKFi0qSWrdurXOnz+vdevW6cCBA6pQoYLq1q2rS5cuSZI6dOigF154Qfv27dOBAwc0dOhQZcuW7bG1R0RE6O2331a/fv0UGRmp+vXra8yYMTZtbty4ocaNG2vLli06ePCgGjZsqMDAQMXGxqb6HE2bNk2rV6/WN998o+joaIWFhalQoUKSpOXLl+uzzz7TnDlzdOzYMa1atUplypR5aF+puQbi4uI0ceJELVy4UNu3b1dsbKwGDRqU6noBAAAAQJIsxv1Dqs+AWrVqKTExUTt27LAuq1y5surUqaPx48cna//tt9/q7bffto5Mh4aGqn///rpy5YokacqUKZoxY4Z1xPjo0aPy9/fX4cOHVaJECX3yySfasWOHNmzYYO3zjz/+kJ+fn6Kjo1W8ePHH1nv+/HkdOnRIFotFkjR06FCtXr1av//+e4rb7N+/Xy+//LKuX78ud3d3nT17VgUKFNCuXbtUuXJlxcfHK1++fJo4caI6d+6snTt3qkmTJjp//rycnJys/RQtWlRDhgxRz5495enpqenTp6tz586pOMv/X7t27XTjxg2tWbPGuuzNN9/UmjVrrOcwJaVLl9bbb7+tPn36SLr7x4OVK1eqefPm1jbe3t6aMmWKgoOD1bdvXx06dEibN2+2nqd7Jk+erDlz5ui3335L8Q8FhQoVUv/+/R/6wLqUroEuXbro+PHj1hkNM2fO1OjRo/Xnn3+m2Mft27d1+/Zt6/tr167Jz89PrZb0UTZXpxS3AQAAgPkWBU58fCPg/1y7dk1eXl66evWqPD09M6TPZ3Kku2zZsjbv8+bNa52OvXnzZtWtW1f58+eXh4eHOnbsqIsXLyouLi7Fvtq1a6eYmBj99NNPku6OcleoUEElSpSQdHda9rZt2+Tu7m593Vt34sSJVNX76quv2gTJKlWq6NixY0pMTJQkHThwQIGBgSpQoIA8PDxUs2ZNSbKOFOfLl09NmjTRl19+KUn6/vvvdfv2bbVu3dpa440bN5QjRw6bOk+dOmWtceDAgerevbvq1aun8ePHp7r26OhoVa5c2WbZg+9v3LihQYMGKSAgQN7e3nJ3d9fhw4fTNNIdHBysyMhI+fv7q2/fvtq4caN1XevWrXXr1i0VLlxYPXr00MqVK5WQkPDQvlJzDbi6utrcQnD/NZSScePGycvLy/ry8/NL9bEBAAAAeHY9k6H7wdFOi8WipKQkxcTEqGnTpipbtqyWL1+uAwcO6PPPP5d0957hlOTJk0d16tTRokWLJEmLFi1Shw4drOtv3LihwMBARUZG2ryOHTumGjVqPPGx3Lx5Uw0aNJCnp6fCwsK0b98+rVy5MlnN3bt315IlS3Tr1i2FhISobdu2cnV1tdaYN2/eZDVGR0dr8ODBkqSRI0fq0KFDatKkibZu3aqSJUta9/OkBg0apJUrV2rs2LHasWOHIiMjVaZMGZv6LRaLHpx0ER8fb/25QoUKOnXqlD7++GPdunVLbdq0UatWrSTJOqtg5syZcnFxUa9evVSjRg2b7e9J7TWQ0jX0qEkhw4YN09WrV62vM2fOpOEMAQAAAHhWPVdPLz9w4ICSkpI0adIk2dnd/XvDN99889jtOnTooCFDhigoKEgnT55Uu3btrOsqVKig5cuXq1ChQnJwSN/p3LNnj837n376ScWKFZO9vb2OHDmiixcvavz48dbR05QecNa4cWO5ublp1qxZWr9+vbZv325T459//ikHBwfrfdApKV68uIoXL64BAwYoKChIISEhatGixSNr9/f31759+2yWPfg+IiJCwcHB1r5u3LihmJgYmza+vr42Dyo7duxYstkHnp6eatu2rdq2batWrVqpYcOGunTpknx8fOTi4qLAwEAFBgaqd+/eKlGihH799VdVqFDBpo/0XgOP4+TkZDN1HwAAAACkZ3Sk+2GKFi2q+Ph4TZ8+XSdPntTChQs1e/bsx27XsmVLXb9+Xe+8845q166tfPnyWdf17t1bly5dUlBQkPbt26cTJ05ow4YN6tKli3V6+OPExsZq4MCBio6O1uLFizV9+nT169dPklSgQAE5Ojpaa169erU+/vjjZH3Y29srODhYw4YNU7FixVSlShXrunr16qlKlSpq3ry5Nm7cqJiYGO3atUsffvih9u/fr1u3bqlPnz4KDw/X6dOnFRERoX379ikgIOCxtb/77rtau3atJk+erGPHjmnOnDlat26dzXT5YsWKacWKFYqMjFRUVJTat2+vpKQkm37q1KmjGTNm6ODBg9q/f7/efvttm9HmyZMna/HixTpy5IiOHj2qZcuWKU+ePNYnnM+fP1+//fabTp48qa+//louLi4qWLBgsnrTew0AAAAAQHo8V6G7XLlymjx5sj799FOVLl1aYWFh1q+dehQPDw8FBgYqKirKZmq5dPd+6oiICCUmJur1119XmTJl1L9/f3l7e1tHUh+nU6dOunXrlipXrqzevXurX79+6tmzp6S7I8ChoaFatmyZSpYsqfHjxyf7erB7unXrpjt37qhLly42yy0Wi9auXasaNWqoS5cuKl68uNq1a6fTp08rd+7csre318WLF9WpUycVL15cbdq0UaNGjTRq1KjH1l6tWjXNnj1bkydPVrly5bR+/XoNGDBAzs7O1jaTJ09W9uzZVbVqVQUG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\n" 154 | }, 155 | "metadata": {} 156 | } 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "source": [ 162 | "# Regression example\n", 163 | "california = datasets.fetch_california_housing()\n", 164 | "results_reg = auto_ml_genie(california.data, california.target)\n", 165 | "df = pd.DataFrame(results_reg)\n", 166 | "print(df)" 167 | ], 168 | "metadata": { 169 | "id": "0YaR-DAsNPdE" 170 | }, 171 | "execution_count": null, 172 | "outputs": [] 173 | } 174 | ] 175 | } --------------------------------------------------------------------------------