Python | Lineárna regresia pomocou sklearn
Predpoklad: Lineárna regresia
Lineárna regresia je algoritmus strojového učenia založený na učení pod dohľadom. Vykonáva regresnú úlohu. Regresia modeluje cieľovú predikčnú hodnotu na základe nezávislých premenných. Väčšinou sa používa na zisťovanie vzťahu medzi premennými a prognózovaním. Rôzne regresné modely sa líšia na základe – druhu vzťahu medzi závislými a nezávislými premennými, ktoré zvažujú, a počtu použitých nezávislých premenných. Tento článok demonštruje, ako používať rôzne knižnice Pythonu na implementáciu lineárnej regresie na daný súbor údajov. Ukážeme binárny lineárny model, pretože to bude jednoduchšie vizualizovať. V tejto ukážke model použije na učenie sa gradientový zostup. Môžete sa o tom dozvedieť tu.
Krok 1: Import všetkých požadovaných knižníc
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: Čítanie súboru údajov:
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()> |
Výkon:
Krok 3: Skúmanie rozptylu údajov
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ýkon:
Krok 4: Čistenie dát
Python3
# Eliminating NaN or missing input numbers> df_binary.fillna(method> => 'ffill'> , inplace> => True> )> |
Krok 5: Školenie nášho 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ýkon:
Krok 6: Skúmanie našich výsledkov
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ýkon:
Nízke skóre presnosti nášho modelu naznačuje, že náš regresívny model veľmi nezodpovedá existujúcim údajom. To naznačuje, že naše údaje nie sú vhodné na lineárnu regresiu. Niekedy však môže súbor údajov akceptovať lineárny regresor, ak vezmeme do úvahy iba jeho časť. Preverme si túto možnosť.
Krok 7: Práca s menším súborom údajov
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ýkon:
Už teraz vidíme, že prvých 500 riadkov sleduje lineárny model. Pokračujte rovnakými krokmi ako predtým.
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ýkon:
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ýkon:
Krok 8: Hodnotiace metriky pre regresiu
Nakoniec skontrolujeme výkonnosť modelu lineárnej regresie pomocou hodnotiacich metrík. Pre regresné algoritmy široko používame metriky mean_absolute_error a mean_squared_error na kontrolu výkonnosti 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ýkon:
MAE: 0.7927322046360309 MSE: 1.0251137190180517 RMSE: 1.0124789968281078