logo

Python | Lineární regrese pomocí sklearn

Předpoklad: Lineární regrese

Lineární regrese je algoritmus strojového učení založený na učení pod dohledem. Provádí regresní úlohu. Regrese modeluje cílovou predikční hodnotu založenou na nezávislých proměnných. Většinou se používá pro zjišťování vztahu mezi proměnnými a prognózováním. Různé regresní modely se liší podle – druhu vztahu mezi závislými a nezávislými proměnnými, které zvažují, a počtu použitých nezávislých proměnných. Tento článek demonstruje, jak používat různé knihovny Pythonu k implementaci lineární regrese na danou datovou sadu. Předvedeme binární lineární model, protože jej bude snazší vizualizovat. V této ukázce bude model k učení používat Gradient Descent. Můžete se o tom dozvědět zde.



Krok 1: Import všech požadovaných knihoven

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>

>

>

Krok 2: Čtení datové sady:

Python3




nejkrásnější úsměv na světě
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()>

>

>

Výstup:

Krok 3: Zkoumání rozptylu dat

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

>

>

Výstup:

Krok 4: Čištění dat

Python3




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

>

>

Krok 5: Školení našeho modelu

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

>

>

Výstup:

Krok 6: Prozkoumání našich výsledků

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>

>

>

Výstup:

Nízké skóre přesnosti našeho modelu naznačuje, že náš regresní model příliš nesedí s existujícími daty. To naznačuje, že naše data nejsou vhodná pro lineární regresi. Někdy však datová sada může přijmout lineární regresor, pokud vezmeme v úvahu pouze její část. Pojďme si tuto možnost ověřit.

Krok 7: Práce s menším souborem dat

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

>

>

Výstup:

Již nyní vidíme, že prvních 500 řádků sleduje lineární model. Pokračujte stejnými kroky jako dříve.

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

>

>

Výstup:

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

>

>

Výstup:

Krok 8: Metriky hodnocení pro regresi

Nakonec zkontrolujeme výkonnost modelu lineární regrese pomocí hodnotících metrik. Pro regresní algoritmy široce používáme metriky mean_absolute_error a mean_squared_error ke kontrole výkonu modelu.

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

>

>

Výstup:

MAE: 0.7927322046360309 MSE: 1.0251137190180517 RMSE: 1.0124789968281078>