Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Interpolointi vs Ekstrapolointi | Polynominen Regressio
Lineaarinen Regressio Pythonilla

Interpolointi vs Ekstrapolointi

Pyyhkäise näyttääksesi valikon

Edellisessä luvussa huomasimme, että ennusteemme eri malleilla poikkeavat toisistaan enemmän reuna-alueilla.

ExtrapolationGIF

Ennusteista tulee epäluotettavia, kun siirrytään koulutusdatan ulkopuolelle. Ennustamista tämän alueen ulkopuolella kutsutaan ekstrapolaatioksi, kun taas ennustaminen sen sisällä on interpolointia.

ExtrapolationVideo

Regressio ei käsittele ekstrapolaatiota hyvin. Sitä käytetään interpolointiin, ja se voi tuottaa absurdeja ennusteita, kun uudet havainnot ovat koulutusdatan ulkopuolella.

Luottamusvälit

OLS voi myös palauttaa regressiosuoran luottamusvälit:

lower = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']

alpha on luottamustaso (tyypillisesti 0.05). Tämä antaa ala- ja ylärajat jokaiselle arvolla X_new_tilde. Voit tämän jälkeen piirtää regressiosuoran yhdessä sen luottamusvälin kanssa.

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

Koska emme tiedä tavoitteen todellista jakaumaa, regressiosuora on vain likimääräinen arvio. Luottamusväli osoittaa, missä todellinen suora todennäköisesti sijaitsee. Väli laajenee, kun siirrytään kauemmas opetusaineistosta.

Note
Huomio

Luottamusvälit muodostetaan olettaen, että malli on valittu oikein (esim. yksinkertainen lineaarinen regressio tai neljännen asteen polynomiregressio).

Jos malli valitaan huonosti, luottamusväli on epäluotettava, samoin kuin itse suora. Seuraavassa osiossa opit, kuinka valita paras malli.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Interpolointi vs Ekstrapolointi

Edellisessä luvussa huomasimme, että ennusteemme eri malleilla poikkeavat toisistaan enemmän reuna-alueilla.

ExtrapolationGIF

Ennusteista tulee epäluotettavia, kun siirrytään koulutusdatan ulkopuolelle. Ennustamista tämän alueen ulkopuolella kutsutaan ekstrapolaatioksi, kun taas ennustaminen sen sisällä on interpolointia.

ExtrapolationVideo

Regressio ei käsittele ekstrapolaatiota hyvin. Sitä käytetään interpolointiin, ja se voi tuottaa absurdeja ennusteita, kun uudet havainnot ovat koulutusdatan ulkopuolella.

Luottamusvälit

OLS voi myös palauttaa regressiosuoran luottamusvälit:

lower = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']

alpha on luottamustaso (tyypillisesti 0.05). Tämä antaa ala- ja ylärajat jokaiselle arvolla X_new_tilde. Voit tämän jälkeen piirtää regressiosuoran yhdessä sen luottamusvälin kanssa.

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

Koska emme tiedä tavoitteen todellista jakaumaa, regressiosuora on vain likimääräinen arvio. Luottamusväli osoittaa, missä todellinen suora todennäköisesti sijaitsee. Väli laajenee, kun siirrytään kauemmas opetusaineistosta.

Note
Huomio

Luottamusvälit muodostetaan olettaen, että malli on valittu oikein (esim. yksinkertainen lineaarinen regressio tai neljännen asteen polynomiregressio).

Jos malli valitaan huonosti, luottamusväli on epäluotettava, samoin kuin itse suora. Seuraavassa osiossa opit, kuinka valita paras malli.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4
some-alt