Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Construction de la Régression Polynomiale | Régression Polynomiale
Régression Linéaire Avec Python

bookConstruction de la Régression Polynomiale

Chargement du fichier

Pour ce chapitre, nous disposons d'un fichier nommé poly.csv, que nous allons d'abord charger et examiner son contenu :

123456
import pandas as pd 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) print(df.head(5))
copy

Nous avons donc ici une variable explicative et la cible. Ensuite, nous allons construire un nuage de points afin de comprendre la relation entre la variable explicative et la cible :

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Il est difficile d'imaginer qu'une droite puisse bien ajuster ces données, donc une régression polynomiale sera un choix bien meilleur.

Construction de la matrice X̃

Nous allons à nouveau utiliser la classe OLS. Cependant, il est nécessaire de créer manuellement une matrice en ajoutant une colonne 'Feature' au DataFrame comme suit :

df['Feature_squared'] = df['Feature'] ** 2

Mais si l'on souhaite construire une régression polynomiale de degré élevé, cela nécessitera l'ajout de nombreuses colonnes de ce type. Heureusement, Scikit-Learn propose une méthode plus simple grâce à la classe PolynomialFeatures.

La méthode fit_transform(X) attend que X soit soit un tableau 2D, soit un DataFrame pandas. Si votre X est un tableau numpy 1D, la méthode reshape(-1,1) le transformera en un tableau 2D avec le même contenu :

X = X.reshape(-1,1)

Si votre X est une colonne d'un DataFrame, vous pouvez utiliser X = df[['col1']] pour obtenir un DataFrame au lieu d'une Series pandas, qui n'est pas adaptée à fit_transform() :

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Pour construire un pour la régression polynomiale de degré n, on utilise :

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Remarque

La classe PolynomialFeatures ajoute également une colonne de 1, il n'est donc pas nécessaire d'utiliser sm.add_constant().

Construction de la régression polynomiale et réalisation des prédictions

En sachant comment obtenir un , nous sommes prêts à construire la régression polynomiale de la même manière que pour les modèles précédents :

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Pour prédire de nouvelles valeurs, X_new doit également être transformé à l'aide de PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

L'exemple exécutable suivant montre l'ensemble du processus de construction d'une régression polynomiale. Ici, X_new est un tableau 1D de points compris entre -0.1 et 1.5. Ils sont nécessaires pour la visualisation. Et comme il s'agit d'un tableau 1D, il faut appliquer la méthode reshape(-1,1) avant de l'utiliser dans la classe PolynomialFeatures.

12345678910111213141516171819
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 = 2 # 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).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

N'hésitez pas à modifier les valeurs de n à la huitième ligne. Vous observerez comment le graphique évolue en fonction du degré de la régression polynomiale. Si vous êtes attentif, vous remarquerez peut-être à quel point les prédictions diffèrent pour les valeurs de la variable explicative inférieures à 0 ou supérieures à 1,4. Ce sera le sujet du prochain chapitre.

question mark

Considérez le code suivant. Dans quel cas ce code s'exécutera-t-il sans erreur ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3

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

Awesome!

Completion rate improved to 5.26

bookConstruction de la Régression Polynomiale

Glissez pour afficher le menu

Chargement du fichier

Pour ce chapitre, nous disposons d'un fichier nommé poly.csv, que nous allons d'abord charger et examiner son contenu :

123456
import pandas as pd 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) print(df.head(5))
copy

Nous avons donc ici une variable explicative et la cible. Ensuite, nous allons construire un nuage de points afin de comprendre la relation entre la variable explicative et la cible :

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Il est difficile d'imaginer qu'une droite puisse bien ajuster ces données, donc une régression polynomiale sera un choix bien meilleur.

Construction de la matrice X̃

Nous allons à nouveau utiliser la classe OLS. Cependant, il est nécessaire de créer manuellement une matrice en ajoutant une colonne 'Feature' au DataFrame comme suit :

df['Feature_squared'] = df['Feature'] ** 2

Mais si l'on souhaite construire une régression polynomiale de degré élevé, cela nécessitera l'ajout de nombreuses colonnes de ce type. Heureusement, Scikit-Learn propose une méthode plus simple grâce à la classe PolynomialFeatures.

La méthode fit_transform(X) attend que X soit soit un tableau 2D, soit un DataFrame pandas. Si votre X est un tableau numpy 1D, la méthode reshape(-1,1) le transformera en un tableau 2D avec le même contenu :

X = X.reshape(-1,1)

Si votre X est une colonne d'un DataFrame, vous pouvez utiliser X = df[['col1']] pour obtenir un DataFrame au lieu d'une Series pandas, qui n'est pas adaptée à fit_transform() :

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Pour construire un pour la régression polynomiale de degré n, on utilise :

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Remarque

La classe PolynomialFeatures ajoute également une colonne de 1, il n'est donc pas nécessaire d'utiliser sm.add_constant().

Construction de la régression polynomiale et réalisation des prédictions

En sachant comment obtenir un , nous sommes prêts à construire la régression polynomiale de la même manière que pour les modèles précédents :

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Pour prédire de nouvelles valeurs, X_new doit également être transformé à l'aide de PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

L'exemple exécutable suivant montre l'ensemble du processus de construction d'une régression polynomiale. Ici, X_new est un tableau 1D de points compris entre -0.1 et 1.5. Ils sont nécessaires pour la visualisation. Et comme il s'agit d'un tableau 1D, il faut appliquer la méthode reshape(-1,1) avant de l'utiliser dans la classe PolynomialFeatures.

12345678910111213141516171819
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 = 2 # 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).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

N'hésitez pas à modifier les valeurs de n à la huitième ligne. Vous observerez comment le graphique évolue en fonction du degré de la régression polynomiale. Si vous êtes attentif, vous remarquerez peut-être à quel point les prédictions diffèrent pour les valeurs de la variable explicative inférieures à 0 ou supérieures à 1,4. Ce sera le sujet du prochain chapitre.

question mark

Considérez le code suivant. Dans quel cas ce code s'exécutera-t-il sans erreur ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
some-alt