La validation croisée
- MYPE SAS
- Apr 11
- 3 min read
Définition de la validation croisée
La validation croisée à K plis, en machine learning, a pour objectif de faire un choix entre plusieurs modèles, de façon à identifier le meilleur.
Voici la méthode pour atteindre cet objectif :
Identifier un nombre fini de modèles, parmi lesquels on souhaite trouver le meilleur.
Découper la base de données en K sous-ensembles, au lieu de la découper en seulement 2 ensembles (base d’apprentissage et base de test) comme on le fait habituellement.
Pour chaque modèle M,
Isoler une des K parties de la base de données, qui fera office de base de test.
Faire l’apprentissage sur les (K-1) autres parties.
Calculer la Mean Squared Error sur la base de test :
Où : #T est le cardinal de la base de test,
et h(xn) est la prédiction de yn par le modèle.
Ce risque empirique quantifie l’erreur du modèle sur la base de test.
Répéter ces opérations en utilisant à chaque fois un des K sous-embles différent pour faire office de base de test, puis calculer la moyenne des K MSE pour le modèle.
Choisir le modèle pour lequel la moyenne des MSE est la plus faible.
La MSE est une métrique de performance très utilisée pour les régressions, mais on peut aussi bien utiliser d’autres métriques (en changeant l’argument « scoring » de notre fonction « cross_val_score », en Python). Vous trouverez un article complet sur les métriques de performance en suivant ce lien : Les métriques de performance.
La validation croisée peut être utilisée pour calculer le degré optimal d’une régression polynomiale, le coefficient de régularisation d’une régression Ridge ou Lasso, ou tout autre hyperparamètre. Un hyperparamètre est une variable fixée par l’utilisateur, qui joue un rôle dans le modèle, mais qui ne dépend pas des données.
Exemple de validation croisée
En pratique, on va prendre comme exemple une base de données « enquête ». Dans le cours, nous avions fait sur cette base de données une régression polynomiale de degré 2, afin de prédire les valeurs de satisfaction de clients inconnus. Nous allons maintenant utiliser la validation croisée pour chercher à savoir si une régression polynomiale de degré supérieur aurait obtenu de meilleurs résultats de performance. On va s’intéresser aux modèles de degrés supérieurs à 2, pour augmenter la complexité de notre modèle. On fera une validation croisée à K=5 plis (choix classique en machine learning, pour éviter d’excéder les capacités de calcul de notre machine).
A l’aide de la bibliothèque scikit learn de Python, la validation croisée se fait en peu d’instructions (mais l’exécution prend du temps) :
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
degres = range(2, 5)
cv_scores = []
for degre in degres:
poly = PolynomialFeatures(degree=degre)
X_poly = poly.fit_transform(X_train)
m = LinearRegression()
scores = cross_val_score(m, X_poly, y_train, cv=5, scoring='neg_mean_squared_error')
print(scores)
cv_scores.append(-scores.mean())
degre_optimal = degres[np.argmin(cv_scores)]
print(f"Degré optimal du polynôme : {degre_optimal}")
plt.plot(degres, cv_scores)
plt.xlabel("Degré du polynôme")
plt.ylabel("MSE moyen sur les 5 sous-ensemble de la base de données")
plt.title("Validation croisée pour la sélection du degré du polynôme")
plt.show()
On obtient le résultat suivant :
Degré optimal du polynôme : 4

Il apparaît qu’un modèle de degré 4 donnerait de meilleurs résultats encore que notre modèle de degré 2, en étant plus complexe. Cependant, gardons en tête que plus le degré du modèle augmente, plus la complexité et le temps de calcul augmentent. Notre modèle de degré 2 ayant par ailleurs un bon coefficient R^2 et une courbe de prédiction de la satisfaction en fonction de la progression qui ne semblait pas aberrante (cf cours), notre choix était tout-de-même satisfaisant. Cette validation croisée nous montre simplement qu’un degré supérieur à 2 aurait pu donner d’encore meilleures précisions, en étant plus complexe.
Retrouvez d'autres contenus, et toutes nos formations sur : https://www.expertpython.fr/
Comments