Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Interpolation vs Ekstrapolation | Polynomiel Regression
Lineær Regression med Python

Interpolation vs Ekstrapolation

Stryg for at vise menuen

I det forrige kapitel bemærkede vi, at vores forudsigelser med forskellige modeller bliver mere forskellige i yderområderne.

ExtrapolationGIF

Forudsigelser bliver upålidelige, når vi bevæger os uden for træningsdataenes område. At forudsige uden for dette område kaldes ekstrapolation, mens forudsigelser inden for området kaldes interpolation.

ExtrapolationVideo

Regression håndterer ikke ekstrapolation godt. Det bruges til interpolation og kan give absurde forudsigelser, når nye observationer ligger uden for træningssættets område.

Konfidensintervaller

OLS kan også returnere konfidensintervaller for regressionslinjen:

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 er konfidensniveauet (typisk 0.05). Dette giver nedre og øvre grænser for hver værdi i X_new_tilde. Du kan derefter plotte regressionslinjen sammen med dens konfidensinterval.

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

Da vi ikke kender den sande fordeling af målet, er regressionslinjen kun en tilnærmelse. Konfidensintervallet viser, hvor den sande linje sandsynligvis ligger. Intervallet bliver bredere, jo længere vi bevæger os væk fra træningsdataene.

Note
Bemærk

Konfidensintervallerne er opstillet under antagelse af, at vi har valgt den korrekte model (f.eks. simpel lineær regression eller polynomiel regression af grad 4).

Hvis modellen vælges forkert, er konfidensintervallet upålideligt, og det samme gælder selve linjen. Du vil lære, hvordan du vælger den bedste model i det følgende afsnit.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 4
some-alt