In statistics, linear regression is a linear approach to modelling the relationship between a dependent variable and one or more independent variables. Let x1 be the independent variable and y be the dependent variable. We will define a linear relationship between these two variables as follows:
y=θ0+θ1x1
2. Define Loss Function
We will use the Mean Squared Error function.
L=n1i=1∑n(ytrue−ypredicted)2
3. Utilize the Gradient Descent Algorithm
You might know that the partial derivative of a function at its minimum value is equal to 0. So gradient descent basically uses this concept to estimate the parameters or weights of our model by minimizing the loss function.
Initialize the weights, θ0=0and θ1=0
Calculate the partial derivatives w.r.t. to θ0and θ1dθ0=−n2∑i=1n(yi−yiˉ)dθ1=−n2∑i=1n(yi−yiˉ)×xi
Update the weights
θ0=θ0−l×dθ0θ1=θ1−l×dθ1
Python Implementation
# Importing librariesimport numpy as npimport pandas as pdfrom sklearn.model_selection import train_test_split# Preparing the datasetdata = pd.DataFrame({'feature' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 'label' : [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]})
# Divide the data to training set and test setX_train, X_test, y_train, y_test =train_test_split(data['feature'], data['label'], test_size=0.30)# Method to make predictionsdefpredict(X,theta0,theta1):# Here the predict function is: theta0+theta1*xreturn np.array([(theta0 + theta1*x) for x in X])deflinear_regression(X,Y):# Initializing variables theta0 =0 theta1 =0 learning_rate =0.001 epochs =300 n =len(X)# Training iterationfor epoch inrange(epochs): y_pred =predict(X, theta0, theta1)## Here the loss function is: 1/n*sum(y-y_pred)^2 a.k.a mean squared error (mse)# Derivative of loss w.r.t. theta0 theta0_d =-(2/n) *sum(Y-y_pred)# Derivative of loss w.r.t. theta1 theta1_d =-(2/n) *sum(X*(Y-y_pred)) theta0 = theta0 - learning_rate * theta0_d theta1 = theta1 - learning_rate * theta1_d return theta0, theta1# Training the modeltheta0, theta1 =linear_regression(X_train, y_train)# Making predictionsy_pred =predict(X_test, theta0, theta1)# Evaluating the modelprint(list(y_test))print(y_pred)