├── README.md ├── regression.py ├── ridge_regression.py ├── lasso_regression.py ├── lin_reg_data.csv ├── linear regression from scratch-final.ipynb ├── linear regression l1 regularized from scratch-final.ipynb └── linear regression l2 regularized from scratch-final.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # linear-regression-using-only-numpy 2 | Implementation of unregularized, l1 regularized and l2 regularized linear regression using numpy and without sklearn 3 | -------------------------------------------------------------------------------- /regression.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[14]: 5 | 6 | 7 | import numpy as np 8 | import pandas as pd 9 | import matplotlib.pyplot as plt 10 | import statistics as st 11 | plt.rcParams['figure.figsize'] = (5.0, 5.0) 12 | 13 | 14 | 15 | # In[15]: 16 | 17 | 18 | class LinearRegression: 19 | def __init__(self,X_data,Y_data,l,iterations): #initialize all parameters 20 | self.X=X_data 21 | self.Y=Y_data 22 | #weight and bias 23 | self.m=0 24 | self.c=0 25 | self.L=l #learning rate 26 | self.iter=iterations #num of iterations 27 | self.n=99 #size of data 28 | 29 | def cost(self,pred_y): #cost function 30 | cost=np.sum(np.square(self.Y - pred_y))/(2*self.n) 31 | return(cost) 32 | 33 | def fit(self): 34 | self.history=np.zeros(self.iter) 35 | #updating values of m and c 36 | for i in range(self.iter): 37 | pred_y=self.m*self.X + self.c 38 | #print(pred_y) 39 | Dm= (-2/self.n)*(self.X*(self.Y-pred_y)) 40 | Dc= (-2/self.n)*(self.Y-pred_y) 41 | #update 42 | self.m=self.m-Dm*self.L 43 | self.c=self.c-Dc*self.L 44 | #cost is calculated for every iteration 45 | self.history[i]=self.cost(pred_y) 46 | self.mse=self.MSE(self.Y,pred_y) 47 | 48 | 49 | 50 | 51 | def MSE(self,pred_y,Y): 52 | errors=Y-pred_y #error is the difference between actual and predicted value 53 | mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros 54 | return mse 55 | 56 | def results(self): 57 | fig=plt.figure(figsize=(14,14)) 58 | a1=fig.add_subplot(211) 59 | 60 | plt.title('minimisation of errors across the iterations') 61 | a1.plot(self.history) 62 | 63 | 64 | #making predictions 65 | a2=fig.add_subplot(212) 66 | final_y=self.m*self.X +self.c 67 | plt.scatter(self.X,self.Y) 68 | plt.title('regrssion line') 69 | a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line 70 | 71 | plt.show() 72 | 73 | print ('Mean Squared Error=',self.mse) 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /ridge_regression.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[3]: 5 | 6 | 7 | import numpy as np 8 | import pandas as pd 9 | import matplotlib.pyplot as plt 10 | import statistics as st 11 | plt.rcParams['figure.figsize'] = (5.0, 5.0) 12 | 13 | 14 | 15 | # In[1]: 16 | 17 | 18 | class RidgeLinearRegression: 19 | def __init__(self,X_data,Y_data,l,l2,iterations): #initialize all parameters 20 | self.X=X_data 21 | self.Y=Y_data 22 | #weight and bias 23 | self.m=0 24 | self.c=0 25 | self.L=l #learning rate 26 | self.l2=l2 #regularization parameter 27 | self.iter=iterations #num of iterations 28 | self.n=float(len(self.X)) #size of data 29 | 30 | def cost(self,pred_y): #cost function 31 | cost=np.sum(np.square(self.Y-pred_y))/(2*self.n) + self.l2*np.sum(np.square(self.m)) 32 | return(cost) 33 | 34 | def fit(self): 35 | self.history=np.zeros(self.iter) 36 | #updating values of m and c 37 | for i in range(self.iter): 38 | pred_y=self.m*self.X + self.c 39 | #print(pred_y) 40 | Dm= (-2/self.n)*(self.X*(self.Y-pred_y))+2*self.l2*self.m 41 | Dc= (-2/self.n)*(self.Y-pred_y) 42 | #update 43 | self.m=self.m-Dm*self.L 44 | self.c=self.c-Dc*self.L 45 | #cost is calculated for every iteration 46 | self.history[i]=self.cost(pred_y) 47 | self.mse=self.MSE(self.Y,pred_y) 48 | 49 | 50 | 51 | 52 | def MSE(self,pred_y,Y): 53 | errors=Y-pred_y #error is the difference between actual and predicted value 54 | mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros 55 | return mse 56 | 57 | def results(self): 58 | fig=plt.figure(figsize=(14,14)) 59 | a1=fig.add_subplot(211) 60 | 61 | plt.title('minimisation of errors across the iterations') 62 | a1.plot(self.history) 63 | 64 | 65 | #making predictions 66 | a2=fig.add_subplot(212) 67 | final_y=self.m*self.X +self.c 68 | plt.scatter(self.X,self.Y) 69 | plt.title('regrssion line') 70 | a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line 71 | 72 | plt.show() 73 | 74 | print ('Mean Squared Error=',self.mse) 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lasso_regression.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[3]: 5 | 6 | 7 | import numpy as np 8 | import pandas as pd 9 | import matplotlib.pyplot as plt 10 | import statistics as st 11 | plt.rcParams['figure.figsize'] = (5.0, 5.0) 12 | 13 | 14 | 15 | # In[5]: 16 | 17 | 18 | class LassoLinearRegression: 19 | def __init__(self,X_data,Y_data,l,l1,iterations): #initialize all parameters 20 | self.X=X_data 21 | self.Y=Y_data 22 | #weight and bias 23 | self.m=np.random.randn(X_data.shape[0]) 24 | self.c=0 25 | self.L=l #learning rate 26 | self.l1=l1 #regularization parameter 27 | self.iter=iterations #num of iterations 28 | self.n=float(len(X_data)) #size of data 29 | 30 | def cost(self,pred_y): #cost function 31 | cost=np.sum(np.square(self.Y-pred_y))/(2*self.n) + self.l1*np.sum(self.m) 32 | return(cost) 33 | 34 | def fit(self): 35 | self.history=np.zeros(self.iter) 36 | pred_y=np.zeros((self.Y.shape)) 37 | for j in range(self.iter): 38 | for i in range(0,len(self.X)): 39 | pred_y[i]=self.m[i]*self.X[i]+self.c 40 | if self.m[i]>0: 41 | Dm= (-2/self.n)*(self.X[i]*(self.Y[i]-pred_y[i]))-self.l1 42 | else: 43 | Dm= (-2/self.n)*(self.X[i]*(self.Y[i]-pred_y[i]))+self.l1 44 | 45 | 46 | Dc= (-2/self.n)*(self.Y[i]-pred_y[i]) 47 | #update 48 | self.m[i]=self.m[i]-Dm*self.L 49 | self.c=self.c-Dc*self.L 50 | self.history[j]=self.cost(pred_y) 51 | self.mse=self.MSE(self.Y,pred_y) 52 | 53 | 54 | 55 | def MSE(self,pred_y,Y): 56 | errors=Y-pred_y #error is the difference between actual and predicted value 57 | mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros 58 | return mse 59 | 60 | def results(self): 61 | fig=plt.figure(figsize=(14,14)) 62 | a1=fig.add_subplot(211) 63 | 64 | plt.title('minimisation of errors across the iterations') 65 | a1.plot(self.history) 66 | 67 | 68 | #making predictions 69 | a2=fig.add_subplot(212) 70 | final_y=self.m*self.X +self.c 71 | plt.scatter(self.X,self.Y) 72 | plt.title('regrssion line') 73 | a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line 74 | 75 | plt.show() 76 | 77 | print ('Mean Squared Error=',self.mse) 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /lin_reg_data.csv: -------------------------------------------------------------------------------- 1 | 32.50234527,31.70700585 2 | 53.42680403,68.77759598 3 | 61.53035803,62.5623823 4 | 47.47563963,71.54663223 5 | 59.81320787,87.23092513 6 | 55.14218841,78.21151827 7 | 52.21179669,79.64197305 8 | 39.29956669,59.17148932 9 | 48.10504169,75.3312423 10 | 52.55001444,71.30087989 11 | 45.41973014,55.16567715 12 | 54.35163488,82.47884676 13 | 44.1640495,62.00892325 14 | 58.16847072,75.39287043 15 | 56.72720806,81.43619216 16 | 48.95588857,60.72360244 17 | 44.68719623,82.89250373 18 | 60.29732685,97.37989686 19 | 45.61864377,48.84715332 20 | 38.81681754,56.87721319 21 | 66.18981661,83.87856466 22 | 65.41605175,118.5912173 23 | 47.48120861,57.25181946 24 | 41.57564262,51.39174408 25 | 51.84518691,75.38065167 26 | 59.37082201,74.76556403 27 | 57.31000344,95.45505292 28 | 63.61556125,95.22936602 29 | 46.73761941,79.05240617 30 | 50.55676015,83.43207142 31 | 52.22399609,63.35879032 32 | 35.56783005,41.4128853 33 | 42.43647694,76.61734128 34 | 58.16454011,96.76956643 35 | 57.50444762,74.08413012 36 | 45.44053073,66.58814441 37 | 61.89622268,77.76848242 38 | 33.09383174,50.71958891 39 | 36.43600951,62.12457082 40 | 37.67565486,60.81024665 41 | 44.55560838,52.68298337 42 | 43.31828263,58.56982472 43 | 50.07314563,82.90598149 44 | 43.87061265,61.4247098 45 | 62.99748075,115.2441528 46 | 32.66904376,45.57058882 47 | 40.16689901,54.0840548 48 | 53.57507753,87.99445276 49 | 33.86421497,52.72549438 50 | 64.70713867,93.57611869 51 | 38.11982403,80.16627545 52 | 44.50253806,65.10171157 53 | 40.59953838,65.56230126 54 | 41.72067636,65.28088692 55 | 51.08863468,73.43464155 56 | 55.0780959,71.13972786 57 | 41.37772653,79.10282968 58 | 62.49469743,86.52053844 59 | 49.20388754,84.74269781 60 | 41.10268519,59.35885025 61 | 41.18201611,61.68403752 62 | 50.18638949,69.84760416 63 | 52.37844622,86.09829121 64 | 50.13548549,59.10883927 65 | 33.64470601,69.89968164 66 | 39.55790122,44.86249071 67 | 56.13038882,85.49806778 68 | 57.36205213,95.53668685 69 | 60.26921439,70.25193442 70 | 35.67809389,52.72173496 71 | 31.588117,50.39267014 72 | 53.66093226,63.64239878 73 | 46.68222865,72.24725107 74 | 43.10782022,57.81251298 75 | 70.34607562,104.2571016 76 | 44.49285588,86.64202032 77 | 57.5045333,91.486778 78 | 36.93007661,55.23166089 79 | 55.80573336,79.55043668 80 | 38.95476907,44.84712424 81 | 56.9012147,80.20752314 82 | 56.86890066,83.14274979 83 | 34.3331247,55.72348926 84 | 59.04974121,77.63418251 85 | 57.78822399,99.05141484 86 | 54.28232871,79.12064627 87 | 51.0887199,69.58889785 88 | 50.28283635,69.51050331 89 | 44.21174175,73.68756432 90 | 38.00548801,61.36690454 91 | 32.94047994,67.17065577 92 | 53.69163957,85.66820315 93 | 68.76573427,114.8538712 94 | 46.2309665,90.12357207 95 | 68.31936082,97.91982104 96 | 50.03017434,81.53699078 97 | 49.23976534,72.11183247 98 | 50.03957594,85.23200734 99 | 48.14985889,66.22495789 100 | 25.12848465,53.45439421 101 | -------------------------------------------------------------------------------- /linear regression from scratch-final.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "scrolled": true 8 | }, 9 | "outputs": [ 10 | { 11 | "data": { 12 | "text/html": [ 13 | "
\n", 14 | "\n", 27 | "\n", 28 | " \n", 29 | " \n", 30 | " \n", 31 | " \n", 32 | " \n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | "
32.5023452731.70700585
053.42680468.777596
161.53035862.562382
247.47564071.546632
359.81320887.230925
455.14218878.211518
\n", 63 | "
" 64 | ], 65 | "text/plain": [ 66 | " 32.50234527 31.70700585\n", 67 | "0 53.426804 68.777596\n", 68 | "1 61.530358 62.562382\n", 69 | "2 47.475640 71.546632\n", 70 | "3 59.813208 87.230925\n", 71 | "4 55.142188 78.211518" 72 | ] 73 | }, 74 | "execution_count": 1, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "import numpy as np\n", 81 | "import pandas as pd\n", 82 | "import matplotlib.pyplot as plt\n", 83 | "import statistics as st\n", 84 | "plt.rcParams['figure.figsize'] = (5.0, 5.0)\n", 85 | "\n", 86 | "data=pd.read_csv('lin_reg_data.csv')\n", 87 | "data.head()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 2, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | " class LinearRegression:\n", 97 | " def __init__(self,X_data,Y_data,l,iterations): #initialize all parameters\n", 98 | " self.X=X_data\n", 99 | " self.Y=Y_data\n", 100 | " #weight and bias\n", 101 | " self.m=0\n", 102 | " self.c=0\n", 103 | " self.L=l #learning rate\n", 104 | " self.iter=iterations #num of iterations\n", 105 | " self.n=float(len(self.X)) #size of data\n", 106 | " \n", 107 | " def cost(self,pred_y): #cost function\n", 108 | " cost=np.sum(np.square(self.Y-pred_y))/(2*self.n)\n", 109 | " return(cost)\n", 110 | " \n", 111 | " def fit(self):\n", 112 | " self.history=np.zeros(self.iter)\n", 113 | " #updating values of m and c\n", 114 | " for i in range(self.iter):\n", 115 | " pred_y=self.m*X + self.c\n", 116 | " #print(pred_y)\n", 117 | " Dm= (-2/self.n)*(self.X*(self.Y-pred_y))\n", 118 | " Dc= (-2/self.n)*(self.Y-pred_y)\n", 119 | " #update\n", 120 | " self.m=self.m-Dm*self.L\n", 121 | " self.c=self.c-Dc*self.L\n", 122 | " #cost is calculated for every iteration\n", 123 | " self.history[i]=self.cost(pred_y)\n", 124 | " self.mse=self.MSE(self.Y,pred_y)\n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " def MSE(self,pred_y,Y):\n", 130 | " errors=Y-pred_y #error is the difference between actual and predicted value\n", 131 | " mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros\n", 132 | " return mse\n", 133 | " \n", 134 | " def results(self):\n", 135 | " fig=plt.figure(figsize=(14,14))\n", 136 | " a1=fig.add_subplot(211)\n", 137 | "\n", 138 | " plt.title('minimisation of errors across the iterations')\n", 139 | " a1.plot(self.history)\n", 140 | "\n", 141 | "\n", 142 | " #making predictions\n", 143 | " a2=fig.add_subplot(212)\n", 144 | " final_y=self.m*self.X +self.c \n", 145 | " plt.scatter(self.X,self.Y)\n", 146 | " plt.title('regrssion line')\n", 147 | " a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line \n", 148 | " \n", 149 | " plt.show()\n", 150 | " \n", 151 | " print ('Mean Squared Error=',self.mse)\n", 152 | "\n", 153 | "\n" 154 | ] 155 | }, 156 | { 157 | "cell_type": "markdown", 158 | "metadata": {}, 159 | "source": [ 160 | "Plotting the dataset using a scatter plot" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 3, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "image/png": "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\n", 171 | "text/plain": [ 172 | "" 173 | ] 174 | }, 175 | "metadata": {}, 176 | "output_type": "display_data" 177 | } 178 | ], 179 | "source": [ 180 | "data=pd.read_csv('lin_reg_data.csv')\n", 181 | "data.head()\n", 182 | "X=data.iloc[:,0]\n", 183 | "Y=data.iloc[:,1]\n", 184 | "plt.scatter(X,Y)\n", 185 | "plt.show()\n" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 4, 191 | "metadata": {}, 192 | "outputs": [], 193 | "source": [ 194 | "l=LinearRegression(X,Y,0.005,100)" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 5, 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [ 203 | "l.fit()" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 6, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "data": { 213 | "image/png": "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\n", 214 | "text/plain": [ 215 | "" 216 | ] 217 | }, 218 | "metadata": {}, 219 | "output_type": "display_data" 220 | }, 221 | { 222 | "name": "stdout", 223 | "output_type": "stream", 224 | "text": [ 225 | "Mean Squared Error= 6.0803681265392814e-05\n" 226 | ] 227 | } 228 | ], 229 | "source": [ 230 | "l.results()" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": null, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [] 239 | } 240 | ], 241 | "metadata": { 242 | "kernelspec": { 243 | "display_name": "Python 3", 244 | "language": "python", 245 | "name": "python3" 246 | }, 247 | "language_info": { 248 | "codemirror_mode": { 249 | "name": "ipython", 250 | "version": 3 251 | }, 252 | "file_extension": ".py", 253 | "mimetype": "text/x-python", 254 | "name": "python", 255 | "nbconvert_exporter": "python", 256 | "pygments_lexer": "ipython3", 257 | "version": "3.6.4" 258 | }, 259 | "widgets": { 260 | "application/vnd.jupyter.widget-state+json": { 261 | "state": {}, 262 | "version_major": 2, 263 | "version_minor": 0 264 | } 265 | } 266 | }, 267 | "nbformat": 4, 268 | "nbformat_minor": 2 269 | } 270 | -------------------------------------------------------------------------------- /linear regression l1 regularized from scratch-final.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "scrolled": true 8 | }, 9 | "outputs": [ 10 | { 11 | "data": { 12 | "text/html": [ 13 | "
\n", 14 | "\n", 27 | "\n", 28 | " \n", 29 | " \n", 30 | " \n", 31 | " \n", 32 | " \n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | "
32.5023452731.70700585
053.42680468.777596
161.53035862.562382
247.47564071.546632
359.81320887.230925
455.14218878.211518
\n", 63 | "
" 64 | ], 65 | "text/plain": [ 66 | " 32.50234527 31.70700585\n", 67 | "0 53.426804 68.777596\n", 68 | "1 61.530358 62.562382\n", 69 | "2 47.475640 71.546632\n", 70 | "3 59.813208 87.230925\n", 71 | "4 55.142188 78.211518" 72 | ] 73 | }, 74 | "execution_count": 1, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "import numpy as np\n", 81 | "import pandas as pd\n", 82 | "import matplotlib.pyplot as plt\n", 83 | "import statistics as st\n", 84 | "plt.rcParams['figure.figsize'] = (5.0, 5.0)\n", 85 | "\n", 86 | "data=pd.read_csv('lin_reg_data.csv')\n", 87 | "data.head()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 2, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | " class LinearRegressionL1:\n", 97 | " def __init__(self,X_data,Y_data,l,l1,iterations): #initialize all parameters\n", 98 | " self.X=X_data\n", 99 | " self.Y=Y_data\n", 100 | " #weight and bias\n", 101 | " self.m=np.random.randn(self.X.shape[0])\n", 102 | " self.c=0\n", 103 | " self.L=l #learning rate\n", 104 | " self.l1=l1 #regularization parameter\n", 105 | " self.iter=iterations #num of iterations\n", 106 | " self.n=float(len(X)) #size of data\n", 107 | " \n", 108 | " def cost(self,pred_y): #cost function\n", 109 | " cost=np.sum(np.square(self.Y-pred_y))/(2*self.n) + self.l1*np.sum(self.m)\n", 110 | " return(cost)\n", 111 | " \n", 112 | " def fit(self):\n", 113 | " self.history=np.zeros(self.iter)\n", 114 | " pred_y=np.zeros((self.Y.shape))\n", 115 | " for j in range(self.iter):\n", 116 | " for i in range(0,len(self.X)):\n", 117 | " pred_y[i]=self.m[i]*X[i]+self.c\n", 118 | " if self.m[i]>0:\n", 119 | " Dm= (-2/self.n)*(self.X[i]*(self.Y[i]-pred_y[i]))-self.l1 \n", 120 | " else:\n", 121 | " Dm= (-2/self.n)*(self.X[i]*(self.Y[i]-pred_y[i]))+self.l1\n", 122 | "\n", 123 | "\n", 124 | " Dc= (-2/self.n)*(self.Y[i]-pred_y[i])\n", 125 | " #update\n", 126 | " self.m[i]=self.m[i]-Dm*self.L\n", 127 | " self.c=self.c-Dc*self.L\n", 128 | " self.history[j]=self.cost(pred_y)\n", 129 | " self.mse=self.MSE(self.Y,pred_y)\n", 130 | "\n", 131 | " \n", 132 | " \n", 133 | " def MSE(self,pred_y,Y):\n", 134 | " errors=Y-pred_y #error is the difference between actual and predicted value\n", 135 | " mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros\n", 136 | " return mse\n", 137 | " \n", 138 | " def results(self):\n", 139 | " fig=plt.figure(figsize=(14,14))\n", 140 | " a1=fig.add_subplot(211)\n", 141 | "\n", 142 | " plt.title('minimisation of errors across the iterations')\n", 143 | " a1.plot(self.history)\n", 144 | "\n", 145 | "\n", 146 | " #making predictions\n", 147 | " a2=fig.add_subplot(212)\n", 148 | " final_y=self.m*self.X +self.c \n", 149 | " plt.scatter(self.X,self.Y)\n", 150 | " plt.title('regrssion line')\n", 151 | " a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line \n", 152 | " \n", 153 | " plt.show()\n", 154 | " \n", 155 | " print ('Mean Squared Error=',self.mse)\n", 156 | "\n", 157 | "\n" 158 | ] 159 | }, 160 | { 161 | "cell_type": "markdown", 162 | "metadata": {}, 163 | "source": [ 164 | "Plotting the dataset using a scatter plot" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 3, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "image/png": "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\n", 175 | "text/plain": [ 176 | "" 177 | ] 178 | }, 179 | "metadata": {}, 180 | "output_type": "display_data" 181 | } 182 | ], 183 | "source": [ 184 | "data=pd.read_csv('lin_reg_data.csv')\n", 185 | "data.head()\n", 186 | "X=data.iloc[:,0]\n", 187 | "Y=data.iloc[:,1]\n", 188 | "plt.scatter(X,Y)\n", 189 | "plt.show()\n" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 4, 195 | "metadata": {}, 196 | "outputs": [], 197 | "source": [ 198 | "l=LinearRegressionL1(X,Y,0.005,0.001,100)" 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": 5, 204 | "metadata": {}, 205 | "outputs": [], 206 | "source": [ 207 | "l.fit()" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 6, 213 | "metadata": {}, 214 | "outputs": [ 215 | { 216 | "data": { 217 | "image/png": "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\n", 218 | "text/plain": [ 219 | "" 220 | ] 221 | }, 222 | "metadata": {}, 223 | "output_type": "display_data" 224 | }, 225 | { 226 | "name": "stdout", 227 | "output_type": "stream", 228 | "text": [ 229 | "Mean Squared Error= 5.6577784983058404e-05\n" 230 | ] 231 | } 232 | ], 233 | "source": [ 234 | "l.results()" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": null, 240 | "metadata": {}, 241 | "outputs": [], 242 | "source": [] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": null, 247 | "metadata": {}, 248 | "outputs": [], 249 | "source": [] 250 | } 251 | ], 252 | "metadata": { 253 | "kernelspec": { 254 | "display_name": "Python 3", 255 | "language": "python", 256 | "name": "python3" 257 | }, 258 | "language_info": { 259 | "codemirror_mode": { 260 | "name": "ipython", 261 | "version": 3 262 | }, 263 | "file_extension": ".py", 264 | "mimetype": "text/x-python", 265 | "name": "python", 266 | "nbconvert_exporter": "python", 267 | "pygments_lexer": "ipython3", 268 | "version": "3.6.4" 269 | }, 270 | "widgets": { 271 | "application/vnd.jupyter.widget-state+json": { 272 | "state": {}, 273 | "version_major": 2, 274 | "version_minor": 0 275 | } 276 | } 277 | }, 278 | "nbformat": 4, 279 | "nbformat_minor": 2 280 | } 281 | -------------------------------------------------------------------------------- /linear regression l2 regularized from scratch-final.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "scrolled": true 8 | }, 9 | "outputs": [ 10 | { 11 | "data": { 12 | "text/html": [ 13 | "
\n", 14 | "\n", 27 | "\n", 28 | " \n", 29 | " \n", 30 | " \n", 31 | " \n", 32 | " \n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | "
32.5023452731.70700585
053.42680468.777596
161.53035862.562382
247.47564071.546632
359.81320887.230925
455.14218878.211518
\n", 63 | "
" 64 | ], 65 | "text/plain": [ 66 | " 32.50234527 31.70700585\n", 67 | "0 53.426804 68.777596\n", 68 | "1 61.530358 62.562382\n", 69 | "2 47.475640 71.546632\n", 70 | "3 59.813208 87.230925\n", 71 | "4 55.142188 78.211518" 72 | ] 73 | }, 74 | "execution_count": 1, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "import numpy as np\n", 81 | "import pandas as pd\n", 82 | "import matplotlib.pyplot as plt\n", 83 | "import statistics as st\n", 84 | "plt.rcParams['figure.figsize'] = (5.0, 5.0)\n", 85 | "\n", 86 | "data=pd.read_csv('lin_reg_data.csv')\n", 87 | "data.head()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 2, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | " class LinearRegressionL2:\n", 97 | " def __init__(self,X_data,Y_data,l,l2,iterations): #initialize all parameters\n", 98 | " self.X=X_data\n", 99 | " self.Y=Y_data\n", 100 | " #weight and bias\n", 101 | " self.m=0\n", 102 | " self.c=0\n", 103 | " self.L=l #learning rate\n", 104 | " self.l2=l2 #regularization parameter\n", 105 | " self.iter=iterations #num of iterations\n", 106 | " self.n=float(len(self.X)) #size of data\n", 107 | " \n", 108 | " def cost(self,pred_y): #cost function\n", 109 | " cost=np.sum(np.square(self.Y-pred_y))/(2*self.n) + self.l2*np.sum(np.square(self.m))\n", 110 | " return(cost)\n", 111 | " \n", 112 | " def fit(self):\n", 113 | " self.history=np.zeros(self.iter)\n", 114 | " #updating values of m and c\n", 115 | " for i in range(self.iter):\n", 116 | " pred_y=self.m*self.X + self.c\n", 117 | " #print(pred_y)\n", 118 | " Dm= (-2/self.n)*(self.X*(self.Y-pred_y))+2*self.l2*self.m\n", 119 | " Dc= (-2/self.n)*(self.Y-pred_y)\n", 120 | " #update\n", 121 | " self.m=self.m-Dm*self.L\n", 122 | " self.c=self.c-Dc*self.L\n", 123 | " #cost is calculated for every iteration\n", 124 | " self.history[i]=self.cost(pred_y)\n", 125 | " self.mse=self.MSE(self.Y,pred_y)\n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " def MSE(self,pred_y,Y):\n", 131 | " errors=Y-pred_y #error is the difference between actual and predicted value\n", 132 | " mse=np.sum(np.square(errors))/self.n #mean of sum of square of erros\n", 133 | " return mse\n", 134 | " \n", 135 | " def results(self):\n", 136 | " fig=plt.figure(figsize=(14,14))\n", 137 | " a1=fig.add_subplot(211)\n", 138 | "\n", 139 | " plt.title('minimisation of errors across the iterations')\n", 140 | " a1.plot(self.history)\n", 141 | "\n", 142 | "\n", 143 | " #making predictions\n", 144 | " a2=fig.add_subplot(212)\n", 145 | " final_y=self.m*self.X +self.c \n", 146 | " plt.scatter(self.X,self.Y)\n", 147 | " plt.title('regrssion line')\n", 148 | " a2.plot([min(self.X),max(self.X)],[min(final_y),max(final_y)],color='red') #plotting the red line \n", 149 | " \n", 150 | " plt.show()\n", 151 | " \n", 152 | " print ('Mean Squared Error=',self.mse)\n", 153 | "\n", 154 | "\n" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "Plotting the dataset using a scatter plot" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 3, 167 | "metadata": {}, 168 | "outputs": [ 169 | { 170 | "data": { 171 | "image/png": "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\n", 172 | "text/plain": [ 173 | "" 174 | ] 175 | }, 176 | "metadata": {}, 177 | "output_type": "display_data" 178 | } 179 | ], 180 | "source": [ 181 | "data=pd.read_csv('lin_reg_data.csv')\n", 182 | "data.head()\n", 183 | "X=data.iloc[:,0]\n", 184 | "Y=data.iloc[:,1]\n", 185 | "plt.scatter(X,Y)\n", 186 | "plt.show()\n" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 5, 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "l=LinearRegressionL2(X,Y,0.005,0.001,100)" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 6, 201 | "metadata": {}, 202 | "outputs": [], 203 | "source": [ 204 | "l.fit()" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 7, 210 | "metadata": {}, 211 | "outputs": [ 212 | { 213 | "data": { 214 | "image/png": "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\n", 215 | "text/plain": [ 216 | "" 217 | ] 218 | }, 219 | "metadata": {}, 220 | "output_type": "display_data" 221 | }, 222 | { 223 | "name": "stdout", 224 | "output_type": "stream", 225 | "text": [ 226 | "Mean Squared Error= 8.5291379739768e-05\n" 227 | ] 228 | } 229 | ], 230 | "source": [ 231 | "l.results()" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": null, 237 | "metadata": {}, 238 | "outputs": [], 239 | "source": [] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": null, 244 | "metadata": {}, 245 | "outputs": [], 246 | "source": [] 247 | } 248 | ], 249 | "metadata": { 250 | "kernelspec": { 251 | "display_name": "Python 3", 252 | "language": "python", 253 | "name": "python3" 254 | }, 255 | "language_info": { 256 | "codemirror_mode": { 257 | "name": "ipython", 258 | "version": 3 259 | }, 260 | "file_extension": ".py", 261 | "mimetype": "text/x-python", 262 | "name": "python", 263 | "nbconvert_exporter": "python", 264 | "pygments_lexer": "ipython3", 265 | "version": "3.6.4" 266 | }, 267 | "widgets": { 268 | "application/vnd.jupyter.widget-state+json": { 269 | "state": {}, 270 | "version_major": 2, 271 | "version_minor": 0 272 | } 273 | } 274 | }, 275 | "nbformat": 4, 276 | "nbformat_minor": 2 277 | } 278 | --------------------------------------------------------------------------------