Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Interpolation kontra Extrapolation | Polynomregression
Linjär Regression med Python
course content

Kursinnehåll

Linjär Regression med Python

Linjär Regression med Python

1. Enkel Linjär Regression
2. Multipel Linjär Regression
3. Polynomregression
4. Välja Den Bästa Modellen

book
Interpolation kontra Extrapolation

I föregående kapitel märkte vi att våra förutsägelser med olika modeller blir mer varierande vid kanterna.

För att vara mer exakt blir förutsägelserna märkliga när vi passerar värdeintervallet från träningsuppsättningen. Att förutsäga värden utanför träningsuppsättningens intervall kallas extrapolering, och att förutsäga värden inom intervallet kallas interpolering.

Regression hanterar inte extrapolering särskilt bra. Den används för interpolering och kan ge orimliga förutsägelser när nya instanser ligger utanför träningsuppsättningens intervall.

Konfidensintervall

Med hjälp av OLS-klassen kan du även erhålla konfidensintervall för regressionslinjen vid varje punkt. Syntaxen är dock något komplicerad:

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

Där alpha är en konfidensnivå, vanligtvis satt till 0.05.
Med ovanstående kod får du de nedre och övre gränserna för regressionslinjens konfidensintervall vid punkten X_new_tilde (eller en array av övre och nedre gränser om X_new_tilde är en array).

Med detta kan vi nu visualisera regressionslinjen tillsammans med dess 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

Utan att känna till fördelningen för ett mål kan vi inte hitta den exakta regressionslinjen. Allt vi gör är att försöka approximera den baserat på våra data. Konfidensintervallet för regressionslinjen är det intervall där den exakta regressionslinjen ligger med konfidensnivån alpha.
Du kan se att intervallet blir större ju längre bort från träningsmängdens intervall man kommer.

Note
Notering

Konfidensintervallen är konstruerade under antagandet att vi har valt rätt modell (t.ex. Enkel linjär regression eller polynomregression av grad 4).

Om modellen är felaktigt vald är konfidensintervallet opålitligt, liksom själva linjen. Du kommer att lära dig hur du väljer den bästa modellen i nästa avsnitt.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

course content

Kursinnehåll

Linjär Regression med Python

Linjär Regression med Python

1. Enkel Linjär Regression
2. Multipel Linjär Regression
3. Polynomregression
4. Välja Den Bästa Modellen

book
Interpolation kontra Extrapolation

I föregående kapitel märkte vi att våra förutsägelser med olika modeller blir mer varierande vid kanterna.

För att vara mer exakt blir förutsägelserna märkliga när vi passerar värdeintervallet från träningsuppsättningen. Att förutsäga värden utanför träningsuppsättningens intervall kallas extrapolering, och att förutsäga värden inom intervallet kallas interpolering.

Regression hanterar inte extrapolering särskilt bra. Den används för interpolering och kan ge orimliga förutsägelser när nya instanser ligger utanför träningsuppsättningens intervall.

Konfidensintervall

Med hjälp av OLS-klassen kan du även erhålla konfidensintervall för regressionslinjen vid varje punkt. Syntaxen är dock något komplicerad:

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

Där alpha är en konfidensnivå, vanligtvis satt till 0.05.
Med ovanstående kod får du de nedre och övre gränserna för regressionslinjens konfidensintervall vid punkten X_new_tilde (eller en array av övre och nedre gränser om X_new_tilde är en array).

Med detta kan vi nu visualisera regressionslinjen tillsammans med dess 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

Utan att känna till fördelningen för ett mål kan vi inte hitta den exakta regressionslinjen. Allt vi gör är att försöka approximera den baserat på våra data. Konfidensintervallet för regressionslinjen är det intervall där den exakta regressionslinjen ligger med konfidensnivån alpha.
Du kan se att intervallet blir större ju längre bort från träningsmängdens intervall man kommer.

Note
Notering

Konfidensintervallen är konstruerade under antagandet att vi har valt rätt modell (t.ex. Enkel linjär regression eller polynomregression av grad 4).

Om modellen är felaktigt vald är konfidensintervallet opålitligt, liksom själva linjen. Du kommer att lära dig hur du väljer den bästa modellen i nästa avsnitt.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4
some-alt