Requisito previo: Regresión lineal
La regresión lineal es un algoritmo de aprendizaje automático basado en 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 descubrir la relación entre variables y pronósticos. 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 utilizar 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: Importando 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> |
ordenación rápida
>
>
Paso 2: Leyendo 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>)> plt.show()> |
>
>
Producción:

Etapa 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
formatear la fecha en java
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:
La baja puntuación de precisión de nuestro modelo sugiere que nuestro modelo regresivo no se ajusta muy bien a 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 del mismo. 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>=>'fill'>, 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 la regresión
Por último, verificamos el rendimiento del modelo de regresión lineal con la ayuda de métricas de evaluación. Para los algoritmos de regresión utilizamos ampliamente las métricas mean_absolute_error y mean_squared_error para comprobar 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>