Construction 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 :
123456import 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))
Nous avons donc ici une caractéristique et la cible. Ensuite, nous allons construire un nuage de points pour comprendre la relation entre la caractéristique et la cible :
123456789import 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()
Il est difficile d'imaginer qu'une droite puisse bien ajuster ces données, donc une régression polynomiale sera un choix bien plus approprié.
Construction de la matrice X̃
Nous allons à nouveau utiliser la classe OLS. Cependant, il est nécessaire de créer manuellement une matrice X̃. Cela se fait en ajoutant une colonne 'Feature' au DataFrame comme suit :
df['Feature_squared'] = df['Feature'] ** 2
Cependant, pour construire une régression polynomiale de degré élevé, il faudrait ajouter de nombreuses colonnes de cette manière. Heureusement, Scikit-Learn propose une méthode plus efficace 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
Ainsi, pour construire un X̃ pour la régression polynomiale de degré n, il convient d'utiliser :
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
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 X̃, il est possible de 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, il est également nécessaire de transformer X_new à 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 illustre l'ensemble du processus de construction d'une régression polynomiale. Ici, X_new est un tableau à une dimension contenant des points compris entre -0.1 et 1.5. Ces points sont utilisés pour la visualisation. Étant donné qu'il s'agit d'un tableau à une dimension, il convient d'appliquer la méthode reshape(-1,1) avant de l'utiliser dans la classe PolynomialFeatures.
12345678910111213141516171819import 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()
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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you explain what the X̃ matrix represents in polynomial regression?
How does the PolynomialFeatures class work in practice?
What happens if I increase the degree n in the polynomial regression?
Awesome!
Completion rate improved to 5.26
Construction 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 :
123456import 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))
Nous avons donc ici une caractéristique et la cible. Ensuite, nous allons construire un nuage de points pour comprendre la relation entre la caractéristique et la cible :
123456789import 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()
Il est difficile d'imaginer qu'une droite puisse bien ajuster ces données, donc une régression polynomiale sera un choix bien plus approprié.
Construction de la matrice X̃
Nous allons à nouveau utiliser la classe OLS. Cependant, il est nécessaire de créer manuellement une matrice X̃. Cela se fait en ajoutant une colonne 'Feature' au DataFrame comme suit :
df['Feature_squared'] = df['Feature'] ** 2
Cependant, pour construire une régression polynomiale de degré élevé, il faudrait ajouter de nombreuses colonnes de cette manière. Heureusement, Scikit-Learn propose une méthode plus efficace 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
Ainsi, pour construire un X̃ pour la régression polynomiale de degré n, il convient d'utiliser :
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
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 X̃, il est possible de 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, il est également nécessaire de transformer X_new à 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 illustre l'ensemble du processus de construction d'une régression polynomiale. Ici, X_new est un tableau à une dimension contenant des points compris entre -0.1 et 1.5. Ces points sont utilisés pour la visualisation. Étant donné qu'il s'agit d'un tableau à une dimension, il convient d'appliquer la méthode reshape(-1,1) avant de l'utiliser dans la classe PolynomialFeatures.
12345678910111213141516171819import 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()
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.
Merci pour vos commentaires !