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
course content

Kursusindhold

Lineær Regression med Python

Lineær Regression med Python

1. Simpel Lineær Regression
2. Multipel Lineær Regression
3. Polynomiel Regression
4. Valg af den Bedste Model

book
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.

For at være mere præcis bliver forudsigelserne mærkelige i det øjeblik, vi bevæger os uden for værdiernes interval fra træningssættet. At forudsige værdier uden for træningssættets interval kaldes ekstrapolation, og at forudsige værdier inden for intervallet kaldes interpolation.

Regression håndterer ikke ekstrapolation godt. Det anvendes til interpolation og kan give absurde forudsigelser, når nye tilfælde ligger uden for træningssættets interval.

Konfidensintervaller

Ved brug af OLS-klassen kan du også få konfidensintervaller for regressionslinjen på ethvert punkt. Syntaksen er dog en smule kompliceret:

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']

Her er alpha et konfidensniveau, som oftest sættes til 0.05.
Med ovenstående kode får du de nedre og øvre grænser for regressionslinjens konfidensinterval ved punktet X_new_tilde (eller et array af øvre og nedre grænser, hvis X_new_tilde er et array).

Med dette kan vi nu 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()
copy

Uden at kende fordelingen af et target kan vi ikke finde den præcise regressionslinje. Alt, hvad vi gør, er at forsøge at tilnærme den ud fra vores data. Konfidensintervallet for regressionslinjen er det interval, hvor den præcise regressionslinje ligger med konfidensniveauet alpha.
Du kan se, at intervallet bliver større og større, jo længere væk det kommer fra træningssættets område.

Note
Bemærk

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.

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

course content

Kursusindhold

Lineær Regression med Python

Lineær Regression med Python

1. Simpel Lineær Regression
2. Multipel Lineær Regression
3. Polynomiel Regression
4. Valg af den Bedste Model

book
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.

For at være mere præcis bliver forudsigelserne mærkelige i det øjeblik, vi bevæger os uden for værdiernes interval fra træningssættet. At forudsige værdier uden for træningssættets interval kaldes ekstrapolation, og at forudsige værdier inden for intervallet kaldes interpolation.

Regression håndterer ikke ekstrapolation godt. Det anvendes til interpolation og kan give absurde forudsigelser, når nye tilfælde ligger uden for træningssættets interval.

Konfidensintervaller

Ved brug af OLS-klassen kan du også få konfidensintervaller for regressionslinjen på ethvert punkt. Syntaksen er dog en smule kompliceret:

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']

Her er alpha et konfidensniveau, som oftest sættes til 0.05.
Med ovenstående kode får du de nedre og øvre grænser for regressionslinjens konfidensinterval ved punktet X_new_tilde (eller et array af øvre og nedre grænser, hvis X_new_tilde er et array).

Med dette kan vi nu 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()
copy

Uden at kende fordelingen af et target kan vi ikke finde den præcise regressionslinje. Alt, hvad vi gør, er at forsøge at tilnærme den ud fra vores data. Konfidensintervallet for regressionslinjen er det interval, hvor den præcise regressionslinje ligger med konfidensniveauet alpha.
Du kan se, at intervallet bliver større og større, jo længere væk det kommer fra træningssættets område.

Note
Bemærk

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.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4
some-alt