Python | Regresión lineal usando sklearn

Requisito previo: regresión lineal La regresión lineal es un algoritmo de aprendizaje automático basado en el aprendizaje supervisado. Realiza una tarea de regresión. La regresión modela un valor de predicción objetivo basado en variables independientes. Se utiliza principalmente para averiguar la relación entre las variables y la previsión. Los diferentes modelos de regresión difieren según el tipo de relación entre las variables dependientes e independientes que están considerando y la cantidad de variables independientes que se utilizan. Este artículo demostrará cómo usar las diversas bibliotecas de Python para implementar la regresión lineal en un conjunto de datos determinado. Demostraremos un modelo lineal binario ya que será más fácil de visualizar. En esta demostración, el modelo utilizará Gradient Descent para aprender. Puedes aprender sobre esto aquí. 

Paso 1: Importación de todas las bibliotecas requeridas 

Python3

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import preprocessing, svm
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

Paso 2: Lectura del conjunto de datos Puede descargar el conjunto de datos

Python3

df = pd.read_csv('bottle.csv')
df_binary = df[['Salnty', 'T_degC']]
 
# Taking only the selected two attributes from the dataset
df_binary.columns = ['Sal', 'Temp']
#display the first 5 rows
df_binary.head()

Producción:

  

Paso 3: Explorando la dispersión de datos 

Python3

#plotting the Scatter plot to check relationship between Sal and Temp
sns.lmplot(x ="Sal", y ="Temp", data = df_binary, order = 2, ci = None)

Producción:   

Paso 4: limpieza de datos 

Python3

# Eliminating NaN or missing input numbers
df_binary.fillna(method ='ffill', inplace = True)

  Paso 5: Entrenando nuestro modelo 

Python3

X = np.array(df_binary['Sal']).reshape(-1, 1)
y = np.array(df_binary['Temp']).reshape(-1, 1)
 
# Separating the data into independent and dependent variables
# Converting each dataframe into a numpy array
# since each dataframe contains only one column
df_binary.dropna(inplace = True)
 
# Dropping any rows with Nan values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
 
# Splitting the data into training and testing data
regr = LinearRegression()
 
regr.fit(X_train, y_train)
print(regr.score(X_test, y_test))

Producción:

 

Paso 6: Explorando nuestros resultados 

Python3

y_pred = regr.predict(X_test)
plt.scatter(X_test, y_test, color ='b')
plt.plot(X_test, y_pred, color ='k')
 
plt.show()
# Data scatter of predicted values

Producción:

 

El bajo puntaje de precisión de nuestro modelo sugiere que nuestro modelo regresivo no se ha ajustado muy bien con los datos existentes. Esto sugiere que nuestros datos no son adecuados para la regresión lineal. Pero a veces, un conjunto de datos puede aceptar un regresor lineal si consideramos solo una parte de él. Comprobemos esa posibilidad.   

Paso 7: trabajar con un conjunto de datos más pequeño 

Python3

df_binary500 = df_binary[:][:500]
   
# Selecting the 1st 500 rows of the data
sns.lmplot(x ="Sal", y ="Temp", data = df_binary500,
                               order = 2, ci = None)

Producción:

 

Ya podemos ver que las primeras 500 filas siguen un modelo lineal. Continuando con los mismos pasos que antes. 

Python3

df_binary500.fillna(method ='ffill', inplace = True)
 
X = np.array(df_binary500['Sal']).reshape(-1, 1)
y = np.array(df_binary500['Temp']).reshape(-1, 1)
 
df_binary500.dropna(inplace = True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
 
regr = LinearRegression()
regr.fit(X_train, y_train)
print(regr.score(X_test, y_test))

Producción:

 

Python3

y_pred = regr.predict(X_test)
plt.scatter(X_test, y_test, color ='b')
plt.plot(X_test, y_pred, color ='k')
 
plt.show()

Producción:

Paso 8: Métricas de evaluación para regresión

Por último, comprobamos el rendimiento del modelo de regresión lineal con la ayuda de métricas de evaluación. Para los algoritmos de regresión, usamos ampliamente las métricas mean_absolute_error y mean_squared_error para verificar el rendimiento del modelo. 

Python3

from sklearn.metrics import mean_absolute_error,mean_squared_error
 
mae = mean_absolute_error(y_true=y_test,y_pred=y_pred)
#squared True returns MSE value, False returns RMSE value.
mse = mean_squared_error(y_true=y_test,y_pred=y_pred) #default=True
rmse = mean_squared_error(y_true=y_test,y_pred=y_pred,squared=False)
 
print("MAE:",mae)
print("MSE:",mse)
print("RMSE:",rmse)

Producción:

MAE: 0.7927322046360309
MSE: 1.0251137190180517
RMSE: 1.0124789968281078

Publicación traducida automáticamente

Artículo escrito por AlindGupta 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 *