Contenu du cours
Régression Linéaire Avec Python
Régression Linéaire Avec Python
Construction de la Régression Polynomiale
Chargement du fichier
Pour ce chapitre, nous avons un fichier nommé poly.csv
. Chargeons le fichier et examinons le contenu.
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))
Nous avons donc ici une caractéristique et la cible. Construisons un nuage de points.
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()
Il est difficile d'imaginer qu'une ligne droite s'adapte bien à ces données. Construisons donc une régression polynomiale !
Construction de la matrice X̃
Nous allons à nouveau utiliser la classe OLS
. Cependant, nous devons créer une matrice X̃. Nous le faisons manuellement en ajoutant une colonne Feature
au carré au DataFrame comme ceci :
Mais si nous voulons construire une régression polynomiale de haut degré, cela nécessitera d'ajouter beaucoup de colonnes comme celle-ci. Heureusement, Scikit-Learn fournit un moyen de le faire de manière moins pénible en utilisant la classe PolynomialFeatures
.
Remarque
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éthodereshape(-1,1)
le transformera en un tableau 2D avec le même contenu :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 pourfit_transform()
X = df['Feature'] # X est une Series pandas X = df[['Feature']] # X est un DataFrame pandas
Donc, pour construire un X̃ pour la Régression Polynomiale de degré n
, nous utiliserions :
Remarque
La classe
PolynomialFeatures
ajoute également une colonne avec des 1, donc vous n'avez pas besoin d'utilisersm.add_constant()
.
Construire la Régression Polynomiale et faire les prédictions
Sachant comment obtenir un X̃, nous sommes prêts à construire la Régression Polynomiale de la même manière que les modèles précédents :
Pour prédire de nouvelles valeurs, X_new
doit également être transformé en utilisant PolynomialFeatures
.
L'exemple exécutable suivant montre tout le processus de construction de la régression polynomiale. X_new
ici est un tableau 1D de points entre -0.1 et 1.5. Ils sont nécessaires pour la visualisation. Et comme c'est un tableau 1D, nous devrions appliquer la méthode reshape(-1,1)
avant de l'utiliser dans la classe PolynomialFeatures.
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
N'hésitez pas à jouer avec les valeurs de n
à la huitième ligne. Vous verrez comment le graphique change en fonction du degré de la régression polynomiale. Si vous faites attention, vous remarquerez peut-être à quel point les prédictions sont différentes pour les valeurs de caractéristiques inférieures à 0 ou supérieures à 1.4. C'est le sujet du prochain chapitre.
Merci pour vos commentaires !