Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Interpolation contre Extrapolation | Régression Polynomiale
Régression Linéaire Avec Python
course content

Contenu du cours

Régression Linéaire Avec Python

Régression Linéaire Avec Python

1. Régression Linéaire Simple
2. Régression Linéaire Multiple
3. Régression Polynomiale
4. Choosing the Best Model

book
Interpolation contre Extrapolation

Dans le chapitre précédent, nous avons remarqué que nos prédictions à l'aide de différents modèles deviennent plus diverses aux extrémités.

Pour être plus précis, les prédictions deviennent étranges dès que l'on dépasse l'intervalle des valeurs de l'ensemble d'entraînement. Prédire des valeurs en dehors de l'intervalle de l'ensemble d'entraînement s'appelle extrapolation, tandis que prédire des valeurs à l'intérieur de cet intervalle s'appelle interpolation.

La régression ne gère pas bien l'extrapolation. Elle est utilisée pour l'interpolation et peut produire des prédictions absurdes lorsque de nouvelles instances se situent en dehors de l'intervalle de l'ensemble d'entraînement.

Intervalles de confiance

En utilisant la classe OLS, il est également possible d'obtenir les intervalles de confiance pour la ligne de régression à n'importe quel point. Cependant, la syntaxe est un peu complexe :

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

alpha représente le niveau de confiance, généralement fixé à 0.05.
Avec ce code, il est possible d'obtenir les bornes inférieure et supérieure de l'intervalle de confiance de la ligne de régression au point X_new_tilde (ou un tableau de bornes si X_new_tilde est un tableau).

À partir de cela, il est maintenant possible de tracer la ligne de régression ainsi que son intervalle de confiance :

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

Sans connaître la distribution d'une cible, il n'est pas possible de déterminer exactement la ligne de régression. Il s'agit uniquement d'une approximation basée sur les données disponibles. L'intervalle de confiance de la ligne de régression correspond à l'intervalle dans lequel la ligne de régression exacte se situe avec un niveau de confiance alpha.
Il est possible de constater que cet intervalle s'élargit à mesure que l'on s'éloigne de la plage de l'ensemble d'entraînement.

Note
Remarque

Les intervalles de confiance sont construits en supposant que le modèle a été correctement choisi (par exemple, la régression linéaire simple ou la régression polynomiale de degré 4).

Si le modèle est mal choisi, l'intervalle de confiance n'est pas fiable, tout comme la courbe elle-même. Vous apprendrez à sélectionner le meilleur modèle dans la section suivante.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

course content

Contenu du cours

Régression Linéaire Avec Python

Régression Linéaire Avec Python

1. Régression Linéaire Simple
2. Régression Linéaire Multiple
3. Régression Polynomiale
4. Choosing the Best Model

book
Interpolation contre Extrapolation

Dans le chapitre précédent, nous avons remarqué que nos prédictions à l'aide de différents modèles deviennent plus diverses aux extrémités.

Pour être plus précis, les prédictions deviennent étranges dès que l'on dépasse l'intervalle des valeurs de l'ensemble d'entraînement. Prédire des valeurs en dehors de l'intervalle de l'ensemble d'entraînement s'appelle extrapolation, tandis que prédire des valeurs à l'intérieur de cet intervalle s'appelle interpolation.

La régression ne gère pas bien l'extrapolation. Elle est utilisée pour l'interpolation et peut produire des prédictions absurdes lorsque de nouvelles instances se situent en dehors de l'intervalle de l'ensemble d'entraînement.

Intervalles de confiance

En utilisant la classe OLS, il est également possible d'obtenir les intervalles de confiance pour la ligne de régression à n'importe quel point. Cependant, la syntaxe est un peu complexe :

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

alpha représente le niveau de confiance, généralement fixé à 0.05.
Avec ce code, il est possible d'obtenir les bornes inférieure et supérieure de l'intervalle de confiance de la ligne de régression au point X_new_tilde (ou un tableau de bornes si X_new_tilde est un tableau).

À partir de cela, il est maintenant possible de tracer la ligne de régression ainsi que son intervalle de confiance :

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

Sans connaître la distribution d'une cible, il n'est pas possible de déterminer exactement la ligne de régression. Il s'agit uniquement d'une approximation basée sur les données disponibles. L'intervalle de confiance de la ligne de régression correspond à l'intervalle dans lequel la ligne de régression exacte se situe avec un niveau de confiance alpha.
Il est possible de constater que cet intervalle s'élargit à mesure que l'on s'éloigne de la plage de l'ensemble d'entraînement.

Note
Remarque

Les intervalles de confiance sont construits en supposant que le modèle a été correctement choisi (par exemple, la régression linéaire simple ou la régression polynomiale de degré 4).

Si le modèle est mal choisi, l'intervalle de confiance n'est pas fiable, tout comme la courbe elle-même. Vous apprendrez à sélectionner le meilleur modèle dans la section suivante.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
some-alt