From 25543404dfb936a2135d7e567559ba55fbb1e22d Mon Sep 17 00:00:00 2001 From: epicalyx <32308101+epicalyx@users.noreply.github.com> Date: Wed, 3 Oct 2018 19:12:22 +0530 Subject: [PATCH 1/2] gradient_descent/python/gradient_descent.ipynb Implementation of Gradient Descent in python 3 --- .../Gradient Descent Description.docx | Bin 0 -> 80893 bytes .../gradient_descent.ipynb | 1151 +++++++++++++++++ 2 files changed, 1151 insertions(+) create mode 100644 linear_regression_class/Gradient Descent Description.docx create mode 100644 linear_regression_class/gradient_descent.ipynb diff --git a/linear_regression_class/Gradient Descent Description.docx b/linear_regression_class/Gradient Descent Description.docx new file mode 100644 index 0000000000000000000000000000000000000000..82ab773d377762999f1200ca1dd06f349eab986d GIT binary patch literal 80893 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�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�Z~MugrAWci^kyIjz^jBY55{Wo4H-$nP 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%0DEzVe^s8L)CvUx!W~aqm2mhk&D4#NsLO|03 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" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Computing cost function\n", + "def cost_function(m,theta0,theta1,x,y):\n", + " return 1/2/m* sum([(theta0 + theta1*np.asarray([x[i]])-y[i])**2 for i in range(m)]) # Here m is the number of training exaples, theta0 and theta1 are the parameters\n", + " # theta0+theta1*X is our hypotheses function \n", + " \n", + "#Gradient Descent Algorithm function\n", + "def gradient_descent(alpha,x,y,precion_rate=0.0001,max_iterations=1000):\n", + " converged=False\n", + " iterations=0\n", + " m=x.shape[0] #number of training samples\n", + " \n", + " #initializing theta\n", + " theta0=0\n", + " theta1=0\n", + " \n", + " #cost function J(theta) for mean squared error\n", + " J = cost_function(m,theta0,theta1,x,y)\n", + " print('J=',J)\n", + " \n", + " #Iterate loop\n", + " num_iterations=0\n", + " while not converged:\n", + " # for each training we will compute the gradient (d/d_theta J(theta))\n", + " grad0= 1.0/m*sum([(theta0 + theta1*np.asarray([x[i]])-y[i]) for i in range (m)])\n", + " grad1= 1.0/m*sum([(theta0 + theta1*np.asarray([x[i]])-y[i])*np.asarray([x[i]]) for i in range(m)])\n", + " \n", + " #update the temporary parameters \n", + " temp0= theta0 - alpha*grad0\n", + " temp1= theta1 - alpha*grad1\n", + " \n", + " #update actual parameters\n", + " theta0=temp0\n", + " theta1=temp1\n", + " \n", + " #mean squared error \n", + " e = cost_function(m,theta0,theta1,x,y)\n", + " print('J=',e)\n", + " J=e #update error\n", + " iterations+=1 #update iterations\n", + " \n", + " \n", + " if iterations== max_iterations:\n", + " print(\"Maximum iterations exceeded!\")\n", + " converged=True\n", + " \n", + " return theta0,theta1\n", + " \n", + "\n", + "if __name__== '__main__':\n", + " df=pd.read_csv('file1.txt',names=['x','y']) #the file has been added to the repository\n", + " x=df['x']\n", + " y=df['y']\n", + " \n", + " alpha=0.01 #learning rate\n", + " precision_rate=0.01 #convergence criteria \n", + " \n", + " #call gradient descent, and get the values for intercept(=theta0) and slope(=theta1) according to the equation y=m*x+c\n", + " theta0,theta1= gradient_descent(alpha,x,y,precision_rate,max_iterations=1000)\n", + " print('theta0='+str(theta0)+ 'theta1='+str(theta1))\n", + " \n", + " #plot to evaluate perfromance\n", + " for i in range (x.shape[0]):\n", + " y_predict=theta0+theta1*x\n", + " \n", + " pylab.plot(x,y,'o')\n", + " pylab.plot(x,y_predict,'k-')\n", + " pylab.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From b94341d4c704a463c653e06be886ef477849f028 Mon Sep 17 00:00:00 2001 From: Taru <32308101+epicalyx@users.noreply.github.com> Date: Mon, 8 Oct 2018 23:32:42 +0530 Subject: [PATCH 2/2] Normal equation for linear regression Added implementation for normal equation for linear regression in python and the dataset file. --- linear_regression_class/file1.txt | 97 ++++++++++++++++++++++ linear_regression_class/normal_equation.py | 41 +++++++++ 2 files changed, 138 insertions(+) create mode 100644 linear_regression_class/file1.txt create mode 100644 linear_regression_class/normal_equation.py diff --git a/linear_regression_class/file1.txt b/linear_regression_class/file1.txt new file mode 100644 index 00000000..24cba746 --- /dev/null +++ b/linear_regression_class/file1.txt @@ -0,0 +1,97 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233 +8.3829,11.886 +7.4764,4.3483 +8.5781,12 +6.4862,6.5987 +5.0546,3.8166 +5.7107,3.2522 +14.164,15.505 +5.734,3.1551 +8.4084,7.2258 +5.6407,0.71618 +5.3794,3.5129 +6.3654,5.3048 +5.1301,0.56077 +6.4296,3.6518 +7.0708,5.3893 +6.1891,3.1386 +20.27,21.767 +5.4901,4.263 +6.3261,5.1875 +5.5649,3.0825 +18.945,22.638 +12.828,13.501 +10.957,7.0467 +13.176,14.692 +22.203,24.147 +5.2524,-1.22 +6.5894,5.9966 +9.2482,12.134 +5.8918,1.8495 +8.2111,6.5426 +7.9334,4.5623 +8.0959,4.1164 +5.6063,3.3928 +12.836,10.117 +6.3534,5.4974 +5.4069,0.55657 +6.8825,3.9115 +11.708,5.3854 +5.7737,2.4406 +7.8247,6.7318 +7.0931,1.0463 +5.0702,5.1337 +5.8014,1.844 +11.7,8.0043 +5.5416,1.0179 +7.5402,6.7504 +5.3077,1.8396 +7.4239,4.2885 +7.6031,4.9981 +6.3328,1.4233 +6.3589,-1.4211 +6.2742,2.4756 +5.6397,4.6042 +9.3102,3.9624 +9.4536,5.4141 +8.8254,5.1694 +5.1793,-0.74279 +21.279,17.929 +14.908,12.054 +18.959,17.054 +7.2182,4.8852 +8.2951,5.7442 +10.236,7.7754 +5.4994,1.0173 +20.341,20.992 +10.136,6.6799 +7.3345,4.0259 +6.0062,1.2784 +7.2259,3.3411 +5.0269,-2.6807 +6.5479,0.29678 +7.5386,3.8845 +5.0365,5.7014 +10.274,6.7526 +5.1077,2.0576 +5.7292,0.47953 +5.1884,0.20421 +6.3557,0.67861 +9.7687,7.5435 +6.5159,5.3436 +8.5172,4.2415 +9.1802,6.7981 +6.002,0.92695 +5.5204,0.152 +5.0594,2.8214 +5.7077,1.8451 +7.6366,4.2959 +5.8707,7.2029 +5.3054,1.9869 +8.2934,0.14454 +13.394,9.0551 +5.4369,0.61705 \ No newline at end of file diff --git a/linear_regression_class/normal_equation.py b/linear_regression_class/normal_equation.py new file mode 100644 index 00000000..168cf065 --- /dev/null +++ b/linear_regression_class/normal_equation.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[42]: + + +#Importing all the required libraries +import pandas as pd +import matplotlib.pyplot as plt +import pylab +import numpy as np +from numpy.linalg import inv +import random + + +# In[45]: + + +''' According to normal equation method the optimal value of parameter theta for which cost function is minimum can be computed by + setting the derivative of cost function with respect to each value of theta in the parameter matrix to 0 + By this method we get the parameter matrix theta equal to: + theta = inverse(X'*X)*X'*Y , where X' = transpose of X(feature matrix) and where Y is the target matrix''' +if __name__== '__main__': + df=pd.read_csv('file1.txt',names=['x','y']) #the file has been added to the repository + x=df['x'] + y=df['y'] + m=x.shape[0] #no. of training examples + X=[np.array([x[i]])for i in range (m)] #converting the table of input features into a matrix + Y=[np.array([y[i]]) for i in range (m)] #converting the target features values into a matrix + Xtrans=np.transpose(X) + theta_best=np.dot((np.dot((inv(np.dot(Xtrans,X))),Xtrans)),y) #computing the value of theta for which cost function is minimum by using the normal equation + + + #plot to evaluate perfromance + for i in range (x.shape[0]): + y_predict=theta_best*X + + pylab.plot(x,y,'o') + pylab.plot(x,y_predict,'k-') + pylab.show() +