Kurssisisältö
Lineaarinen Regressio Pythonilla
Lineaarinen Regressio Pythonilla
Interpolointi vs Ekstrapolointi
Edellisessä luvussa huomasimme, että eri mallien ennusteet poikkeavat toisistaan enemmän reuna-alueilla.
Tarkemmin sanottuna ennusteet muuttuvat oudoiksi siinä vaiheessa, kun siirrytään koulutusdatan arvoalueen ulkopuolelle. Arvojen ennustamista koulutusdatan alueen ulkopuolelle kutsutaan ekstrapoloinniksi, ja arvojen ennustamista alueen sisällä kutsutaan interpoloinniksi.
Regressio ei käsittele ekstrapolointia hyvin. Sitä käytetään interpolointiin, ja se voi tuottaa absurdeja ennusteita, kun uudet havainnot ovat koulutusdatan alueen ulkopuolella.
Luottamusvälit
OLS
-luokan avulla voit myös saada regressiosuoran luottamusvälit missä tahansa pisteessä. Mutta syntaksi on hieman monimutkainen:
lower = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']
Missä alpha
on luottamustaso, joka yleensä asetetaan arvoon 0.05
.
Yllä olevalla koodilla saat regressiosuoran luottamusvälin ala- ja ylärajat pisteessä X_new_tilde
(tai taulukon ylä- ja alarajoja, jos X_new_tilde
on taulukko).
Tämän avulla voimme nyt piirtää regressiosuoran yhdessä sen luottamusvälin kanssa:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Ilman tietoa kohteen jakaumasta emme voi löytää tarkkaa regressiosuoraa. Kaikki, mitä teemme, on yrittää arvioida sitä datamme perusteella. Regressiosuoran luottamusväli on väli, jossa tarkka regressiosuora sijaitsee luottamustasolla alpha
.
Voit huomata, että väli kasvaa suuremmaksi, mitä kauemmas mennään harjoitusaineiston alueesta.
Luottamusvälit rakennetaan olettaen, että malli on valittu oikein (esim. yksinkertainen lineaarinen regressio tai neljännen asteen polynomiregressio).
Jos malli on valittu huonosti, luottamusväli ei ole luotettava, eikä myöskään itse suora. Opit seuraavassa osiossa, kuinka valita paras malli.
Kiitos palautteestasi!