logo

Pitón | Regresión lineal usando sklearn

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>