Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Interpolasjon vs. Ekstrapolasjon | Polynomisk Regresjon
Lineær Regresjon med Python
course content

Kursinnhold

Lineær Regresjon med Python

Lineær Regresjon med Python

1. Enkel Lineær Regresjon
2. Multippel Lineær Regresjon
3. Polynomisk Regresjon
4. Velge den Beste Modellen

book
Interpolasjon vs. Ekstrapolasjon

I forrige kapittel la vi merke til at våre prediksjoner med ulike modeller blir mer varierende i ytterkantene.

For å være mer presis, blir prediksjonene merkelige i det øyeblikket vi beveger oss utenfor verdiene fra treningssettet. Å predikere verdier utenfor treningssettets område kalles ekstrapolasjon, mens å predikere verdier innenfor området kalles interpolasjon.

Regresjon håndterer ikke ekstrapolasjon godt. Den brukes til interpolasjon og kan gi absurde prediksjoner når nye tilfeller ligger utenfor treningssettets område.

Konfidensintervaller

Ved å bruke OLS-klassen kan du også hente ut konfidensintervaller for regresjonslinjen ved ethvert punkt. Men syntaksen er litt komplisert:

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 konfidensnivå, vanligvis satt til 0.05.
Med koden over får du nedre og øvre grenser for regresjonslinjens konfidensintervall ved punktet X_new_tilde (eller et array av øvre og nedre grenser hvis X_new_tilde er et array).

Med dette kan vi nå plotte regresjonslinjen sammen med dens konfidensintervall:

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

Uten å kjenne fordelingen til en målvariabel, kan vi ikke finne den eksakte regresjonslinjen. Alt vi gjør er å forsøke å tilnærme den basert på våre data. Konfidensintervallet til regresjonslinjen er intervallet hvor den eksakte regresjonslinjen ligger med konfidensnivå alpha.
Du kan se at intervallet blir større og større jo lenger bort fra treningssettets område det kommer.

Note
Merk

Konfidensintervallene er bygget under forutsetning av at vi har valgt riktig modell (for eksempel enkel lineær regresjon eller polynomregresjon av grad 4).

Hvis modellen er dårlig valgt, er konfidensintervallet upålitelig, og det samme gjelder selve linjen. Du vil lære hvordan du velger den beste modellen i neste seksjon.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

Lineær Regresjon med Python

Lineær Regresjon med Python

1. Enkel Lineær Regresjon
2. Multippel Lineær Regresjon
3. Polynomisk Regresjon
4. Velge den Beste Modellen

book
Interpolasjon vs. Ekstrapolasjon

I forrige kapittel la vi merke til at våre prediksjoner med ulike modeller blir mer varierende i ytterkantene.

For å være mer presis, blir prediksjonene merkelige i det øyeblikket vi beveger oss utenfor verdiene fra treningssettet. Å predikere verdier utenfor treningssettets område kalles ekstrapolasjon, mens å predikere verdier innenfor området kalles interpolasjon.

Regresjon håndterer ikke ekstrapolasjon godt. Den brukes til interpolasjon og kan gi absurde prediksjoner når nye tilfeller ligger utenfor treningssettets område.

Konfidensintervaller

Ved å bruke OLS-klassen kan du også hente ut konfidensintervaller for regresjonslinjen ved ethvert punkt. Men syntaksen er litt komplisert:

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 konfidensnivå, vanligvis satt til 0.05.
Med koden over får du nedre og øvre grenser for regresjonslinjens konfidensintervall ved punktet X_new_tilde (eller et array av øvre og nedre grenser hvis X_new_tilde er et array).

Med dette kan vi nå plotte regresjonslinjen sammen med dens konfidensintervall:

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

Uten å kjenne fordelingen til en målvariabel, kan vi ikke finne den eksakte regresjonslinjen. Alt vi gjør er å forsøke å tilnærme den basert på våre data. Konfidensintervallet til regresjonslinjen er intervallet hvor den eksakte regresjonslinjen ligger med konfidensnivå alpha.
Du kan se at intervallet blir større og større jo lenger bort fra treningssettets område det kommer.

Note
Merk

Konfidensintervallene er bygget under forutsetning av at vi har valgt riktig modell (for eksempel enkel lineær regresjon eller polynomregresjon av grad 4).

Hvis modellen er dårlig valgt, er konfidensintervallet upålitelig, og det samme gjelder selve linjen. Du vil lære hvordan du velger den beste modellen i neste seksjon.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4
some-alt