Requisit previ: Regressió lineal
La regressió lineal és un algorisme d'aprenentatge automàtic basat en l'aprenentatge supervisat. Realitza una tasca de regressió. La regressió modela un valor de predicció objectiu basat en variables independents. S'utilitza principalment per esbrinar la relació entre variables i previsió. Els diferents models de regressió es diferencien en funció del tipus de relació entre les variables dependents i independents, que estan considerant i el nombre de variables independents que s'utilitzen. Aquest article mostrarà com utilitzar les diverses biblioteques de Python per implementar la regressió lineal en un conjunt de dades determinat. Demostrarem un model lineal binari ja que serà més fàcil de visualitzar. En aquesta demostració, el model utilitzarà Gradient Descent per aprendre. Podeu aprendre-ne aquí.
Pas 1: Importació de totes les biblioteques necessàries
Python 3
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> |
>
>
Pas 2: Lectura del conjunt de dades:
Python 3
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()> |
>
>
Sortida:
Pas 3: Explorant la dispersió de dades
Python 3
#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()> |
>
>
Sortida:

Carpeta de canvi de nom de Linux
Pas 4: Neteja de dades
Python 3
# Eliminating NaN or missing input numbers> df_binary.fillna(method>=>'ffill'>, inplace>=> True>)> |
>
>
Pas 5: Entrenant el nostre model
Python 3
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))> |
>
>
Sortida:
Pas 6: Explorant els nostres resultats
Python 3
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> |
>
>
Sortida:
La baixa puntuació de precisió del nostre model suggereix que el nostre model regressiu no encaixa gaire bé amb les dades existents. Això suggereix que les nostres dades no són adequades per a la regressió lineal. Però de vegades, un conjunt de dades pot acceptar un regressor lineal si només en tenim en compte una part. Comprovem aquesta possibilitat.
Pas 7: Treballant amb un conjunt de dades més petit
Python 3
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>)> |
>
>
Sortida:
Ja veiem que les primeres 500 files segueixen un model lineal. Continuant amb els mateixos passos que abans.
Python 3
imatge de reducció
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))> |
>
>
Sortida:
Python 3
y_pred>=> regr.predict(X_test)> plt.scatter(X_test, y_test, color>=>'b'>)> plt.plot(X_test, y_pred, color>=>'k'>)> > plt.show()> |
>
>
Sortida:

Pas 8: Mètriques d'avaluació per a la regressió
Finalment, comprovem el rendiment del model de regressió lineal amb l'ajuda de mètriques d'avaluació. Per als algorismes de regressió, fem servir àmpliament les mètriques mean_absolute_error i mean_squared_error per comprovar el rendiment del model.
Python 3
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)> |
>
>
Sortida:
MAE: 0.7927322046360309 MSE: 1.0251137190180517 RMSE: 1.0124789968281078>