logo

Python | Linjär regression med sklearn

Nödvändig förutsättning: Linjär regression

Linjär regression är en maskininlärningsalgoritm baserad på övervakad inlärning. Den utför en regressionsuppgift. Regression modellerar ett målförutsägelsevärde baserat på oberoende variabler. Det används mest för att ta reda på sambandet mellan variabler och prognoser. Olika regressionsmodeller skiljer sig beroende på – vilken typ av samband mellan de beroende och oberoende variablerna de överväger och antalet oberoende variabler som används. Den här artikeln kommer att demonstrera hur man använder de olika Python-biblioteken för att implementera linjär regression på en given datamängd. Vi kommer att demonstrera en binär linjär modell eftersom denna blir lättare att visualisera. I den här demonstrationen kommer modellen att använda Gradient Descent för att lära sig. Du kan lära dig om det här.



Steg 1: Importera alla nödvändiga bibliotek

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>

>

>

Steg 2: Läser datasetet:

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()>

skapande av orakelbord

>

>

Produktion:

Steg 3: Utforska dataspridningen

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()>

>

>

Produktion:

Steg 4: Datarensning

Python3




boolesk i c

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

>

>

Steg 5: Utbilda vår modell

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))>

alfabet till siffror
>

>

Produktion:

Steg 6: Utforskar våra resultat

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>

>

>

Produktion:

Den låga noggrannhetspoängen för vår modell tyder på att vår regressiva modell inte passar särskilt bra med befintliga data. Detta tyder på att våra data inte är lämpliga för linjär regression. Men ibland kan en datauppsättning acceptera en linjär regressor om vi bara tar hänsyn till en del av den. Låt oss se efter den möjligheten.

Steg 7: Arbeta med en mindre datauppsättning

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>)>

>

>

Produktion:

Vi kan redan nu se att de första 500 raderna följer en linjär modell. Fortsätter med samma steg som tidigare.

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))>

755 chmod

>

>

Produktion:

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()>

>

>

Produktion:

Steg 8: Utvärderingsmått för regression

Till sist kontrollerar vi prestandan för den linjära regressionsmodellen med hjälp av utvärderingsmått. För regressionsalgoritmer använder vi i stor utsträckning mean_absolute_error och mean_squared_error-mått för att kontrollera modellens prestanda.

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)>

>

git pull syntax
>

Produktion:

MAE: 0.7927322046360309 MSE: 1.0251137190180517 RMSE: 1.0124789968281078>