├── Linear_Regression.ipynb
└── README.md
/Linear_Regression.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 12,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "import pandas as pd\n",
12 | "import numpy as np\n",
13 | "from sklearn import linear_model\n",
14 | "from sklearn.model_selection import train_test_split\n",
15 | "import seaborn as sns\n",
16 | "from sklearn import metrics\n",
17 | "import matplotlib.pyplot as plt\n",
18 | "%matplotlib inline"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 13,
24 | "metadata": {
25 | "collapsed": true
26 | },
27 | "outputs": [],
28 | "source": [
29 | "df = pd.read_csv('C://Users//saish//Desktop//MEDIUM//lr//data.csv', index_col=False)"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 14,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "data": {
39 | "text/html": [
40 | "
\n",
41 | "\n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " | \n",
58 | " Hours | \n",
59 | " Marks | \n",
60 | "
\n",
61 | " \n",
62 | " \n",
63 | " \n",
64 | " 0 | \n",
65 | " 32.502345 | \n",
66 | " 31.707006 | \n",
67 | "
\n",
68 | " \n",
69 | " 1 | \n",
70 | " 53.426804 | \n",
71 | " 68.777596 | \n",
72 | "
\n",
73 | " \n",
74 | " 2 | \n",
75 | " 61.530358 | \n",
76 | " 62.562382 | \n",
77 | "
\n",
78 | " \n",
79 | " 3 | \n",
80 | " 47.475640 | \n",
81 | " 71.546632 | \n",
82 | "
\n",
83 | " \n",
84 | " 4 | \n",
85 | " 59.813208 | \n",
86 | " 87.230925 | \n",
87 | "
\n",
88 | " \n",
89 | "
\n",
90 | "
"
91 | ],
92 | "text/plain": [
93 | " Hours Marks\n",
94 | "0 32.502345 31.707006\n",
95 | "1 53.426804 68.777596\n",
96 | "2 61.530358 62.562382\n",
97 | "3 47.475640 71.546632\n",
98 | "4 59.813208 87.230925"
99 | ]
100 | },
101 | "execution_count": 14,
102 | "metadata": {},
103 | "output_type": "execute_result"
104 | }
105 | ],
106 | "source": [
107 | "df.head()"
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": 15,
113 | "metadata": {},
114 | "outputs": [
115 | {
116 | "data": {
117 | "text/plain": [
118 | "(100, 2)"
119 | ]
120 | },
121 | "execution_count": 15,
122 | "metadata": {},
123 | "output_type": "execute_result"
124 | }
125 | ],
126 | "source": [
127 | "df.shape"
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {},
133 | "source": [
134 | "# Data Visualization"
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "To visualize distribution of data"
142 | ]
143 | },
144 | {
145 | "cell_type": "markdown",
146 | "metadata": {},
147 | "source": [
148 | "Regression line is drawn over the points "
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": 16,
154 | "metadata": {},
155 | "outputs": [
156 | {
157 | "data": {
158 | "text/plain": [
159 | ""
160 | ]
161 | },
162 | "execution_count": 16,
163 | "metadata": {},
164 | "output_type": "execute_result"
165 | },
166 | {
167 | "data": {
168 | "image/png": "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\nzP668MILufDCC9mwYQNr1qzhtdde63a7Uoq1a9fyX//1X3i9Xs4888zO38srr7zCc889x69//Wsg\ntHyirKyMkpKSHq91xx13YLFYIvY6d2lz52eeLWcSRxrdTMpKjOg1o9FwhueJhOajOnpVBcBWpdQi\n4DChuawOBe3HjqO1vge4B2DBggX9Li8vxEAdO4yklEJrzYwZM3j//fePu//VV1/NP/7xD+bMmcND\nDz3E+vXrO2/r+tf5d7/7XVatWsWLL77I0qVLefnll0/YDrvd3vmz2WzulhDQ21/9A+lZ5efnd/Yu\nINQLzM/vfWDj2N5Th5deeol58+aRnZ3d+5PpoqfX91gD7Vl1WLZsGaWlpRw9epSMjIxut5188sm8\n/fbbQChA7d27FwjN3z/11FNMnTq12/2/+tWv8tFHH5GXl8eLL74IhIYxn3/+eV5//fWIp6N3/cyz\n507WQSOil4te/Z3cGswXMJ5jEiy63HaIzxIsZtA9waIUSbAY00Y6weLgwYMa0O+9957WWuuvf/3r\n+te//rX2er164sSJncd9Pp/evn271lrr9PR0XV1drX0+nz799NP1VVddpbXW+qqrrtJPPPFE57n3\n79/f+fPFF1+sn3nmGf3UU0/pM888UwcCAV1TU6OLiop0ZWWlfvPNN/WqVas673/99dfrBx98UGut\n9bhx43Rtbe2Qn6vf79cTJkzQpaWlnQkWHc/pWI2NjTo1NVW3tLQcd9ull16qH3jggW7Hfve73+nf\n/e53x933wQcf1Lm5ubqurk63tbXpWbNm6U2bNg3peezbt68zwWLLli06Ly+v899dVVdXa6219ng8\nesWKFfr111/XWmt966236uuvv77zMVu3bu3xOi+99JIuKSnRNTU1Pd7+4IMPRizBwpYzSe843NTr\nuWPUyCZYKKUeBd4HpiqlKpRSXz9BwNwBPA7sBNYB12utg5FqmxD9MXXqVP7whz9QUlJCQ0MD//7v\n/47NZuPJJ5/kO9/5DnPmzGHu3Lm89957ANx+++0sXryYpUuXMm3atF7Pe+eddzJz5kxmz56N1Wrl\n7LPP5sILL2T27NnMmTOHFStW8Mtf/pKcnJxheZ4Wi4Xf//73rFy5kpKSEr70pS8xY8YM4PgEiWee\neYYzzzzzuB5da2srr776KhdddFG347t37+4c6jvWokWLuPjii5k9ezYXX3zxcUOAA/XUU08xc+ZM\n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\n",
169 | "text/plain": [
170 | ""
171 | ]
172 | },
173 | "metadata": {},
174 | "output_type": "display_data"
175 | }
176 | ],
177 | "source": [
178 | "sns.jointplot(x=df['Hours'], y=df['Marks'], data=df, kind='reg')"
179 | ]
180 | },
181 | {
182 | "cell_type": "markdown",
183 | "metadata": {},
184 | "source": [
185 | "# Splitting data into test and train"
186 | ]
187 | },
188 | {
189 | "cell_type": "code",
190 | "execution_count": 17,
191 | "metadata": {},
192 | "outputs": [
193 | {
194 | "name": "stdout",
195 | "output_type": "stream",
196 | "text": [
197 | "Train - Predictors shape (80, 1)\n",
198 | "Test - Predictors shape (20, 1)\n",
199 | "Train - Target shape (80, 1)\n",
200 | "Test - Target shape (20, 1)\n"
201 | ]
202 | },
203 | {
204 | "name": "stderr",
205 | "output_type": "stream",
206 | "text": [
207 | "C:\\Users\\saish\\Anaconda2\\envs\\tensorflow\\lib\\site-packages\\numpy\\core\\fromnumeric.py:57: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n",
208 | " return getattr(obj, method)(*args, **kwds)\n"
209 | ]
210 | }
211 | ],
212 | "source": [
213 | "x_train, x_test, y_train, y_test = train_test_split(df['Hours'], df['Marks'], test_size=0.2, random_state=42)\n",
214 | "x_train = np.reshape(x_train, (-1,1))\n",
215 | "x_test = np.reshape(x_test, (-1,1))\n",
216 | "y_train = np.reshape(y_train, (-1,1))\n",
217 | "y_test = np.reshape(y_test, (-1,1))\n",
218 | "\n",
219 | "#\n",
220 | "print('Train - Predictors shape', x_train.shape)\n",
221 | "print('Test - Predictors shape', x_test.shape)\n",
222 | "print('Train - Target shape', y_train.shape)\n",
223 | "print('Test - Target shape', y_test.shape)"
224 | ]
225 | },
226 | {
227 | "cell_type": "markdown",
228 | "metadata": {},
229 | "source": [
230 | "# Linear Regression using Scikit"
231 | ]
232 | },
233 | {
234 | "cell_type": "markdown",
235 | "metadata": {},
236 | "source": [
237 | "This is the linear regression model implemented using scikit library. "
238 | ]
239 | },
240 | {
241 | "cell_type": "code",
242 | "execution_count": 18,
243 | "metadata": {},
244 | "outputs": [
245 | {
246 | "data": {
247 | "text/plain": [
248 | "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
249 | ]
250 | },
251 | "execution_count": 18,
252 | "metadata": {},
253 | "output_type": "execute_result"
254 | }
255 | ],
256 | "source": [
257 | "cls = linear_model.LinearRegression()\n",
258 | "#Fit method is used for fitting your training data into the model\n",
259 | "cls.fit(x_train,y_train)"
260 | ]
261 | },
262 | {
263 | "cell_type": "code",
264 | "execution_count": 19,
265 | "metadata": {
266 | "collapsed": true
267 | },
268 | "outputs": [],
269 | "source": [
270 | "prediction = cls.predict(x_test)"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 20,
276 | "metadata": {},
277 | "outputs": [
278 | {
279 | "data": {
280 | "text/plain": [
281 | "{'copy_X': True, 'fit_intercept': True, 'n_jobs': 1, 'normalize': False}"
282 | ]
283 | },
284 | "execution_count": 20,
285 | "metadata": {},
286 | "output_type": "execute_result"
287 | }
288 | ],
289 | "source": [
290 | "#Parameters used for the model \n",
291 | "cls.get_params()"
292 | ]
293 | },
294 | {
295 | "cell_type": "code",
296 | "execution_count": 21,
297 | "metadata": {},
298 | "outputs": [
299 | {
300 | "name": "stdout",
301 | "output_type": "stream",
302 | "text": [
303 | "Co-efficient of linear regression [[ 1.19463787]]\n"
304 | ]
305 | }
306 | ],
307 | "source": [
308 | "print('Co-efficient of linear regression',cls.coef_)"
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "execution_count": 22,
314 | "metadata": {},
315 | "outputs": [
316 | {
317 | "name": "stdout",
318 | "output_type": "stream",
319 | "text": [
320 | "Intercept of linear regression model [ 15.07636055]\n"
321 | ]
322 | }
323 | ],
324 | "source": [
325 | "print('Intercept of linear regression model',cls.intercept_)"
326 | ]
327 | },
328 | {
329 | "cell_type": "code",
330 | "execution_count": 23,
331 | "metadata": {},
332 | "outputs": [
333 | {
334 | "name": "stdout",
335 | "output_type": "stream",
336 | "text": [
337 | "Mean Square Error 153.209271672\n"
338 | ]
339 | }
340 | ],
341 | "source": [
342 | "print('Mean Square Error', metrics.mean_squared_error(y_test, prediction))"
343 | ]
344 | },
345 | {
346 | "cell_type": "code",
347 | "execution_count": 24,
348 | "metadata": {},
349 | "outputs": [
350 | {
351 | "name": "stdout",
352 | "output_type": "stream",
353 | "text": [
354 | "Model R^2 Square value 0.615496585536\n"
355 | ]
356 | }
357 | ],
358 | "source": [
359 | "print('Model R^2 Square value', metrics.r2_score(y_test, prediction))"
360 | ]
361 | },
362 | {
363 | "cell_type": "code",
364 | "execution_count": 25,
365 | "metadata": {},
366 | "outputs": [
367 | {
368 | "data": {
369 | "text/plain": [
370 | ""
371 | ]
372 | },
373 | "execution_count": 25,
374 | "metadata": {},
375 | "output_type": "execute_result"
376 | },
377 | {
378 | "data": {
379 | "image/png": "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\nYII=\n",
380 | "text/plain": [
381 | ""
382 | ]
383 | },
384 | "metadata": {},
385 | "output_type": "display_data"
386 | }
387 | ],
388 | "source": [
389 | "#Model Regression line on test set\n",
390 | "plt.scatter(x_test, y_test)\n",
391 | "plt.plot(x_test, prediction, color='red', linewidth=3)\n",
392 | "plt.xlabel('Hours')\n",
393 | "plt.ylabel('Marks')\n",
394 | "plt.title('Linear Regression')"
395 | ]
396 | },
397 | {
398 | "cell_type": "code",
399 | "execution_count": 26,
400 | "metadata": {},
401 | "outputs": [
402 | {
403 | "data": {
404 | "text/plain": [
405 | ""
406 | ]
407 | },
408 | "execution_count": 26,
409 | "metadata": {},
410 | "output_type": "execute_result"
411 | },
412 | {
413 | "data": {
414 | "image/png": "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\n",
415 | "text/plain": [
416 | ""
417 | ]
418 | },
419 | "metadata": {},
420 | "output_type": "display_data"
421 | }
422 | ],
423 | "source": [
424 | "#Residual plot\n",
425 | "plt.scatter(cls.predict(x_test), cls.predict(x_test) - y_test, c='g', s = 40)\n",
426 | "plt.hlines(y=0, xmin=0, xmax=100)\n",
427 | "plt.title('Residual plot')\n",
428 | "plt.ylabel('Residual')"
429 | ]
430 | },
431 | {
432 | "cell_type": "markdown",
433 | "metadata": {},
434 | "source": [
435 | "points are scattered around the line zero and there is no pattern that can be observed. This indicates that there no relation between predictors or time dependant data that is missed."
436 | ]
437 | },
438 | {
439 | "cell_type": "markdown",
440 | "metadata": {},
441 | "source": [
442 | "# Linear Regression using normal equaltions"
443 | ]
444 | },
445 | {
446 | "cell_type": "code",
447 | "execution_count": 27,
448 | "metadata": {
449 | "collapsed": true
450 | },
451 | "outputs": [],
452 | "source": [
453 | "def theta_calc(x_train, y_train):\n",
454 | " #Initializing all variables\n",
455 | " n_data = x_train.shape[0]\n",
456 | " bias = np.ones((n_data,1))\n",
457 | " x_train_b = np.append(bias, x_train, axis=1)\n",
458 | " #\n",
459 | " theta_1 = np.linalg.inv(np.dot(x_train_b.T,x_train_b))\n",
460 | " theta_2 = np.dot(theta_1, x_train_b.T)\n",
461 | " theta = np.dot(theta_2,y_train)\n",
462 | " #\n",
463 | " return theta"
464 | ]
465 | },
466 | {
467 | "cell_type": "code",
468 | "execution_count": 28,
469 | "metadata": {
470 | "collapsed": true
471 | },
472 | "outputs": [],
473 | "source": [
474 | "def predict_func(slope,intercept,x_test):\n",
475 | " #\n",
476 | " pred = []\n",
477 | " n_data = x_test.shape[0]\n",
478 | " for i in range(n_data):\n",
479 | " pred.append((slope * x_test[i]) + intercept)\n",
480 | " \n",
481 | " return pred"
482 | ]
483 | },
484 | {
485 | "cell_type": "code",
486 | "execution_count": 29,
487 | "metadata": {
488 | "collapsed": true
489 | },
490 | "outputs": [],
491 | "source": [
492 | "def mse_calc(prediction, y_test):\n",
493 | " #\n",
494 | " total_data = len(prediction)\n",
495 | " error = 0\n",
496 | " error = (np.sum((prediction - y_test)**2))/total_data\n",
497 | " return error"
498 | ]
499 | },
500 | {
501 | "cell_type": "code",
502 | "execution_count": 30,
503 | "metadata": {
504 | "collapsed": true
505 | },
506 | "outputs": [],
507 | "source": [
508 | "def rsq(prediction, y_test):\n",
509 | " #\n",
510 | " total_data = len(prediction)\n",
511 | " #Average of total prediction \n",
512 | " y_avg = np.sum(y_test)/total_data\n",
513 | " #total sum of square error\n",
514 | " tot_err = np.sum((y_test-y_avg)**2)\n",
515 | " #total sum of squared error of residuals\n",
516 | " res_err = np.sum((y_test-prediction)**2)\n",
517 | " #\n",
518 | " r2 = 1 - (res_err / tot_err)\n",
519 | " return r2"
520 | ]
521 | },
522 | {
523 | "cell_type": "code",
524 | "execution_count": 31,
525 | "metadata": {},
526 | "outputs": [
527 | {
528 | "name": "stdout",
529 | "output_type": "stream",
530 | "text": [
531 | "Intercept of the model [ 15.07636055]\n",
532 | "Slope of the model [ 1.19463787]\n",
533 | "Mean squared error of the model 153.209271672\n",
534 | "R squared value 0.615496585536\n"
535 | ]
536 | }
537 | ],
538 | "source": [
539 | "#Finding optimal theta value using normal equations\n",
540 | "theta = theta_calc(x_train, y_train)\n",
541 | "intercept = theta[0]\n",
542 | "slope = theta[1]\n",
543 | "print('Intercept of the model', intercept)\n",
544 | "print('Slope of the model', slope)\n",
545 | "#Prediction calculation\n",
546 | "prediction = predict_func(slope, intercept, x_test)\n",
547 | "#MSE calculation\n",
548 | "error = mse_calc(prediction, y_test)\n",
549 | "print('Mean squared error of the model', error)\n",
550 | "#R-square calculation\n",
551 | "r2_val = rsq(prediction, y_test)\n",
552 | "print('R squared value', r2_val)"
553 | ]
554 | },
555 | {
556 | "cell_type": "code",
557 | "execution_count": 32,
558 | "metadata": {},
559 | "outputs": [
560 | {
561 | "data": {
562 | "text/plain": [
563 | ""
564 | ]
565 | },
566 | "execution_count": 32,
567 | "metadata": {},
568 | "output_type": "execute_result"
569 | },
570 | {
571 | "data": {
572 | "image/png": "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\n",
573 | "text/plain": [
574 | ""
575 | ]
576 | },
577 | "metadata": {},
578 | "output_type": "display_data"
579 | }
580 | ],
581 | "source": [
582 | "#Residual plot\n",
583 | "plt.scatter(prediction, prediction - y_test, c='g', s = 40)\n",
584 | "plt.hlines(y=0, xmin=0, xmax=100)\n",
585 | "plt.title('Residual plot')\n",
586 | "plt.ylabel('Residual')"
587 | ]
588 | },
589 | {
590 | "cell_type": "markdown",
591 | "metadata": {},
592 | "source": [
593 | "# Linear Regression using Gradient Descent"
594 | ]
595 | },
596 | {
597 | "cell_type": "code",
598 | "execution_count": 33,
599 | "metadata": {
600 | "collapsed": true
601 | },
602 | "outputs": [],
603 | "source": [
604 | "def mse_calc(slope, intercept, x_train, y_train):\n",
605 | " tot_error = 0\n",
606 | " pred = []\n",
607 | " for i in range(len(x_train)):\n",
608 | " #calculating total error. It follows the formula y=mx+c\n",
609 | " #m is the slope and c is the intercept\n",
610 | " pred.append(((slope*x_train[i]) + intercept))\n",
611 | " tot_error += (y_train[i] - ((slope*x_train[i]) + intercept)) ** 2\n",
612 | " \n",
613 | " error = tot_error / float(len(x_train))\n",
614 | " return error, pred"
615 | ]
616 | },
617 | {
618 | "cell_type": "code",
619 | "execution_count": 34,
620 | "metadata": {
621 | "collapsed": true
622 | },
623 | "outputs": [],
624 | "source": [
625 | "#gradient descent \n",
626 | "def grad_descent(s_slope, s_intercept, l_rate, iter_val, x_train, y_train):\n",
627 | " \n",
628 | " for i in range(iter_val):\n",
629 | " int_slope = 0\n",
630 | " int_intercept = 0\n",
631 | " n_pt = float(len(x_train))\n",
632 | " \n",
633 | " \n",
634 | " for i in range(len(x_train)):\n",
635 | " int_intercept += - (2/n_pt) * (y_train[i] - ((s_slope * x_train[i]) + s_intercept))\n",
636 | " int_slope += - (2/n_pt) * x_train[i] * (y_train[i] - ((s_slope * x_train[i]) + s_intercept))\n",
637 | " \n",
638 | " final_slope = s_slope - (l_rate * int_slope)\n",
639 | " final_intercept = s_intercept - (l_rate * int_intercept)\n",
640 | " s_slope = final_slope\n",
641 | " s_intercept = final_intercept\n",
642 | " \n",
643 | " \n",
644 | " return s_slope, s_intercept"
645 | ]
646 | },
647 | {
648 | "cell_type": "code",
649 | "execution_count": 35,
650 | "metadata": {},
651 | "outputs": [
652 | {
653 | "name": "stdout",
654 | "output_type": "stream",
655 | "text": [
656 | "Slope of the model [ 1.48652326]\n",
657 | "Intercept of the model [ 0.03399291]\n",
658 | "Error value of the model [ 123.81572184]\n",
659 | "R squared value 0.689264446653\n"
660 | ]
661 | },
662 | {
663 | "data": {
664 | "image/png": "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\nrZEA2gAAAABJRU5ErkJggg==\n",
665 | "text/plain": [
666 | ""
667 | ]
668 | },
669 | "metadata": {},
670 | "output_type": "display_data"
671 | }
672 | ],
673 | "source": [
674 | "#defining slope and intercept value as 0 \n",
675 | "learning_rate = 0.0001\n",
676 | "start_slope = 0\n",
677 | "start_intercept = 0\n",
678 | "iteration = 50\n",
679 | "#intial run\n",
680 | "grad_slope, grad_intercept = grad_descent(start_slope, start_intercept, learning_rate, iteration, x_train, y_train)\n",
681 | "final_e_value, prediction = mse_calc(grad_slope, grad_intercept, x_test, y_test)\n",
682 | "#\n",
683 | "print('Slope of the model', grad_slope)\n",
684 | "print('Intercept of the model', grad_intercept)\n",
685 | "print('Error value of the model', final_e_value)\n",
686 | "r2_val = rsq(prediction, y_test)\n",
687 | "print('R squared value', r2_val)\n",
688 | "#Graph\n",
689 | "plt.scatter(x_test, y_test)\n",
690 | "plt.plot(x_test, prediction, color='blue', linewidth = 3)\n",
691 | "plt.xlabel(\"Input\")\n",
692 | "plt.ylabel(\"Output\")\n",
693 | "plt.show()"
694 | ]
695 | },
696 | {
697 | "cell_type": "code",
698 | "execution_count": null,
699 | "metadata": {
700 | "collapsed": true
701 | },
702 | "outputs": [],
703 | "source": []
704 | }
705 | ],
706 | "metadata": {
707 | "kernelspec": {
708 | "display_name": "Python 3",
709 | "language": "python",
710 | "name": "python3"
711 | },
712 | "language_info": {
713 | "codemirror_mode": {
714 | "name": "ipython",
715 | "version": 3
716 | },
717 | "file_extension": ".py",
718 | "mimetype": "text/x-python",
719 | "name": "python",
720 | "nbconvert_exporter": "python",
721 | "pygments_lexer": "ipython3",
722 | "version": "3.5.4"
723 | }
724 | },
725 | "nbformat": 4,
726 | "nbformat_minor": 2
727 | }
728 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Linear_Regression_Detailed_Implementation
2 |
3 | This repo has detailed explanation of linear regression over sample data with one predictor.
4 |
5 | Covers
6 |
7 | - Visualization of data using seaborn
8 | - Simple linear regression implementation using normal equations (using Numpy)
9 | - Gradient descent optimization (using numpy)
10 | - R-squared implementation using numpy
11 | - Residual plot analysis
12 | - Comparison of model using normal equation with scikit implementation
13 |
14 |
15 | Concepts are inspired from Prof. Andrew Ng's machine learning course and online learning through videos.
16 |
--------------------------------------------------------------------------------