Interpolation vs. Ekstrapolation
I det foregående kapitel bemærkede vi, at vores forudsigelser ved brug af forskellige modeller bliver mere forskellige i yderområderne.
Forudsigelser bliver upålidelige, når vi bevæger os uden for træningsdataenes interval. At forudsige uden for dette interval kaldes ekstrapolation, mens forudsigelser inden for intervallet kaldes interpolation.
Regression håndterer ikke ekstrapolation godt. Den anvendes til interpolation og kan give absurde forudsigelser, når nye tilfælde ligger uden for træningssættets interval.
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.
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()
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.
Konfidensintervallerne er konstrueret under antagelse af, at vi har valgt den korrekte model (f.eks. simpel lineær regression eller polynomiel regression af grad 4).
Hvis modellen er dårligt valgt, 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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Interpolation vs. Ekstrapolation
Stryg for at vise menuen
I det foregående kapitel bemærkede vi, at vores forudsigelser ved brug af forskellige modeller bliver mere forskellige i yderområderne.
Forudsigelser bliver upålidelige, når vi bevæger os uden for træningsdataenes interval. At forudsige uden for dette interval kaldes ekstrapolation, mens forudsigelser inden for intervallet kaldes interpolation.
Regression håndterer ikke ekstrapolation godt. Den anvendes til interpolation og kan give absurde forudsigelser, når nye tilfælde ligger uden for træningssættets interval.
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.
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()
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.
Konfidensintervallerne er konstrueret under antagelse af, at vi har valgt den korrekte model (f.eks. simpel lineær regression eller polynomiel regression af grad 4).
Hvis modellen er dårligt valgt, 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.
Tak for dine kommentarer!