Resolviendo Regresión Lineal en Python

La regresión lineal es un método común para modelar la relación entre una variable dependiente y una o más variables independientes. Los modelos lineales se desarrollan utilizando los parámetros que se estiman a partir de los datos. La regresión lineal es útil en la predicción y el pronóstico donde un modelo predictivo se ajusta a un conjunto de valores de datos observados para determinar la respuesta. Los modelos de regresión lineal a menudo se ajustan utilizando el enfoque de mínimos cuadrados donde el objetivo es minimizar el error.

Considere un conjunto de datos donde el atributo independiente está representado por x y el atributo dependiente está representado por y.

Se sabe que la ecuación de una línea recta es y = mx + b donde m es la pendiente y b es la intersección.
Para preparar un modelo de regresión simple del conjunto de datos dado, necesitamos calcular la pendiente y la intersección de la línea que mejor se ajusta a los puntos de datos.

¿Cómo calcular la pendiente y la intersección?

La fórmula matemática para calcular la pendiente y la intersección se dan a continuación.

Slope = Sxy/Sxx   
where Sxy and Sxx are sample covariance and sample variance respectively.

Intercept = ymean – slope* xmean

Usemos estas relaciones para determinar la regresión lineal para el conjunto de datos anterior. Para esto calculamos la media x , la media y , S xy , S xx como se muestra en la tabla.

Según las fórmulas anteriores,
Pendiente = 28/10 = 2,8
Intersección = 14,6 – 2,8 * 3 = 6,2

Por lo tanto,

The desired equation of the regression model is y = 2.8 x + 6.2

Usaremos estos valores para predecir los valores de y para los valores dados de x. El rendimiento del modelo puede analizarse calculando el error cuadrático medio y el valor R 2 .

Los cálculos se muestran a continuación.

Error cuadrático = 10,8 lo que significa que el error cuadrático medio = 3,28
Coeficiente de determinación (R 2 ) = 1- 10,8 / 89,2 = 0,878

 Low value of error and high value of R2 signify that the 
linear regression fits data well

Veamos la implementación de Python de la regresión lineal para este conjunto de datos.

Código 1: Importar todas las Bibliotecas necesarias.

import numpy as np
import matplotlib.pyplot as plt
  
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import statsmodels.api as sm

Código 2: Generar los datos. Calcule x mean , y mean , Sxx, Sxy para encontrar el valor de la pendiente y la intersección de la línea de regresión.

x = np.array([1,2,3,4,5]) 
y = np.array([7,14,15,18,19])
n = np.size(x)
  
x_mean = np.mean(x)
y_mean = np.mean(y)
x_mean,y_mean
  
Sxy = np.sum(x*y)- n*x_mean*y_mean
Sxx = np.sum(x*x)-n*x_mean*x_mean
  
b1 = Sxy/Sxx
b0 = y_mean-b1*x_mean
print('slope b1 is', b1)
print('intercept b0 is', b0)
  
plt.scatter(x,y)
plt.xlabel('Independent variable X')
plt.ylabel('Dependent variable y')

Producción:

slope b1 is 2.8
intercept b0 is 6.200000000000001

Código 3: Trace los puntos de datos dados y ajuste la línea de regresión.

y_pred = b1 * x + b0
  
plt.scatter(x, y, color = 'red')
plt.plot(x, y_pred, color = 'green')
plt.xlabel('X')
plt.ylabel('y')



Código 4: Analice el rendimiento del modelo calculando el error cuadrático medio y R 2

error = y - y_pred
se = np.sum(error**2)
print('squared error is', se)
  
mse = se/n 
print('mean squared error is', mse)
  
rmse = np.sqrt(mse)
print('root mean square error is', rmse)
  
SSt = np.sum((y - y_mean)**2)
R2 = 1- (se/SSt)
print('R square is', R2)

Producción:

squared error is 10.800000000000004
mean squared error is 2.160000000000001
root mean square error is 1.4696938456699071
R square is 0.8789237668161435

Código 5: use la biblioteca scikit para confirmar los pasos anteriores.

x = x.reshape(-1,1)
regression_model = LinearRegression()
  
# Fit the data(train the model)
regression_model.fit(x, y)
  
# Predict
y_predicted = regression_model.predict(x)
  
# model evaluation
mse=mean_squared_error(y,y_predicted)
  
rmse = np.sqrt(mean_squared_error(y, y_predicted))
r2 = r2_score(y, y_predicted)
  
# printing values
print('Slope:' ,regression_model.coef_)
print('Intercept:', regression_model.intercept_)
print('MSE:',mse)
print('Root mean squared error: ', rmse)
print('R2 score: ', r2)

Producción:

Slope: [2.8]
Intercept: 6.199999999999999
MSE: 2.160000000000001
Root mean squared error:  1.4696938456699071
R2 score:  0.8789237668161435

Conclusión: este artículo ayuda a comprender las matemáticas detrás de la regresión simple e implementarlas usando Python.

Publicación traducida automáticamente

Artículo escrito por ektamaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *