Interpolointi vs Ekstrapolointi
Edellisessä luvussa huomasimme, että ennusteemme eri mallien avulla poikkeavat yhä enemmän aineiston reunoilla.
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.
Regressio ei käsittele ekstrapolaatiota hyvin. Sitä käytetään interpolointiin, ja se voi tuottaa absurdeja ennusteita, kun uudet havainnot ovat koulutusdatan alueen 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 (yleensä 0.05). Tämä antaa ala- ja ylärajat jokaiselle arvolle X_new_tilde:ssa.
Voit tämän jälkeen piirtää regressiosuoran yhdessä sen luottamusvälin kanssa.
12345678910111213141516171819202122import 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. Luottamusväli osoittaa, missä todellinen suora todennäköisesti sijaitsee. Väli levenee, kun siirrytään kauemmas opetusdatasta.
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. Seuraavassa osiossa opit, kuinka paras malli valitaan.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain the difference between interpolation and extrapolation in more detail?
How do confidence intervals help us understand the reliability of predictions?
What happens if I use a different value for alpha in the confidence interval calculation?
Awesome!
Completion rate improved to 5.26
Interpolointi vs Ekstrapolointi
Pyyhkäise näyttääksesi valikon
Edellisessä luvussa huomasimme, että ennusteemme eri mallien avulla poikkeavat yhä enemmän aineiston reunoilla.
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.
Regressio ei käsittele ekstrapolaatiota hyvin. Sitä käytetään interpolointiin, ja se voi tuottaa absurdeja ennusteita, kun uudet havainnot ovat koulutusdatan alueen 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 (yleensä 0.05). Tämä antaa ala- ja ylärajat jokaiselle arvolle X_new_tilde:ssa.
Voit tämän jälkeen piirtää regressiosuoran yhdessä sen luottamusvälin kanssa.
12345678910111213141516171819202122import 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. Luottamusväli osoittaa, missä todellinen suora todennäköisesti sijaitsee. Väli levenee, kun siirrytään kauemmas opetusdatasta.
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. Seuraavassa osiossa opit, kuinka paras malli valitaan.
Kiitos palautteestasi!