├── README.md
├── 50_startups Success Rate Prediction
├── 50_Startups.csv
└── Multiple_Linear_Regression.ipynb
├── House_Price_Prediction Detailed Analysis
└── Feature_Selection.ipynb
└── Fraud Detection Using ML
└── fraud_detection.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | # Machine Learning Projects
2 |
3 | Welcome to my Machine Learning Projects repository! This repository contains a collection of machine learning projects that cover various topics.
4 |
--------------------------------------------------------------------------------
/50_startups Success Rate Prediction/50_Startups.csv:
--------------------------------------------------------------------------------
1 | R&D Spend,Administration,Marketing Spend,State,Profit
2 | 165349.2,136897.8,471784.1,New York,192261.83
3 | 162597.7,151377.59,443898.53,California,191792.06
4 | 153441.51,101145.55,407934.54,Florida,191050.39
5 | 144372.41,118671.85,383199.62,New York,182901.99
6 | 142107.34,91391.77,366168.42,Florida,166187.94
7 | 131876.9,99814.71,362861.36,New York,156991.12
8 | 134615.46,147198.87,127716.82,California,156122.51
9 | 130298.13,145530.06,323876.68,Florida,155752.6
10 | 120542.52,148718.95,311613.29,New York,152211.77
11 | 123334.88,108679.17,304981.62,California,149759.96
12 | 101913.08,110594.11,229160.95,Florida,146121.95
13 | 100671.96,91790.61,249744.55,California,144259.4
14 | 93863.75,127320.38,249839.44,Florida,141585.52
15 | 91992.39,135495.07,252664.93,California,134307.35
16 | 119943.24,156547.42,256512.92,Florida,132602.65
17 | 114523.61,122616.84,261776.23,New York,129917.04
18 | 78013.11,121597.55,264346.06,California,126992.93
19 | 94657.16,145077.58,282574.31,New York,125370.37
20 | 91749.16,114175.79,294919.57,Florida,124266.9
21 | 86419.7,153514.11,0,New York,122776.86
22 | 76253.86,113867.3,298664.47,California,118474.03
23 | 78389.47,153773.43,299737.29,New York,111313.02
24 | 73994.56,122782.75,303319.26,Florida,110352.25
25 | 67532.53,105751.03,304768.73,Florida,108733.99
26 | 77044.01,99281.34,140574.81,New York,108552.04
27 | 64664.71,139553.16,137962.62,California,107404.34
28 | 75328.87,144135.98,134050.07,Florida,105733.54
29 | 72107.6,127864.55,353183.81,New York,105008.31
30 | 66051.52,182645.56,118148.2,Florida,103282.38
31 | 65605.48,153032.06,107138.38,New York,101004.64
32 | 61994.48,115641.28,91131.24,Florida,99937.59
33 | 61136.38,152701.92,88218.23,New York,97483.56
34 | 63408.86,129219.61,46085.25,California,97427.84
35 | 55493.95,103057.49,214634.81,Florida,96778.92
36 | 46426.07,157693.92,210797.67,California,96712.8
37 | 46014.02,85047.44,205517.64,New York,96479.51
38 | 28663.76,127056.21,201126.82,Florida,90708.19
39 | 44069.95,51283.14,197029.42,California,89949.14
40 | 20229.59,65947.93,185265.1,New York,81229.06
41 | 38558.51,82982.09,174999.3,California,81005.76
42 | 28754.33,118546.05,172795.67,California,78239.91
43 | 27892.92,84710.77,164470.71,Florida,77798.83
44 | 23640.93,96189.63,148001.11,California,71498.49
45 | 15505.73,127382.3,35534.17,New York,69758.98
46 | 22177.74,154806.14,28334.72,California,65200.33
47 | 1000.23,124153.04,1903.93,New York,64926.08
48 | 1315.46,115816.21,297114.46,Florida,49490.75
49 | 0,135426.92,0,California,42559.73
50 | 542.05,51743.15,0,New York,35673.41
51 | 0,116983.8,45173.06,California,14681.4
--------------------------------------------------------------------------------
/50_startups Success Rate Prediction/Multiple_Linear_Regression.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np\n",
10 | "import matplotlib.pyplot as plt\n",
11 | "import pandas as pd"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 2,
17 | "metadata": {},
18 | "outputs": [],
19 | "source": [
20 | "df = pd.read_csv('Startups.csv')"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 3,
26 | "metadata": {},
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/html": [
31 | "
\n",
32 | "\n",
45 | "
\n",
46 | " \n",
47 | " \n",
48 | " | \n",
49 | " R&D Spend | \n",
50 | " Administration | \n",
51 | " Marketing Spend | \n",
52 | " State | \n",
53 | " Profit | \n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " \n",
58 | " | 0 | \n",
59 | " 165349.20 | \n",
60 | " 136897.80 | \n",
61 | " 471784.10 | \n",
62 | " New York | \n",
63 | " 192261.83 | \n",
64 | "
\n",
65 | " \n",
66 | " | 1 | \n",
67 | " 162597.70 | \n",
68 | " 151377.59 | \n",
69 | " 443898.53 | \n",
70 | " California | \n",
71 | " 191792.06 | \n",
72 | "
\n",
73 | " \n",
74 | " | 2 | \n",
75 | " 153441.51 | \n",
76 | " 101145.55 | \n",
77 | " 407934.54 | \n",
78 | " Florida | \n",
79 | " 191050.39 | \n",
80 | "
\n",
81 | " \n",
82 | " | 3 | \n",
83 | " 144372.41 | \n",
84 | " 118671.85 | \n",
85 | " 383199.62 | \n",
86 | " New York | \n",
87 | " 182901.99 | \n",
88 | "
\n",
89 | " \n",
90 | " | 4 | \n",
91 | " 142107.34 | \n",
92 | " 91391.77 | \n",
93 | " 366168.42 | \n",
94 | " Florida | \n",
95 | " 166187.94 | \n",
96 | "
\n",
97 | " \n",
98 | "
\n",
99 | "
"
100 | ],
101 | "text/plain": [
102 | " R&D Spend Administration Marketing Spend State Profit\n",
103 | "0 165349.20 136897.80 471784.10 New York 192261.83\n",
104 | "1 162597.70 151377.59 443898.53 California 191792.06\n",
105 | "2 153441.51 101145.55 407934.54 Florida 191050.39\n",
106 | "3 144372.41 118671.85 383199.62 New York 182901.99\n",
107 | "4 142107.34 91391.77 366168.42 Florida 166187.94"
108 | ]
109 | },
110 | "execution_count": 3,
111 | "metadata": {},
112 | "output_type": "execute_result"
113 | }
114 | ],
115 | "source": [
116 | "df.head()"
117 | ]
118 | },
119 | {
120 | "cell_type": "code",
121 | "execution_count": 4,
122 | "metadata": {},
123 | "outputs": [
124 | {
125 | "data": {
126 | "text/plain": [
127 | "(50, 5)"
128 | ]
129 | },
130 | "execution_count": 4,
131 | "metadata": {},
132 | "output_type": "execute_result"
133 | }
134 | ],
135 | "source": [
136 | "df.shape"
137 | ]
138 | },
139 | {
140 | "cell_type": "code",
141 | "execution_count": 5,
142 | "metadata": {},
143 | "outputs": [],
144 | "source": [
145 | "X = df.iloc[:, :-1] # independent data\n",
146 | "y = df.iloc[:, -1] # dependent data"
147 | ]
148 | },
149 | {
150 | "cell_type": "code",
151 | "execution_count": 6,
152 | "metadata": {},
153 | "outputs": [
154 | {
155 | "data": {
156 | "text/plain": [
157 | "New York 17\n",
158 | "California 17\n",
159 | "Florida 16\n",
160 | "Name: State, dtype: int64"
161 | ]
162 | },
163 | "execution_count": 6,
164 | "metadata": {},
165 | "output_type": "execute_result"
166 | }
167 | ],
168 | "source": [
169 | "df['State'].value_counts() ## count the cities"
170 | ]
171 | },
172 | {
173 | "cell_type": "code",
174 | "execution_count": 7,
175 | "metadata": {},
176 | "outputs": [
177 | {
178 | "data": {
179 | "text/plain": [
180 | "R&D Spend 0\n",
181 | "Administration 0\n",
182 | "Marketing Spend 0\n",
183 | "State 0\n",
184 | "Profit 0\n",
185 | "dtype: int64"
186 | ]
187 | },
188 | "execution_count": 7,
189 | "metadata": {},
190 | "output_type": "execute_result"
191 | }
192 | ],
193 | "source": [
194 | "df.isnull().sum() ## checking null values"
195 | ]
196 | },
197 | {
198 | "cell_type": "code",
199 | "execution_count": 9,
200 | "metadata": {},
201 | "outputs": [],
202 | "source": [
203 | "states = pd.get_dummies(X['State'], drop_first=True) # Converting State column into one-hot-encoding"
204 | ]
205 | },
206 | {
207 | "cell_type": "code",
208 | "execution_count": 12,
209 | "metadata": {},
210 | "outputs": [],
211 | "source": [
212 | "X = X.drop('State', axis=1) # droping state column"
213 | ]
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": 14,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": [
221 | "X = pd.concat([X, states], axis=1)"
222 | ]
223 | },
224 | {
225 | "cell_type": "code",
226 | "execution_count": 15,
227 | "metadata": {},
228 | "outputs": [
229 | {
230 | "data": {
231 | "text/html": [
232 | "\n",
233 | "\n",
246 | "
\n",
247 | " \n",
248 | " \n",
249 | " | \n",
250 | " R&D Spend | \n",
251 | " Administration | \n",
252 | " Marketing Spend | \n",
253 | " Florida | \n",
254 | " New York | \n",
255 | "
\n",
256 | " \n",
257 | " \n",
258 | " \n",
259 | " | 0 | \n",
260 | " 165349.20 | \n",
261 | " 136897.80 | \n",
262 | " 471784.10 | \n",
263 | " 0 | \n",
264 | " 1 | \n",
265 | "
\n",
266 | " \n",
267 | " | 1 | \n",
268 | " 162597.70 | \n",
269 | " 151377.59 | \n",
270 | " 443898.53 | \n",
271 | " 0 | \n",
272 | " 0 | \n",
273 | "
\n",
274 | " \n",
275 | " | 2 | \n",
276 | " 153441.51 | \n",
277 | " 101145.55 | \n",
278 | " 407934.54 | \n",
279 | " 1 | \n",
280 | " 0 | \n",
281 | "
\n",
282 | " \n",
283 | " | 3 | \n",
284 | " 144372.41 | \n",
285 | " 118671.85 | \n",
286 | " 383199.62 | \n",
287 | " 0 | \n",
288 | " 1 | \n",
289 | "
\n",
290 | " \n",
291 | " | 4 | \n",
292 | " 142107.34 | \n",
293 | " 91391.77 | \n",
294 | " 366168.42 | \n",
295 | " 1 | \n",
296 | " 0 | \n",
297 | "
\n",
298 | " \n",
299 | "
\n",
300 | "
"
301 | ],
302 | "text/plain": [
303 | " R&D Spend Administration Marketing Spend Florida New York\n",
304 | "0 165349.20 136897.80 471784.10 0 1\n",
305 | "1 162597.70 151377.59 443898.53 0 0\n",
306 | "2 153441.51 101145.55 407934.54 1 0\n",
307 | "3 144372.41 118671.85 383199.62 0 1\n",
308 | "4 142107.34 91391.77 366168.42 1 0"
309 | ]
310 | },
311 | "execution_count": 15,
312 | "metadata": {},
313 | "output_type": "execute_result"
314 | }
315 | ],
316 | "source": [
317 | "X.head()"
318 | ]
319 | },
320 | {
321 | "cell_type": "code",
322 | "execution_count": 16,
323 | "metadata": {},
324 | "outputs": [],
325 | "source": [
326 | "from sklearn.model_selection import train_test_split"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": 17,
332 | "metadata": {},
333 | "outputs": [],
334 | "source": [
335 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)"
336 | ]
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": 18,
341 | "metadata": {},
342 | "outputs": [],
343 | "source": [
344 | "from sklearn.linear_model import LinearRegression"
345 | ]
346 | },
347 | {
348 | "cell_type": "code",
349 | "execution_count": 19,
350 | "metadata": {},
351 | "outputs": [],
352 | "source": [
353 | "regressor = LinearRegression()"
354 | ]
355 | },
356 | {
357 | "cell_type": "code",
358 | "execution_count": 20,
359 | "metadata": {},
360 | "outputs": [
361 | {
362 | "data": {
363 | "text/plain": [
364 | "LinearRegression()"
365 | ]
366 | },
367 | "execution_count": 20,
368 | "metadata": {},
369 | "output_type": "execute_result"
370 | }
371 | ],
372 | "source": [
373 | "regressor.fit(X_train, y_train)"
374 | ]
375 | },
376 | {
377 | "cell_type": "code",
378 | "execution_count": 21,
379 | "metadata": {},
380 | "outputs": [],
381 | "source": [
382 | "y_pred = regressor.predict(X_test)"
383 | ]
384 | },
385 | {
386 | "cell_type": "code",
387 | "execution_count": 24,
388 | "metadata": {},
389 | "outputs": [
390 | {
391 | "name": "stdout",
392 | "output_type": "stream",
393 | "text": [
394 | "[103015.20159796 132582.27760816 132447.73845174 71976.09851258\n",
395 | " 178537.48221055]\n",
396 | "28 103282.38\n",
397 | "11 144259.40\n",
398 | "10 146121.95\n",
399 | "41 77798.83\n",
400 | "2 191050.39\n",
401 | "27 105008.31\n",
402 | "38 81229.06\n",
403 | "31 97483.56\n",
404 | "22 110352.25\n",
405 | "4 166187.94\n",
406 | "Name: Profit, dtype: float64\n"
407 | ]
408 | }
409 | ],
410 | "source": [
411 | "print(y_pred[:5])\n",
412 | "print(y_test[:])"
413 | ]
414 | },
415 | {
416 | "cell_type": "code",
417 | "execution_count": 28,
418 | "metadata": {},
419 | "outputs": [],
420 | "source": [
421 | "from sklearn.metrics import r2_score"
422 | ]
423 | },
424 | {
425 | "cell_type": "code",
426 | "execution_count": 29,
427 | "metadata": {},
428 | "outputs": [],
429 | "source": [
430 | "score = r2_score(y_test, y_pred)"
431 | ]
432 | },
433 | {
434 | "cell_type": "code",
435 | "execution_count": 30,
436 | "metadata": {},
437 | "outputs": [
438 | {
439 | "name": "stdout",
440 | "output_type": "stream",
441 | "text": [
442 | "0.9347068473282423\n"
443 | ]
444 | }
445 | ],
446 | "source": [
447 | "print(score)"
448 | ]
449 | },
450 | {
451 | "cell_type": "code",
452 | "execution_count": null,
453 | "metadata": {},
454 | "outputs": [],
455 | "source": []
456 | }
457 | ],
458 | "metadata": {
459 | "kernelspec": {
460 | "display_name": "Python 3",
461 | "language": "python",
462 | "name": "python3"
463 | },
464 | "language_info": {
465 | "codemirror_mode": {
466 | "name": "ipython",
467 | "version": 3
468 | },
469 | "file_extension": ".py",
470 | "mimetype": "text/x-python",
471 | "name": "python",
472 | "nbconvert_exporter": "python",
473 | "pygments_lexer": "ipython3",
474 | "version": "3.8.5"
475 | }
476 | },
477 | "nbformat": 4,
478 | "nbformat_minor": 4
479 | }
480 |
--------------------------------------------------------------------------------
/House_Price_Prediction Detailed Analysis/Feature_Selection.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import pandas as pd\n",
10 | "import numpy as np\n",
11 | "\n",
12 | "import matplotlib.pyplot as plt\n",
13 | "%matplotlib inline\n",
14 | "\n",
15 | "# for feature selection\n",
16 | "from sklearn.linear_model import Lasso\n",
17 | "from sklearn.feature_selection import SelectFromModel\n",
18 | "\n",
19 | "# to visualize all the column of the dataframe\n",
20 | "pd.pandas.set_option('display.max_columns', None)"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 2,
26 | "metadata": {},
27 | "outputs": [],
28 | "source": [
29 | "dataset = pd.read_csv('train.csv')"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 3,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "data": {
39 | "text/html": [
40 | "\n",
41 | "\n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " | \n",
58 | " Unnamed: 0 | \n",
59 | " Id | \n",
60 | " SalePrice | \n",
61 | " MSSubClass | \n",
62 | " MSZoning | \n",
63 | " LotFrontage | \n",
64 | " LotArea | \n",
65 | " Street | \n",
66 | " Alley | \n",
67 | " LotShape | \n",
68 | " LandContour | \n",
69 | " Utilities | \n",
70 | " LotConfig | \n",
71 | " LandSlope | \n",
72 | " Neighborhood | \n",
73 | " Condition1 | \n",
74 | " Condition2 | \n",
75 | " BldgType | \n",
76 | " HouseStyle | \n",
77 | " OverallQual | \n",
78 | " OverallCond | \n",
79 | " YearBuilt | \n",
80 | " YearRemodAdd | \n",
81 | " RoofStyle | \n",
82 | " RoofMatl | \n",
83 | " Exterior1st | \n",
84 | " Exterior2nd | \n",
85 | " MasVnrType | \n",
86 | " MasVnrArea | \n",
87 | " ExterQual | \n",
88 | " ExterCond | \n",
89 | " Foundation | \n",
90 | " BsmtQual | \n",
91 | " BsmtCond | \n",
92 | " BsmtExposure | \n",
93 | " BsmtFinType1 | \n",
94 | " BsmtFinSF1 | \n",
95 | " BsmtFinType2 | \n",
96 | " BsmtFinSF2 | \n",
97 | " BsmtUnfSF | \n",
98 | " TotalBsmtSF | \n",
99 | " Heating | \n",
100 | " HeatingQC | \n",
101 | " CentralAir | \n",
102 | " Electrical | \n",
103 | " 1stFlrSF | \n",
104 | " 2ndFlrSF | \n",
105 | " LowQualFinSF | \n",
106 | " GrLivArea | \n",
107 | " BsmtFullBath | \n",
108 | " BsmtHalfBath | \n",
109 | " FullBath | \n",
110 | " HalfBath | \n",
111 | " BedroomAbvGr | \n",
112 | " KitchenAbvGr | \n",
113 | " KitchenQual | \n",
114 | " TotRmsAbvGrd | \n",
115 | " Functional | \n",
116 | " Fireplaces | \n",
117 | " FireplaceQu | \n",
118 | " GarageType | \n",
119 | " GarageYrBlt | \n",
120 | " GarageFinish | \n",
121 | " GarageCars | \n",
122 | " GarageArea | \n",
123 | " GarageQual | \n",
124 | " GarageCond | \n",
125 | " PavedDrive | \n",
126 | " WoodDeckSF | \n",
127 | " OpenPorchSF | \n",
128 | " EnclosedPorch | \n",
129 | " 3SsnPorch | \n",
130 | " ScreenPorch | \n",
131 | " PoolArea | \n",
132 | " PoolQC | \n",
133 | " Fence | \n",
134 | " MiscFeature | \n",
135 | " MiscVal | \n",
136 | " MoSold | \n",
137 | " YrSold | \n",
138 | " SaleType | \n",
139 | " SaleCondition | \n",
140 | " LotFrontagenan | \n",
141 | " MasVnrAreanan | \n",
142 | " GarageYrBltnan | \n",
143 | "
\n",
144 | " \n",
145 | " \n",
146 | " \n",
147 | " | 0 | \n",
148 | " 0 | \n",
149 | " 1 | \n",
150 | " 12.247694 | \n",
151 | " 0.235294 | \n",
152 | " 0.5 | \n",
153 | " 0.418208 | \n",
154 | " 0.366344 | \n",
155 | " 0.0 | \n",
156 | " 0.5 | \n",
157 | " 1.0 | \n",
158 | " 1.0 | \n",
159 | " 0.0 | \n",
160 | " 0.75 | \n",
161 | " 0.0 | \n",
162 | " 0.181818 | \n",
163 | " 0.4 | \n",
164 | " 0.0 | \n",
165 | " 0.0 | \n",
166 | " 0.4 | \n",
167 | " 0.666667 | \n",
168 | " 0.500 | \n",
169 | " 0.036765 | \n",
170 | " 0.098361 | \n",
171 | " 0.0 | \n",
172 | " 0.0 | \n",
173 | " 0.8 | \n",
174 | " 0.8 | \n",
175 | " 0.25 | \n",
176 | " 0.12250 | \n",
177 | " 0.333333 | \n",
178 | " 1.0 | \n",
179 | " 0.50 | \n",
180 | " 0.5 | \n",
181 | " 1.00 | \n",
182 | " 1.00 | \n",
183 | " 0.333333 | \n",
184 | " 0.125089 | \n",
185 | " 1.0 | \n",
186 | " 0.0 | \n",
187 | " 0.064212 | \n",
188 | " 0.140098 | \n",
189 | " 0.0 | \n",
190 | " 0.0 | \n",
191 | " 1.0 | \n",
192 | " 1.0 | \n",
193 | " 0.356155 | \n",
194 | " 0.413559 | \n",
195 | " 0.0 | \n",
196 | " 0.577712 | \n",
197 | " 0.333333 | \n",
198 | " 0.0 | \n",
199 | " 0.666667 | \n",
200 | " 0.5 | \n",
201 | " 0.375 | \n",
202 | " 0.333333 | \n",
203 | " 0.666667 | \n",
204 | " 0.500000 | \n",
205 | " 1.0 | \n",
206 | " 0.000000 | \n",
207 | " 0.6 | \n",
208 | " 0.0 | \n",
209 | " 0.046729 | \n",
210 | " 0.666667 | \n",
211 | " 0.50 | \n",
212 | " 0.386460 | \n",
213 | " 1.0 | \n",
214 | " 1.0 | \n",
215 | " 1.0 | \n",
216 | " 0.000000 | \n",
217 | " 0.111517 | \n",
218 | " 0.000000 | \n",
219 | " 0.0 | \n",
220 | " 0.0 | \n",
221 | " 0.0 | \n",
222 | " 0.0 | \n",
223 | " 0.5 | \n",
224 | " 0.0 | \n",
225 | " 0.0 | \n",
226 | " 0.090909 | \n",
227 | " 0.50 | \n",
228 | " 1.0 | \n",
229 | " 0.5 | \n",
230 | " 0.0 | \n",
231 | " 0.0 | \n",
232 | " 0.0 | \n",
233 | "
\n",
234 | " \n",
235 | " | 1 | \n",
236 | " 1 | \n",
237 | " 2 | \n",
238 | " 12.109011 | \n",
239 | " 0.000000 | \n",
240 | " 0.5 | \n",
241 | " 0.495064 | \n",
242 | " 0.391317 | \n",
243 | " 0.0 | \n",
244 | " 0.5 | \n",
245 | " 1.0 | \n",
246 | " 1.0 | \n",
247 | " 0.0 | \n",
248 | " 0.50 | \n",
249 | " 0.0 | \n",
250 | " 0.727273 | \n",
251 | " 0.2 | \n",
252 | " 0.0 | \n",
253 | " 0.0 | \n",
254 | " 0.2 | \n",
255 | " 0.555556 | \n",
256 | " 0.875 | \n",
257 | " 0.227941 | \n",
258 | " 0.524590 | \n",
259 | " 0.0 | \n",
260 | " 0.0 | \n",
261 | " 0.4 | \n",
262 | " 0.4 | \n",
263 | " 0.50 | \n",
264 | " 0.00000 | \n",
265 | " 1.000000 | \n",
266 | " 1.0 | \n",
267 | " 0.25 | \n",
268 | " 0.5 | \n",
269 | " 1.00 | \n",
270 | " 0.25 | \n",
271 | " 0.000000 | \n",
272 | " 0.173281 | \n",
273 | " 1.0 | \n",
274 | " 0.0 | \n",
275 | " 0.121575 | \n",
276 | " 0.206547 | \n",
277 | " 0.0 | \n",
278 | " 0.0 | \n",
279 | " 1.0 | \n",
280 | " 1.0 | \n",
281 | " 0.503056 | \n",
282 | " 0.000000 | \n",
283 | " 0.0 | \n",
284 | " 0.470245 | \n",
285 | " 0.000000 | \n",
286 | " 0.5 | \n",
287 | " 0.666667 | \n",
288 | " 0.0 | \n",
289 | " 0.375 | \n",
290 | " 0.333333 | \n",
291 | " 1.000000 | \n",
292 | " 0.333333 | \n",
293 | " 1.0 | \n",
294 | " 0.333333 | \n",
295 | " 1.0 | \n",
296 | " 0.0 | \n",
297 | " 0.289720 | \n",
298 | " 0.666667 | \n",
299 | " 0.50 | \n",
300 | " 0.324401 | \n",
301 | " 1.0 | \n",
302 | " 1.0 | \n",
303 | " 1.0 | \n",
304 | " 0.347725 | \n",
305 | " 0.000000 | \n",
306 | " 0.000000 | \n",
307 | " 0.0 | \n",
308 | " 0.0 | \n",
309 | " 0.0 | \n",
310 | " 0.0 | \n",
311 | " 0.5 | \n",
312 | " 0.0 | \n",
313 | " 0.0 | \n",
314 | " 0.363636 | \n",
315 | " 0.25 | \n",
316 | " 1.0 | \n",
317 | " 0.5 | \n",
318 | " 0.0 | \n",
319 | " 0.0 | \n",
320 | " 0.0 | \n",
321 | "
\n",
322 | " \n",
323 | " | 2 | \n",
324 | " 2 | \n",
325 | " 3 | \n",
326 | " 12.317167 | \n",
327 | " 0.235294 | \n",
328 | " 0.5 | \n",
329 | " 0.434909 | \n",
330 | " 0.422359 | \n",
331 | " 0.0 | \n",
332 | " 0.5 | \n",
333 | " 0.0 | \n",
334 | " 1.0 | \n",
335 | " 0.0 | \n",
336 | " 0.75 | \n",
337 | " 0.0 | \n",
338 | " 0.181818 | \n",
339 | " 0.4 | \n",
340 | " 0.0 | \n",
341 | " 0.0 | \n",
342 | " 0.4 | \n",
343 | " 0.666667 | \n",
344 | " 0.500 | \n",
345 | " 0.051471 | \n",
346 | " 0.114754 | \n",
347 | " 0.0 | \n",
348 | " 0.0 | \n",
349 | " 0.8 | \n",
350 | " 0.8 | \n",
351 | " 0.25 | \n",
352 | " 0.10125 | \n",
353 | " 0.333333 | \n",
354 | " 1.0 | \n",
355 | " 0.50 | \n",
356 | " 0.5 | \n",
357 | " 1.00 | \n",
358 | " 0.75 | \n",
359 | " 0.333333 | \n",
360 | " 0.086109 | \n",
361 | " 1.0 | \n",
362 | " 0.0 | \n",
363 | " 0.185788 | \n",
364 | " 0.150573 | \n",
365 | " 0.0 | \n",
366 | " 0.0 | \n",
367 | " 1.0 | \n",
368 | " 1.0 | \n",
369 | " 0.383441 | \n",
370 | " 0.419370 | \n",
371 | " 0.0 | \n",
372 | " 0.593095 | \n",
373 | " 0.333333 | \n",
374 | " 0.0 | \n",
375 | " 0.666667 | \n",
376 | " 0.5 | \n",
377 | " 0.375 | \n",
378 | " 0.333333 | \n",
379 | " 0.666667 | \n",
380 | " 0.333333 | \n",
381 | " 1.0 | \n",
382 | " 0.333333 | \n",
383 | " 1.0 | \n",
384 | " 0.0 | \n",
385 | " 0.065421 | \n",
386 | " 0.666667 | \n",
387 | " 0.50 | \n",
388 | " 0.428773 | \n",
389 | " 1.0 | \n",
390 | " 1.0 | \n",
391 | " 1.0 | \n",
392 | " 0.000000 | \n",
393 | " 0.076782 | \n",
394 | " 0.000000 | \n",
395 | " 0.0 | \n",
396 | " 0.0 | \n",
397 | " 0.0 | \n",
398 | " 0.0 | \n",
399 | " 0.5 | \n",
400 | " 0.0 | \n",
401 | " 0.0 | \n",
402 | " 0.727273 | \n",
403 | " 0.50 | \n",
404 | " 1.0 | \n",
405 | " 0.5 | \n",
406 | " 0.0 | \n",
407 | " 0.0 | \n",
408 | " 0.0 | \n",
409 | "
\n",
410 | " \n",
411 | " | 3 | \n",
412 | " 3 | \n",
413 | " 4 | \n",
414 | " 11.849398 | \n",
415 | " 0.294118 | \n",
416 | " 0.5 | \n",
417 | " 0.388581 | \n",
418 | " 0.390295 | \n",
419 | " 0.0 | \n",
420 | " 0.5 | \n",
421 | " 0.0 | \n",
422 | " 1.0 | \n",
423 | " 0.0 | \n",
424 | " 0.00 | \n",
425 | " 0.0 | \n",
426 | " 0.227273 | \n",
427 | " 0.4 | \n",
428 | " 0.0 | \n",
429 | " 0.0 | \n",
430 | " 0.4 | \n",
431 | " 0.666667 | \n",
432 | " 0.500 | \n",
433 | " 0.669118 | \n",
434 | " 0.606557 | \n",
435 | " 0.0 | \n",
436 | " 0.0 | \n",
437 | " 0.9 | \n",
438 | " 1.0 | \n",
439 | " 0.50 | \n",
440 | " 0.00000 | \n",
441 | " 1.000000 | \n",
442 | " 1.0 | \n",
443 | " 0.00 | \n",
444 | " 1.0 | \n",
445 | " 0.25 | \n",
446 | " 1.00 | \n",
447 | " 0.000000 | \n",
448 | " 0.038271 | \n",
449 | " 1.0 | \n",
450 | " 0.0 | \n",
451 | " 0.231164 | \n",
452 | " 0.123732 | \n",
453 | " 0.0 | \n",
454 | " 0.5 | \n",
455 | " 1.0 | \n",
456 | " 1.0 | \n",
457 | " 0.399941 | \n",
458 | " 0.366102 | \n",
459 | " 0.0 | \n",
460 | " 0.579157 | \n",
461 | " 0.333333 | \n",
462 | " 0.0 | \n",
463 | " 0.333333 | \n",
464 | " 0.0 | \n",
465 | " 0.375 | \n",
466 | " 0.333333 | \n",
467 | " 0.666667 | \n",
468 | " 0.416667 | \n",
469 | " 1.0 | \n",
470 | " 0.333333 | \n",
471 | " 0.4 | \n",
472 | " 0.6 | \n",
473 | " 0.074766 | \n",
474 | " 1.000000 | \n",
475 | " 0.75 | \n",
476 | " 0.452750 | \n",
477 | " 1.0 | \n",
478 | " 1.0 | \n",
479 | " 1.0 | \n",
480 | " 0.000000 | \n",
481 | " 0.063985 | \n",
482 | " 0.492754 | \n",
483 | " 0.0 | \n",
484 | " 0.0 | \n",
485 | " 0.0 | \n",
486 | " 0.0 | \n",
487 | " 0.5 | \n",
488 | " 0.0 | \n",
489 | " 0.0 | \n",
490 | " 0.090909 | \n",
491 | " 0.00 | \n",
492 | " 1.0 | \n",
493 | " 0.0 | \n",
494 | " 0.0 | \n",
495 | " 0.0 | \n",
496 | " 0.0 | \n",
497 | "
\n",
498 | " \n",
499 | " | 4 | \n",
500 | " 4 | \n",
501 | " 5 | \n",
502 | " 12.429216 | \n",
503 | " 0.235294 | \n",
504 | " 0.5 | \n",
505 | " 0.513123 | \n",
506 | " 0.468761 | \n",
507 | " 0.0 | \n",
508 | " 0.5 | \n",
509 | " 0.0 | \n",
510 | " 1.0 | \n",
511 | " 0.0 | \n",
512 | " 0.50 | \n",
513 | " 0.0 | \n",
514 | " 0.590909 | \n",
515 | " 0.4 | \n",
516 | " 0.0 | \n",
517 | " 0.0 | \n",
518 | " 0.4 | \n",
519 | " 0.777778 | \n",
520 | " 0.500 | \n",
521 | " 0.058824 | \n",
522 | " 0.147541 | \n",
523 | " 0.0 | \n",
524 | " 0.0 | \n",
525 | " 0.8 | \n",
526 | " 0.8 | \n",
527 | " 0.25 | \n",
528 | " 0.21875 | \n",
529 | " 0.333333 | \n",
530 | " 1.0 | \n",
531 | " 0.50 | \n",
532 | " 0.5 | \n",
533 | " 1.00 | \n",
534 | " 0.00 | \n",
535 | " 0.333333 | \n",
536 | " 0.116052 | \n",
537 | " 1.0 | \n",
538 | " 0.0 | \n",
539 | " 0.209760 | \n",
540 | " 0.187398 | \n",
541 | " 0.0 | \n",
542 | " 0.0 | \n",
543 | " 1.0 | \n",
544 | " 1.0 | \n",
545 | " 0.466237 | \n",
546 | " 0.509927 | \n",
547 | " 0.0 | \n",
548 | " 0.666523 | \n",
549 | " 0.333333 | \n",
550 | " 0.0 | \n",
551 | " 0.666667 | \n",
552 | " 0.5 | \n",
553 | " 0.500 | \n",
554 | " 0.333333 | \n",
555 | " 0.666667 | \n",
556 | " 0.583333 | \n",
557 | " 1.0 | \n",
558 | " 0.333333 | \n",
559 | " 1.0 | \n",
560 | " 0.0 | \n",
561 | " 0.074766 | \n",
562 | " 0.666667 | \n",
563 | " 0.75 | \n",
564 | " 0.589563 | \n",
565 | " 1.0 | \n",
566 | " 1.0 | \n",
567 | " 1.0 | \n",
568 | " 0.224037 | \n",
569 | " 0.153565 | \n",
570 | " 0.000000 | \n",
571 | " 0.0 | \n",
572 | " 0.0 | \n",
573 | " 0.0 | \n",
574 | " 0.0 | \n",
575 | " 0.5 | \n",
576 | " 0.0 | \n",
577 | " 0.0 | \n",
578 | " 1.000000 | \n",
579 | " 0.50 | \n",
580 | " 1.0 | \n",
581 | " 0.5 | \n",
582 | " 0.0 | \n",
583 | " 0.0 | \n",
584 | " 0.0 | \n",
585 | "
\n",
586 | " \n",
587 | "
\n",
588 | "
"
589 | ],
590 | "text/plain": [
591 | " Unnamed: 0 Id SalePrice MSSubClass MSZoning LotFrontage LotArea \\\n",
592 | "0 0 1 12.247694 0.235294 0.5 0.418208 0.366344 \n",
593 | "1 1 2 12.109011 0.000000 0.5 0.495064 0.391317 \n",
594 | "2 2 3 12.317167 0.235294 0.5 0.434909 0.422359 \n",
595 | "3 3 4 11.849398 0.294118 0.5 0.388581 0.390295 \n",
596 | "4 4 5 12.429216 0.235294 0.5 0.513123 0.468761 \n",
597 | "\n",
598 | " Street Alley LotShape LandContour Utilities LotConfig LandSlope \\\n",
599 | "0 0.0 0.5 1.0 1.0 0.0 0.75 0.0 \n",
600 | "1 0.0 0.5 1.0 1.0 0.0 0.50 0.0 \n",
601 | "2 0.0 0.5 0.0 1.0 0.0 0.75 0.0 \n",
602 | "3 0.0 0.5 0.0 1.0 0.0 0.00 0.0 \n",
603 | "4 0.0 0.5 0.0 1.0 0.0 0.50 0.0 \n",
604 | "\n",
605 | " Neighborhood Condition1 Condition2 BldgType HouseStyle OverallQual \\\n",
606 | "0 0.181818 0.4 0.0 0.0 0.4 0.666667 \n",
607 | "1 0.727273 0.2 0.0 0.0 0.2 0.555556 \n",
608 | "2 0.181818 0.4 0.0 0.0 0.4 0.666667 \n",
609 | "3 0.227273 0.4 0.0 0.0 0.4 0.666667 \n",
610 | "4 0.590909 0.4 0.0 0.0 0.4 0.777778 \n",
611 | "\n",
612 | " OverallCond YearBuilt YearRemodAdd RoofStyle RoofMatl Exterior1st \\\n",
613 | "0 0.500 0.036765 0.098361 0.0 0.0 0.8 \n",
614 | "1 0.875 0.227941 0.524590 0.0 0.0 0.4 \n",
615 | "2 0.500 0.051471 0.114754 0.0 0.0 0.8 \n",
616 | "3 0.500 0.669118 0.606557 0.0 0.0 0.9 \n",
617 | "4 0.500 0.058824 0.147541 0.0 0.0 0.8 \n",
618 | "\n",
619 | " Exterior2nd MasVnrType MasVnrArea ExterQual ExterCond Foundation \\\n",
620 | "0 0.8 0.25 0.12250 0.333333 1.0 0.50 \n",
621 | "1 0.4 0.50 0.00000 1.000000 1.0 0.25 \n",
622 | "2 0.8 0.25 0.10125 0.333333 1.0 0.50 \n",
623 | "3 1.0 0.50 0.00000 1.000000 1.0 0.00 \n",
624 | "4 0.8 0.25 0.21875 0.333333 1.0 0.50 \n",
625 | "\n",
626 | " BsmtQual BsmtCond BsmtExposure BsmtFinType1 BsmtFinSF1 BsmtFinType2 \\\n",
627 | "0 0.5 1.00 1.00 0.333333 0.125089 1.0 \n",
628 | "1 0.5 1.00 0.25 0.000000 0.173281 1.0 \n",
629 | "2 0.5 1.00 0.75 0.333333 0.086109 1.0 \n",
630 | "3 1.0 0.25 1.00 0.000000 0.038271 1.0 \n",
631 | "4 0.5 1.00 0.00 0.333333 0.116052 1.0 \n",
632 | "\n",
633 | " BsmtFinSF2 BsmtUnfSF TotalBsmtSF Heating HeatingQC CentralAir \\\n",
634 | "0 0.0 0.064212 0.140098 0.0 0.0 1.0 \n",
635 | "1 0.0 0.121575 0.206547 0.0 0.0 1.0 \n",
636 | "2 0.0 0.185788 0.150573 0.0 0.0 1.0 \n",
637 | "3 0.0 0.231164 0.123732 0.0 0.5 1.0 \n",
638 | "4 0.0 0.209760 0.187398 0.0 0.0 1.0 \n",
639 | "\n",
640 | " Electrical 1stFlrSF 2ndFlrSF LowQualFinSF GrLivArea BsmtFullBath \\\n",
641 | "0 1.0 0.356155 0.413559 0.0 0.577712 0.333333 \n",
642 | "1 1.0 0.503056 0.000000 0.0 0.470245 0.000000 \n",
643 | "2 1.0 0.383441 0.419370 0.0 0.593095 0.333333 \n",
644 | "3 1.0 0.399941 0.366102 0.0 0.579157 0.333333 \n",
645 | "4 1.0 0.466237 0.509927 0.0 0.666523 0.333333 \n",
646 | "\n",
647 | " BsmtHalfBath FullBath HalfBath BedroomAbvGr KitchenAbvGr KitchenQual \\\n",
648 | "0 0.0 0.666667 0.5 0.375 0.333333 0.666667 \n",
649 | "1 0.5 0.666667 0.0 0.375 0.333333 1.000000 \n",
650 | "2 0.0 0.666667 0.5 0.375 0.333333 0.666667 \n",
651 | "3 0.0 0.333333 0.0 0.375 0.333333 0.666667 \n",
652 | "4 0.0 0.666667 0.5 0.500 0.333333 0.666667 \n",
653 | "\n",
654 | " TotRmsAbvGrd Functional Fireplaces FireplaceQu GarageType GarageYrBlt \\\n",
655 | "0 0.500000 1.0 0.000000 0.6 0.0 0.046729 \n",
656 | "1 0.333333 1.0 0.333333 1.0 0.0 0.289720 \n",
657 | "2 0.333333 1.0 0.333333 1.0 0.0 0.065421 \n",
658 | "3 0.416667 1.0 0.333333 0.4 0.6 0.074766 \n",
659 | "4 0.583333 1.0 0.333333 1.0 0.0 0.074766 \n",
660 | "\n",
661 | " GarageFinish GarageCars GarageArea GarageQual GarageCond PavedDrive \\\n",
662 | "0 0.666667 0.50 0.386460 1.0 1.0 1.0 \n",
663 | "1 0.666667 0.50 0.324401 1.0 1.0 1.0 \n",
664 | "2 0.666667 0.50 0.428773 1.0 1.0 1.0 \n",
665 | "3 1.000000 0.75 0.452750 1.0 1.0 1.0 \n",
666 | "4 0.666667 0.75 0.589563 1.0 1.0 1.0 \n",
667 | "\n",
668 | " WoodDeckSF OpenPorchSF EnclosedPorch 3SsnPorch ScreenPorch PoolArea \\\n",
669 | "0 0.000000 0.111517 0.000000 0.0 0.0 0.0 \n",
670 | "1 0.347725 0.000000 0.000000 0.0 0.0 0.0 \n",
671 | "2 0.000000 0.076782 0.000000 0.0 0.0 0.0 \n",
672 | "3 0.000000 0.063985 0.492754 0.0 0.0 0.0 \n",
673 | "4 0.224037 0.153565 0.000000 0.0 0.0 0.0 \n",
674 | "\n",
675 | " PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType \\\n",
676 | "0 0.0 0.5 0.0 0.0 0.090909 0.50 1.0 \n",
677 | "1 0.0 0.5 0.0 0.0 0.363636 0.25 1.0 \n",
678 | "2 0.0 0.5 0.0 0.0 0.727273 0.50 1.0 \n",
679 | "3 0.0 0.5 0.0 0.0 0.090909 0.00 1.0 \n",
680 | "4 0.0 0.5 0.0 0.0 1.000000 0.50 1.0 \n",
681 | "\n",
682 | " SaleCondition LotFrontagenan MasVnrAreanan GarageYrBltnan \n",
683 | "0 0.5 0.0 0.0 0.0 \n",
684 | "1 0.5 0.0 0.0 0.0 \n",
685 | "2 0.5 0.0 0.0 0.0 \n",
686 | "3 0.0 0.0 0.0 0.0 \n",
687 | "4 0.5 0.0 0.0 0.0 "
688 | ]
689 | },
690 | "execution_count": 3,
691 | "metadata": {},
692 | "output_type": "execute_result"
693 | }
694 | ],
695 | "source": [
696 | "dataset.head()"
697 | ]
698 | },
699 | {
700 | "cell_type": "code",
701 | "execution_count": 4,
702 | "metadata": {},
703 | "outputs": [],
704 | "source": [
705 | "# capture the dependent dataset\n",
706 | "y_train = dataset[['SalePrice']]"
707 | ]
708 | },
709 | {
710 | "cell_type": "code",
711 | "execution_count": 5,
712 | "metadata": {},
713 | "outputs": [],
714 | "source": [
715 | "# drop the dependent feature from dataset\n",
716 | "X_train = dataset.drop(['Id', 'SalePrice'], axis=1)"
717 | ]
718 | },
719 | {
720 | "cell_type": "code",
721 | "execution_count": 6,
722 | "metadata": {},
723 | "outputs": [
724 | {
725 | "data": {
726 | "text/plain": [
727 | "SelectFromModel(estimator=Lasso(alpha=0.05, random_state=0))"
728 | ]
729 | },
730 | "execution_count": 6,
731 | "metadata": {},
732 | "output_type": "execute_result"
733 | }
734 | ],
735 | "source": [
736 | "# Apply Feature Selection \n",
737 | "# First, I specify the Lasso Regression model, and I \n",
738 | "# Selected a suitable alpha (equivalent of penalty).\n",
739 | "# The bigger the alpha the less features that will be selected\n",
740 | "\n",
741 | "# Then I use selectfromModel object from sklearn which\n",
742 | "# will select the feature which co-officients are non zero\n",
743 | "\n",
744 | "feature_sel_model = SelectFromModel(Lasso(alpha=0.05, random_state=0))\n",
745 | "feature_sel_model.fit(X_train, y_train)"
746 | ]
747 | },
748 | {
749 | "cell_type": "code",
750 | "execution_count": 7,
751 | "metadata": {},
752 | "outputs": [
753 | {
754 | "data": {
755 | "text/plain": [
756 | "array([ True, False, False, False, False, False, False, False, False,\n",
757 | " False, False, False, False, False, False, False, False, False,\n",
758 | " False, False, True, False, False, False, False, False, False,\n",
759 | " True, False, False, True, False, False, False, False, False,\n",
760 | " False, False, False, False, False, False, False, False, False,\n",
761 | " False, False, False, False, False, False, False, False, False,\n",
762 | " False, False, False, False, False, False, False, False, False,\n",
763 | " False, False, False, False, False, False, False, False, False,\n",
764 | " False, False, False, False, False, False, False, False, False,\n",
765 | " False, False])"
766 | ]
767 | },
768 | "execution_count": 7,
769 | "metadata": {},
770 | "output_type": "execute_result"
771 | }
772 | ],
773 | "source": [
774 | "feature_sel_model.get_support()"
775 | ]
776 | },
777 | {
778 | "cell_type": "code",
779 | "execution_count": 14,
780 | "metadata": {},
781 | "outputs": [
782 | {
783 | "name": "stdout",
784 | "output_type": "stream",
785 | "text": [
786 | "Total features: 83\n",
787 | "selected featrues: 4\n",
788 | "features with cofficients shrank to zero: 79\n"
789 | ]
790 | }
791 | ],
792 | "source": [
793 | "# Let's print the number of total and selected features\n",
794 | "# this is how we can make a list of the selected features\n",
795 | "\n",
796 | "selected_feat = X_train.columns[(feature_sel_model.get_support())]\n",
797 | "\n",
798 | "# let's print some stats\n",
799 | "print('Total features: {}'.format(X_train.shape[1]))\n",
800 | "print(\"selected featrues: {}\".format(len(selected_feat)))\n",
801 | "print('features with cofficients shrank to zero: {}'.format(\n",
802 | " np.sum(feature_sel_model.estimator_.coef_ == 0)))"
803 | ]
804 | },
805 | {
806 | "cell_type": "code",
807 | "execution_count": 16,
808 | "metadata": {},
809 | "outputs": [],
810 | "source": [
811 | "X_train = X_train[selected_feat]"
812 | ]
813 | },
814 | {
815 | "cell_type": "code",
816 | "execution_count": 17,
817 | "metadata": {},
818 | "outputs": [
819 | {
820 | "data": {
821 | "text/html": [
822 | "\n",
823 | "\n",
836 | "
\n",
837 | " \n",
838 | " \n",
839 | " | \n",
840 | " Unnamed: 0 | \n",
841 | " YearRemodAdd | \n",
842 | " ExterQual | \n",
843 | " BsmtQual | \n",
844 | "
\n",
845 | " \n",
846 | " \n",
847 | " \n",
848 | " | 0 | \n",
849 | " 0 | \n",
850 | " 0.098361 | \n",
851 | " 0.333333 | \n",
852 | " 0.5 | \n",
853 | "
\n",
854 | " \n",
855 | " | 1 | \n",
856 | " 1 | \n",
857 | " 0.524590 | \n",
858 | " 1.000000 | \n",
859 | " 0.5 | \n",
860 | "
\n",
861 | " \n",
862 | " | 2 | \n",
863 | " 2 | \n",
864 | " 0.114754 | \n",
865 | " 0.333333 | \n",
866 | " 0.5 | \n",
867 | "
\n",
868 | " \n",
869 | " | 3 | \n",
870 | " 3 | \n",
871 | " 0.606557 | \n",
872 | " 1.000000 | \n",
873 | " 1.0 | \n",
874 | "
\n",
875 | " \n",
876 | " | 4 | \n",
877 | " 4 | \n",
878 | " 0.147541 | \n",
879 | " 0.333333 | \n",
880 | " 0.5 | \n",
881 | "
\n",
882 | " \n",
883 | "
\n",
884 | "
"
885 | ],
886 | "text/plain": [
887 | " Unnamed: 0 YearRemodAdd ExterQual BsmtQual\n",
888 | "0 0 0.098361 0.333333 0.5\n",
889 | "1 1 0.524590 1.000000 0.5\n",
890 | "2 2 0.114754 0.333333 0.5\n",
891 | "3 3 0.606557 1.000000 1.0\n",
892 | "4 4 0.147541 0.333333 0.5"
893 | ]
894 | },
895 | "execution_count": 17,
896 | "metadata": {},
897 | "output_type": "execute_result"
898 | }
899 | ],
900 | "source": [
901 | "X_train.head()"
902 | ]
903 | },
904 | {
905 | "cell_type": "code",
906 | "execution_count": null,
907 | "metadata": {},
908 | "outputs": [],
909 | "source": []
910 | }
911 | ],
912 | "metadata": {
913 | "kernelspec": {
914 | "display_name": "Python 3",
915 | "language": "python",
916 | "name": "python3"
917 | },
918 | "language_info": {
919 | "codemirror_mode": {
920 | "name": "ipython",
921 | "version": 3
922 | },
923 | "file_extension": ".py",
924 | "mimetype": "text/x-python",
925 | "name": "python",
926 | "nbconvert_exporter": "python",
927 | "pygments_lexer": "ipython3",
928 | "version": "3.8.5"
929 | }
930 | },
931 | "nbformat": 4,
932 | "nbformat_minor": 4
933 | }
934 |
--------------------------------------------------------------------------------
/Fraud Detection Using ML/fraud_detection.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": null,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np \n",
10 | "import pandas as pd \n",
11 | "import seaborn as sns \n",
12 | "import matplotlib.pyplot as plt \n",
13 | "%matplotlib inline\n",
14 | "from sklearn.model_selection import train_test_split \n",
15 | "from sklearn.preprocessing import StandardScaler\n",
16 | "from sklearn.metrics import classification_report, accuracy_score, confusion_matrix\n",
17 | "from sklearn.linear_model import LogisticRegression \n",
18 | "\n",
19 | "sns.set_style('darkgrid')"
20 | ]
21 | },
22 | {
23 | "cell_type": "code",
24 | "execution_count": 35,
25 | "metadata": {},
26 | "outputs": [],
27 | "source": [
28 | "## Dataset \n",
29 | "df = pd.read_csv('payment_fraud.csv')"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 36,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "data": {
39 | "text/html": [
40 | "\n",
41 | "\n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " | \n",
58 | " accountAgeDays | \n",
59 | " numItems | \n",
60 | " localTime | \n",
61 | " paymentMethod | \n",
62 | " paymentMethodAgeDays | \n",
63 | " label | \n",
64 | "
\n",
65 | " \n",
66 | " \n",
67 | " \n",
68 | " | 0 | \n",
69 | " 29 | \n",
70 | " 1 | \n",
71 | " 4.745402 | \n",
72 | " paypal | \n",
73 | " 28.204861 | \n",
74 | " 0 | \n",
75 | "
\n",
76 | " \n",
77 | " | 1 | \n",
78 | " 725 | \n",
79 | " 1 | \n",
80 | " 4.742303 | \n",
81 | " storecredit | \n",
82 | " 0.000000 | \n",
83 | " 0 | \n",
84 | "
\n",
85 | " \n",
86 | " | 2 | \n",
87 | " 845 | \n",
88 | " 1 | \n",
89 | " 4.921318 | \n",
90 | " creditcard | \n",
91 | " 0.000000 | \n",
92 | " 0 | \n",
93 | "
\n",
94 | " \n",
95 | " | 3 | \n",
96 | " 503 | \n",
97 | " 1 | \n",
98 | " 4.886641 | \n",
99 | " creditcard | \n",
100 | " 0.000000 | \n",
101 | " 0 | \n",
102 | "
\n",
103 | " \n",
104 | " | 4 | \n",
105 | " 2000 | \n",
106 | " 1 | \n",
107 | " 5.040929 | \n",
108 | " creditcard | \n",
109 | " 0.000000 | \n",
110 | " 0 | \n",
111 | "
\n",
112 | " \n",
113 | "
\n",
114 | "
"
115 | ],
116 | "text/plain": [
117 | " accountAgeDays numItems localTime paymentMethod paymentMethodAgeDays \\\n",
118 | "0 29 1 4.745402 paypal 28.204861 \n",
119 | "1 725 1 4.742303 storecredit 0.000000 \n",
120 | "2 845 1 4.921318 creditcard 0.000000 \n",
121 | "3 503 1 4.886641 creditcard 0.000000 \n",
122 | "4 2000 1 5.040929 creditcard 0.000000 \n",
123 | "\n",
124 | " label \n",
125 | "0 0 \n",
126 | "1 0 \n",
127 | "2 0 \n",
128 | "3 0 \n",
129 | "4 0 "
130 | ]
131 | },
132 | "execution_count": 36,
133 | "metadata": {},
134 | "output_type": "execute_result"
135 | }
136 | ],
137 | "source": [
138 | "df.head()"
139 | ]
140 | },
141 | {
142 | "cell_type": "code",
143 | "execution_count": 37,
144 | "metadata": {},
145 | "outputs": [
146 | {
147 | "data": {
148 | "text/plain": [
149 | "accountAgeDays 0\n",
150 | "numItems 0\n",
151 | "localTime 0\n",
152 | "paymentMethod 0\n",
153 | "paymentMethodAgeDays 0\n",
154 | "label 0\n",
155 | "dtype: int64"
156 | ]
157 | },
158 | "execution_count": 37,
159 | "metadata": {},
160 | "output_type": "execute_result"
161 | }
162 | ],
163 | "source": [
164 | "df.isnull().sum() ## checking the null valeus "
165 | ]
166 | },
167 | {
168 | "cell_type": "code",
169 | "execution_count": 39,
170 | "metadata": {},
171 | "outputs": [
172 | {
173 | "data": {
174 | "text/plain": [
175 | "0 38661\n",
176 | "1 560\n",
177 | "Name: label, dtype: int64"
178 | ]
179 | },
180 | "execution_count": 39,
181 | "metadata": {},
182 | "output_type": "execute_result"
183 | }
184 | ],
185 | "source": [
186 | "df.label.value_counts() ## count the number of 0's and 1's"
187 | ]
188 | },
189 | {
190 | "cell_type": "code",
191 | "execution_count": 40,
192 | "metadata": {},
193 | "outputs": [],
194 | "source": [
195 | "## coverting paymentMethod column into label encoding\n",
196 | "paymthd_label = {v:k for k, v in enumerate(df.paymentMethod.unique())}\n",
197 | "\n",
198 | "df.paymentMethod = df.paymentMethod.map(paymthd_label)"
199 | ]
200 | },
201 | {
202 | "cell_type": "code",
203 | "execution_count": 41,
204 | "metadata": {},
205 | "outputs": [
206 | {
207 | "data": {
208 | "text/html": [
209 | "\n",
210 | "\n",
223 | "
\n",
224 | " \n",
225 | " \n",
226 | " | \n",
227 | " accountAgeDays | \n",
228 | " numItems | \n",
229 | " localTime | \n",
230 | " paymentMethod | \n",
231 | " paymentMethodAgeDays | \n",
232 | " label | \n",
233 | "
\n",
234 | " \n",
235 | " \n",
236 | " \n",
237 | " | 0 | \n",
238 | " 29 | \n",
239 | " 1 | \n",
240 | " 4.745402 | \n",
241 | " 0 | \n",
242 | " 28.204861 | \n",
243 | " 0 | \n",
244 | "
\n",
245 | " \n",
246 | " | 1 | \n",
247 | " 725 | \n",
248 | " 1 | \n",
249 | " 4.742303 | \n",
250 | " 1 | \n",
251 | " 0.000000 | \n",
252 | " 0 | \n",
253 | "
\n",
254 | " \n",
255 | " | 2 | \n",
256 | " 845 | \n",
257 | " 1 | \n",
258 | " 4.921318 | \n",
259 | " 2 | \n",
260 | " 0.000000 | \n",
261 | " 0 | \n",
262 | "
\n",
263 | " \n",
264 | " | 3 | \n",
265 | " 503 | \n",
266 | " 1 | \n",
267 | " 4.886641 | \n",
268 | " 2 | \n",
269 | " 0.000000 | \n",
270 | " 0 | \n",
271 | "
\n",
272 | " \n",
273 | " | 4 | \n",
274 | " 2000 | \n",
275 | " 1 | \n",
276 | " 5.040929 | \n",
277 | " 2 | \n",
278 | " 0.000000 | \n",
279 | " 0 | \n",
280 | "
\n",
281 | " \n",
282 | "
\n",
283 | "
"
284 | ],
285 | "text/plain": [
286 | " accountAgeDays numItems localTime paymentMethod paymentMethodAgeDays \\\n",
287 | "0 29 1 4.745402 0 28.204861 \n",
288 | "1 725 1 4.742303 1 0.000000 \n",
289 | "2 845 1 4.921318 2 0.000000 \n",
290 | "3 503 1 4.886641 2 0.000000 \n",
291 | "4 2000 1 5.040929 2 0.000000 \n",
292 | "\n",
293 | " label \n",
294 | "0 0 \n",
295 | "1 0 \n",
296 | "2 0 \n",
297 | "3 0 \n",
298 | "4 0 "
299 | ]
300 | },
301 | "execution_count": 41,
302 | "metadata": {},
303 | "output_type": "execute_result"
304 | }
305 | ],
306 | "source": [
307 | "df.head()"
308 | ]
309 | },
310 | {
311 | "cell_type": "code",
312 | "execution_count": 42,
313 | "metadata": {},
314 | "outputs": [
315 | {
316 | "data": {
317 | "image/png": "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nYyZvJk4w58P2/Vh1pQFTJk9lvf9mhIWdpseXQZxN/ou69dsZlXIEsxxcZz87XfWrQohfYZ0TJo5itUhS3B1c2XSmFncjb7r7G4+F2ZzPJ8Nn87CoFkYjQbWrtzE9as3yJjJm9HThtKjwwDmTlvEhFn+NPd7j1s3b9Ov65Pn1363eSfjZgxn2Yb5uLqaGDdsapq4mGv7lu95q3JZlocsAIOBYT3HULdJTdw9MrBm2QYmjpjBgsDpGIxG1iUew8dt81/yx9cHyPnO69TcOBwwsK/PAvI0roDJPT1nAnZyPvh/1AgeisUcz+3f/uD82h8xpnOjwrQu1AgeisHkwsERy7HEpOEh2URms5n+A0ayZXMARqORJUsCuXz5KpkzZ2LB/Ek09/3gsdtFRESyYuU6vt+xlrg4M8d+OUFAwFoHRy/Pg8FqTV2p//jx48mdOzetWrVi3759DB48mEyZMjFt2jTy5MnDggULyJs3L3PmzHnktblz5zJu3DheffVVtm3bxtq1axk1ahQtW7Zk69atREVFUatWLVavXs26devIli0b77//PqGhofj7+7Ns2TIGDx5M7dq1eeONN2jatCnbtm2zzSsaOnQohQoVwmg0cuXKFfr378/FixepXbs2v/32G82aNWPmzJm89NJLHDx4kBs3bvD666/Tp08fVq1aBUBsbCwffPABH374IXfv3mXTpk1Mnz6dsLAw6tSpw5o1a/Dx8WHEiBFERERQunRpWrduzfLly3nzzTcpVKgQ8+fPJy4ujm7duj31WMb9ddbu/7/SggKF33N2CKlCBpe0O2z3vJkMqbsa7CiDXQo4O4RUod1fO50dQqphjv3Toe93b7/jkuP0ZR+9/Zs9pboKZJUqVfD392fTpk1kypQJFxcX/P39+fTTTzEajWTPnp327duTI0eOR157+eWXGT16NFarFRcXF8aNG0f27Nl5++23adasGbly5SJ37txPff/ixYszefJk6tatS82aNW3JIyTMnxwwYADr169n0KBBtG7dmpdeeol06RL+sPr7+zNw4EDbPKSxY8cCcObMGfz8/DAYDJjNZho0aMBbb73FjRs3mDNnDr6+vri5ueHj48P169fx8fHB19eX999/H39/fwDeeOMNBg0ahLu7O66urowaNcoOR19EREQkFVYgU4NDhw4RHR1NxYoVOX/+PJ07d2bbtm3P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RMQOrFZVIEVEREREAFUgRUREROzCanF2BPajCqSIiIiIJIsqkCIiIiJ2YNEcSBERERGRBEogRURERCRZNIQtIiIiYge6jY+IiIiISCJVIEVERETsQI8yFBERERFJpAqkiIiIiB1Yrc6OwH5UgRQRERGRZFEFUkRERMQONAdSRERERCSRKpAiIiIidqBHGYqIiIiIJFIFUkRERMQO9CQaEREREZFEqkCKiIiI2IHuAykiIiIikkgVSBERERE70FXYIiIiIiKJlECKiIiISLJoCFtERETEDnQbHxERERGRRKpAioiIiNiBbuMjIiIiIpJIFUgRERERO0jLt/FRAvkfZjK4ODuEVCGTm6ezQ0gVShZt5ewQUo3Dx1c4O4RUQefUs/EwZXB2CPIfpARSRERExA50FbaIiIiISCJVIEVERETsIC3PgVQFUkRERESSRRVIERERETtIw7eBVAVSRERERJJHFUgRERERO9AcSBERERGRRKpAioiIiNiB7gMpIiIiIpJIFUgRERERO7A4OwA7UgVSRERERJJFCaSIiIiIJIuGsEVERETswErKuYjGYrHg7+/PqVOncHNzY8yYMeTOnfuR9YYNG0bGjBnp16/fU/enCqSIiIhIGrdt2zZiY2MJCgqib9++TJgw4ZF1AgMDOX369DPtTwmkiIiIiB1YrI77+ScHDx6kUqVKAJQoUYJff/01Sfvhw4c5evQoLVq0eKa+KYEUERERSeMiIyPx9PS0Lbu4uGA2mwG4fv06n3/+OcOHD3/m/WkOpIiIiIgdWBw4BzIoKIigoCDbcosWLZJUEz09PYmKirofm8WCyZSQBn7zzTfcunWLLl26cOPGDe7du0e+fPlo0qTJE99PCaSIiIhIKvdwwviwUqVKsXPnTurWrcuRI0coVKiQra1t27a0bdsWgODgYM6ePfvU5BGUQIqIiIjYRUq6CrtGjRrs2bOHli1bYrVaGTduHJs2bSI6OvqZ5z0+SAmkiIiISBpnNBoZNWpUktfy58//yHr/VHn8mxJIERERETvQowxFRERERBKpAikiIiJiBylpDuTzpgqkiIiIiCSLKpAiIiIidqA5kCIiIiIiiVSBFBEREbEDVSBFRERERBIpgRQRERGRZNEQtoiIiIgd6DY+IiIiIiKJVIEUERERsQNL2i1AqgIpIiIiIsmjCqSIiIiIHVg0B1JE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uw3AlzOXMnbmMOLi4rgXfY/hfcbx1/WbhKz9lhVbFmI2m9m46mtCT51zcq///8xmMyOHTiRg7QKMRgOBAets59GkmSP5oG0vZkyez/Q542jVrhlhN2/xyQcDuBt9lwmjZ7B642JiY2P5cdc+dnz3AyPHDyJjpoz07P8RPft/BIBf84+4dy/GyT0VeX4MVmsaK+XIMzO5vfzPKwllshV0dgipwvnoa84OIdXIli6js0NIFW7FRvzzSsL53zc5O4RUwzVbPoe+X64sbzjsvS6G/eKw9wINYYuIiIhIMmkIW0RERMQOnDE30VFUgRQRERGRZFEFUkRERMQO0vJlJqpAioiIiEiyKIEUERERkWTRELaIiIiIHaS1h148SBVIEREREUkWVSBFRERE7MCq2/iIiIiIiCRQBVJERETEDnQbHxERERGRRKpAioiIiNiBHmUoIiIiIpJIFUgRERERO9AcSBERERGRRKpAioiIiNiBnkQjIiIiIpJIFUgRERERO9AcSBERERGRRKpAioiIiNiB7gMpIiIiIpJICaSIiIiIJIuGsEVERETsQBfRiIiIiIgkUgVSRERExA50I3ERERERkUSqQIqIiIjYgVW38RERERERSaAKpIiIiIgdaA6kiIiIiEgiVSBFRERE7ED3gRQRERERSaQKpIiIiIgd6CpsEREREZFEqkCKiIiI2IHmQIqIiIiIJFIFUkRERMQOVIEUEREREUmkBFJEREREkkVD2CIiIiJ2kHYHsMFgTcsD9CIiIiLy3GkIW0RERESSRQmkiIiIiCSLEkgRERERSRYlkCIiIiKSLEogRURERCRZlECKiIiISLIogRQRERGRZFECKSIiIiLJoifRiNNFR0cTHh6OyWQiKCiI9957j5dfftnZYaVI169fJzw8HBcXF7744gv8/PwoUqSIs8NKkSIjI/nzzz/x8fHB3d3d2eGkKPv3739iW9myZR0YSep05coVcubM6ewwUpSgoKAntrVo0cKBkYijKIEUp+vXrx9NmjRh69atFChQgOHDh/Pll186O6wUaeDAgXz44YesWLGCWrVqMW7cOJYtW+bssFKcb775hnnz5hEfH0/t2rUxGAx8/PHHzg4rxVi5ciUAFy9eJC4ujjfeeIPffvsNDw8PnU9PsHTpUtKnT094eDjBwcFUqlSJwYMHOzusFOPGjRvODkEcTEPY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",
318 | "text/plain": [
319 | ""
320 | ]
321 | },
322 | "metadata": {},
323 | "output_type": "display_data"
324 | }
325 | ],
326 | "source": [
327 | "## corr(): it gives the correlation between the featuers\n",
328 | "plt.figure(figsize=(10, 10))\n",
329 | "sns.heatmap(df.corr(), annot=True);"
330 | ]
331 | },
332 | {
333 | "cell_type": "code",
334 | "execution_count": 43,
335 | "metadata": {},
336 | "outputs": [
337 | {
338 | "data": {
339 | "text/html": [
340 | "\n",
341 | "\n",
354 | "
\n",
355 | " \n",
356 | " \n",
357 | " | \n",
358 | " accountAgeDays | \n",
359 | " numItems | \n",
360 | " localTime | \n",
361 | " paymentMethod | \n",
362 | " paymentMethodAgeDays | \n",
363 | " label | \n",
364 | "
\n",
365 | " \n",
366 | " \n",
367 | " \n",
368 | " | count | \n",
369 | " 39221.000000 | \n",
370 | " 39221.000000 | \n",
371 | " 39221.000000 | \n",
372 | " 39221.000000 | \n",
373 | " 39221.000000 | \n",
374 | " 39221.000000 | \n",
375 | "
\n",
376 | " \n",
377 | " | mean | \n",
378 | " 857.563984 | \n",
379 | " 1.084751 | \n",
380 | " 4.748232 | \n",
381 | " 1.476811 | \n",
382 | " 122.641326 | \n",
383 | " 0.014278 | \n",
384 | "
\n",
385 | " \n",
386 | " | std | \n",
387 | " 804.788212 | \n",
388 | " 0.566899 | \n",
389 | " 0.389360 | \n",
390 | " 0.850805 | \n",
391 | " 283.569177 | \n",
392 | " 0.118636 | \n",
393 | "
\n",
394 | " \n",
395 | " | min | \n",
396 | " 1.000000 | \n",
397 | " 1.000000 | \n",
398 | " 0.421214 | \n",
399 | " 0.000000 | \n",
400 | " 0.000000 | \n",
401 | " 0.000000 | \n",
402 | "
\n",
403 | " \n",
404 | " | 25% | \n",
405 | " 72.000000 | \n",
406 | " 1.000000 | \n",
407 | " 4.742303 | \n",
408 | " 1.000000 | \n",
409 | " 0.000000 | \n",
410 | " 0.000000 | \n",
411 | "
\n",
412 | " \n",
413 | " | 50% | \n",
414 | " 603.000000 | \n",
415 | " 1.000000 | \n",
416 | " 4.886641 | \n",
417 | " 2.000000 | \n",
418 | " 0.012500 | \n",
419 | " 0.000000 | \n",
420 | "
\n",
421 | " \n",
422 | " | 75% | \n",
423 | " 1804.000000 | \n",
424 | " 1.000000 | \n",
425 | " 4.962055 | \n",
426 | " 2.000000 | \n",
427 | " 87.510417 | \n",
428 | " 0.000000 | \n",
429 | "
\n",
430 | " \n",
431 | " | max | \n",
432 | " 2000.000000 | \n",
433 | " 29.000000 | \n",
434 | " 5.040929 | \n",
435 | " 2.000000 | \n",
436 | " 1999.580556 | \n",
437 | " 1.000000 | \n",
438 | "
\n",
439 | " \n",
440 | "
\n",
441 | "
"
442 | ],
443 | "text/plain": [
444 | " accountAgeDays numItems localTime paymentMethod \\\n",
445 | "count 39221.000000 39221.000000 39221.000000 39221.000000 \n",
446 | "mean 857.563984 1.084751 4.748232 1.476811 \n",
447 | "std 804.788212 0.566899 0.389360 0.850805 \n",
448 | "min 1.000000 1.000000 0.421214 0.000000 \n",
449 | "25% 72.000000 1.000000 4.742303 1.000000 \n",
450 | "50% 603.000000 1.000000 4.886641 2.000000 \n",
451 | "75% 1804.000000 1.000000 4.962055 2.000000 \n",
452 | "max 2000.000000 29.000000 5.040929 2.000000 \n",
453 | "\n",
454 | " paymentMethodAgeDays label \n",
455 | "count 39221.000000 39221.000000 \n",
456 | "mean 122.641326 0.014278 \n",
457 | "std 283.569177 0.118636 \n",
458 | "min 0.000000 0.000000 \n",
459 | "25% 0.000000 0.000000 \n",
460 | "50% 0.012500 0.000000 \n",
461 | "75% 87.510417 0.000000 \n",
462 | "max 1999.580556 1.000000 "
463 | ]
464 | },
465 | "execution_count": 43,
466 | "metadata": {},
467 | "output_type": "execute_result"
468 | }
469 | ],
470 | "source": [
471 | "df.describe()"
472 | ]
473 | },
474 | {
475 | "cell_type": "code",
476 | "execution_count": 44,
477 | "metadata": {},
478 | "outputs": [],
479 | "source": [
480 | "## independent and dependent features\n",
481 | "X = df.iloc[:, :-1].values\n",
482 | "y = df.iloc[:, -1].values"
483 | ]
484 | },
485 | {
486 | "cell_type": "code",
487 | "execution_count": 45,
488 | "metadata": {},
489 | "outputs": [],
490 | "source": [
491 | "## scaling \n",
492 | "\n",
493 | "sc = StandardScaler()\n",
494 | "X = sc.fit_transform(X)"
495 | ]
496 | },
497 | {
498 | "cell_type": "code",
499 | "execution_count": 46,
500 | "metadata": {},
501 | "outputs": [],
502 | "source": [
503 | "## train test split \n",
504 | "\n",
505 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)"
506 | ]
507 | },
508 | {
509 | "cell_type": "code",
510 | "execution_count": 48,
511 | "metadata": {},
512 | "outputs": [
513 | {
514 | "name": "stdout",
515 | "output_type": "stream",
516 | "text": [
517 | "X_train shape: (29415, 5)\n",
518 | "X_test shape: (9806, 5)\n",
519 | "y_train shape: (29415,)\n",
520 | "y_test shape: (9806,)\n"
521 | ]
522 | }
523 | ],
524 | "source": [
525 | "print(\"X_train shape: \", X_train.shape)\n",
526 | "print(\"X_test shape: \", X_test.shape)\n",
527 | "print(\"y_train shape: \", y_train.shape)\n",
528 | "print(\"y_test shape: \", y_test.shape)"
529 | ]
530 | },
531 | {
532 | "cell_type": "code",
533 | "execution_count": 49,
534 | "metadata": {},
535 | "outputs": [
536 | {
537 | "data": {
538 | "text/plain": [
539 | "LogisticRegression()"
540 | ]
541 | },
542 | "execution_count": 49,
543 | "metadata": {},
544 | "output_type": "execute_result"
545 | }
546 | ],
547 | "source": [
548 | "## logisticRegression Model\n",
549 | "lg = LogisticRegression()\n",
550 | "\n",
551 | "## training\n",
552 | "lg.fit(X_train, y_train)"
553 | ]
554 | },
555 | {
556 | "cell_type": "code",
557 | "execution_count": 50,
558 | "metadata": {},
559 | "outputs": [],
560 | "source": [
561 | "## prediction \n",
562 | "pred = lg.predict(X_test)"
563 | ]
564 | },
565 | {
566 | "cell_type": "code",
567 | "execution_count": null,
568 | "metadata": {},
569 | "outputs": [],
570 | "source": []
571 | },
572 | {
573 | "cell_type": "code",
574 | "execution_count": null,
575 | "metadata": {},
576 | "outputs": [],
577 | "source": []
578 | }
579 | ],
580 | "metadata": {
581 | "kernelspec": {
582 | "display_name": "Python 3",
583 | "language": "python",
584 | "name": "python3"
585 | },
586 | "language_info": {
587 | "codemirror_mode": {
588 | "name": "ipython",
589 | "version": 3
590 | },
591 | "file_extension": ".py",
592 | "mimetype": "text/x-python",
593 | "name": "python",
594 | "nbconvert_exporter": "python",
595 | "pygments_lexer": "ipython3",
596 | "version": "3.8.5"
597 | }
598 | },
599 | "nbformat": 4,
600 | "nbformat_minor": 4
601 | }
602 |
--------------------------------------------------------------------------------