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 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 :
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 meilleur.
Construction de la matrice X̃
Nous allons à nouveau utiliser la classe OLS
. Cependant, il est nécessaire de créer manuellement une matrice X̃ 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 X̃ 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)
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̃, 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.
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
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 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 :
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 meilleur.
Construction de la matrice X̃
Nous allons à nouveau utiliser la classe OLS
. Cependant, il est nécessaire de créer manuellement une matrice X̃ 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 X̃ 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)
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̃, 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.
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 !