Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Features polynomiales avec PolynomialFeatures
Le prix d'un appartement de 200m2 n'est pas le double de celui d'un 100m2 : la relation n'est pas lineaire. Pour que ta regression lineaire capture ce genre de relations, tu peux creer des features polynomiales : les carres, les produits croises de tes features existantes. Ca augmente la puissance de ton modele sans changer d'algorithme.
PolynomialFeatures crée automatiquement des combinaisons de features : Avec degree=2 et features [a, b], tu obtiens : [1, a, b, a2, a*b, b2] Ca permet a un modèle lineaire de capturer des relations non lineaires.
Attention : le nombre de features explose vite. Avec 10 features et degree=2, tu passes a 66 features. Avec degree=3, a 286.
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly.fit_transform(X) poly.get_feature_names_out() # noms des nouvelles features
Écris une fonction créer_features_poly(X, degree=2) qui prend un array numpy et renvoie : 'X_poly' : les features polynomiales (array) 'nb_features_avant' : nombre de features originales 'nb_features_apres' : nombre de features apres transformation 'noms_features' : liste des noms des nouvelles features
Utilise include_bias=False pour ne pas ajouter la colonne de 1.
Tests (4/4)
Nombre de features augmente
import numpy as np
X = np.array([[1, 2], [3, 4], [5, 6]])
result = créer_features_poly(X, degree=2)
assert result['nb_features_avant'] == 2
assert result['nb_features_apres'] > 2
Degree 2 avec 2 features
import numpy as np
X = np.array([[1, 2], [3, 4]])
result = créer_features_poly(X, degree=2)
assert result['nb_features_apres'] == 5
Noms de features presents
import numpy as np
X = np.array([[1, 2], [3, 4]])
result = créer_features_poly(X, degree=2)
assert len(result['noms_features']) == result['nb_features_apres']
Valeurs correctes
import numpy as np
X = np.array([[2, 3]])
result = créer_features_poly(X, degree=2)
# Doit contenir 2, 3, 4, 6, 9
assert 4.0 in result['X_poly'][0]
assert 9.0 in result['X_poly'][0]