Būtina sąlyga: Tiesinė regresija
Tiesinė regresija yra mašininio mokymosi algoritmas, pagrįstas prižiūrimu mokymusi. Jis atlieka regresijos užduotį. Regresija modeliuoja tikslinę prognozės vertę, pagrįstą nepriklausomais kintamaisiais. Jis dažniausiai naudojamas norint išsiaiškinti ryšį tarp kintamųjų ir prognozavimo. Skirtingi regresijos modeliai skiriasi pagal – priklausomų ir nepriklausomų kintamųjų ryšį, į juos atsižvelgiama ir naudojamų nepriklausomų kintamųjų skaičių. Šiame straipsnyje bus parodyta, kaip naudoti įvairias Python bibliotekas tam tikro duomenų rinkinio tiesinei regresijai įgyvendinti. Mes parodysime dvejetainį tiesinį modelį, nes jį bus lengviau įsivaizduoti. Šioje demonstracijoje modelis naudos Gradiento nusileidimą mokytis. Apie tai galite sužinoti čia.
1 žingsnis: Importuojamos visos reikalingos bibliotekos
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> |
>
>
2 žingsnis: Skaitant duomenų rinkinį:
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()> |
>
>
Išvestis:
3 veiksmas: Duomenų sklaidos tyrinėjimas
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()> |
>
>
Išvestis:

4 veiksmas: Duomenų valymas
Python3
# Eliminating NaN or missing input numbers> df_binary.fillna(method>=>'ffill'>, inplace>=> True>)> |
>
>
5 veiksmas: Mūsų modelio mokymas
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))> |
>
>
Išvestis:
java tostring
6 veiksmas: Naršydami mūsų rezultatus
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> |
>
>
Išvestis:
Žemas mūsų modelio tikslumo balas rodo, kad mūsų regresinis modelis nelabai derėjo su esamais duomenimis. Tai rodo, kad mūsų duomenys nėra tinkami tiesinei regresijai. Tačiau kartais duomenų rinkinys gali priimti tiesinį regresorių, jei atsižvelgsime tik į jo dalį. Patikrinkime tokią galimybę.
7 veiksmas: Darbas su mažesniu duomenų rinkiniu
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>)> |
>
>
Išvestis:
Jau dabar matome, kad pirmosios 500 eilučių seka linijinį modelį. Tęskite tuos pačius veiksmus, kaip ir anksčiau.
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))> |
>
>
Išvestis:
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()> |
>
>
Išvestis:

8 veiksmas: Regresijos vertinimo metrika
Galiausiai įvertinimo metrikos pagalba patikriname tiesinės regresijos modelio veikimą. Regresijos algoritmams modelio veikimui patikrinti plačiai naudojame vidutinės_absoliutinės_klaidos ir vidutinės_kvadratinės klaidos metrikas.
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)> |
>
>
Išvestis:
MAE: 0.7927322046360309 MSE: 1.0251137190180517 RMSE: 1.0124789968281078>