Linear Regressor with RMSE R2 and durbin watson Stats
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 18 23:37:32 2023
@author: Syed Kamran Bukhari
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#read CSV file
dataset = pd.read_csv('Assi_1_data.csv')
#impute mean values in replace of na
dataset=dataset[dataset>0]
data = np.array(dataset)
from sklearn.impute import SimpleImputer
Imputer = SimpleImputer(missing_values=np.nan, strategy='median')
Imputer.fit(data[:, 0:3])
data[:,0:3]= Imputer.transform(data[:,0:3])
data = pd.DataFrame(data)
X=data.iloc[:,-2].values
Y=data.iloc[:,-1].values
#diving dataset to training and Testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size= 0.2 ,random_state=1)
X_train = X_train.reshape(-1, 1)
Y_train = Y_train.reshape(-1, 1)
X_test = X_test.reshape(-1, 1)
Y_test = Y_test.reshape(-1, 1)
#linear Regression
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor.fit(X_train, Y_train)
print('The Slope is = ', regressor.coef_)
print('The X intercept is = ',regressor.intercept_)
#scatter plot for Training test
plt.scatter(X_train,Y_train ,color = 'red')
plt.plot(X_train, regressor.predict(X_train), color='Blue')
plt.title('Delivery Time vs Salary Time (training Set)')
plt.xlabel('Delivery Time')
plt.ylabel('Salary Time')
plt.show()
#prediction values
Y_pred=regressor.predict(X_test)
plt.scatter(X_test,Y_test, color = 'red')
plt.plot(X_train, regressor.predict(X_train), color='Blue')
plt.title('Delivery Time vs Salary Time (Testing Set)')
plt.xlabel('Delivery Time')
plt.ylabel('Salary Time')
plt.show()
#RMSE score
residual = abs(Y_test-Y_pred)
ss= residual**2
ss=ss.sum()/len(Y_test)
print('The RMSE score is =', ss)
#R2 score
from sklearn.metrics import r2_score
R2= r2_score(Y_test, Y_pred)
print('The R2 score is =',R2)
#Durbin Watson Statistics
from statsmodels.stats.stattools import durbin_watson
DW = durbin_watson(residual)
print('Durbin Watson Statistics =',DW)
Comments
Post a Comment