Validation croisée avec des modèles linéaires

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous utiliserons la validation croisée avec des modèles linéaires. Nous utiliserons l'ensemble de données sur le diabète et appliquerons GridSearchCV pour trouver la meilleure valeur d'alpha pour la régression Lasso. Nous tracerons ensuite les erreurs et utiliserons LassoCV pour voir jusqu'à quel point nous pouvons faire confiance à la sélection d'alpha.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49098{{"Validation croisée avec des modèles linéaires"}} sklearn/model_selection -.-> lab-49098{{"Validation croisée avec des modèles linéaires"}} ml/sklearn -.-> lab-49098{{"Validation croisée avec des modèles linéaires"}} end

Charger et préparer l'ensemble de données

Tout d'abord, nous allons charger et préparer l'ensemble de données sur le diabète. Nous n'utiliserons que les 150 premières échantillons pour cet exercice.

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets

X, y = datasets.load_diabetes(return_X_y=True)
X = X[:150]
y = y[:150]

Appliquer GridSearchCV

Ensuite, nous allons appliquer GridSearchCV pour trouver la meilleure valeur d'alpha pour la régression Lasso. Nous utiliserons une plage de valeurs d'alpha allant de 10^-4 à 10^-0,5 avec 30 valeurs intermédiaires. Nous utiliserons 5 plis pour la validation croisée.

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV

lasso = Lasso(random_state=0, max_iter=10000)
alphas = np.logspace(-4, -0.5, 30)

tuned_parameters = [{"alpha": alphas}]
n_folds = 5

clf = GridSearchCV(lasso, tuned_parameters, cv=n_folds, refit=False)
clf.fit(X, y)

Tracer les erreurs

Nous allons maintenant tracer les erreurs pour voir la meilleure valeur d'alpha. Nous tracerons les scores moyens de test et les erreurs standards des scores.

scores = clf.cv_results_["mean_test_score"]
scores_std = clf.cv_results_["std_test_score"]

plt.figure().set_size_inches(8, 6)
plt.semilogx(alphas, scores)

std_error = scores_std / np.sqrt(n_folds)

plt.semilogx(alphas, scores + std_error, "b--")
plt.semilogx(alphas, scores - std_error, "b--")

plt.fill_between(alphas, scores + std_error, scores - std_error, alpha=0.2)

plt.ylabel("CV score +/- std error")
plt.xlabel("alpha")
plt.axhline(np.max(scores), linestyle="--", color=".5")
plt.xlim([alphas[0], alphas[-1]])

Utiliser LassoCV pour vérifier la sélection d'alpha

Enfin, nous utiliserons LassoCV pour voir jusqu'à quel point nous pouvons faire confiance à la sélection d'alpha. Nous utiliserons KFold avec 3 plis.

from sklearn.linear_model import LassoCV
from sklearn.model_selection import KFold

lasso_cv = LassoCV(alphas=alphas, random_state=0, max_iter=10000)
k_fold = KFold(3)

print("Réponse à la question bonus :", "jusqu'à quel point pouvez-vous faire confiance à la sélection d'alpha?")
print()
print("Paramètres alpha maximisant le score de généralisation sur différents")
print("sous-ensembles des données :")
for k, (train, test) in enumerate(k_fold.split(X, y)):
    lasso_cv.fit(X[train], y[train])
    print(
        "[pli {0}] alpha: {1:.5f}, score: {2:.5f}".format(
            k, lasso_cv.alpha_, lasso_cv.score(X[test], y[test])
        )
    )

print()
print("Réponse : Pas beaucoup puisque nous avons obtenu différents alphas pour différents")
print("sous-ensembles des données et de plus, les scores pour ces alphas diffèrent")
print("assez sensiblement.")

Sommaire

Dans ce laboratoire, nous avons appris à utiliser la validation croisée avec des modèles linéaires. Nous avons utilisé GridSearchCV pour trouver la meilleure valeur d'alpha pour la régression Lasso et tracé les erreurs pour visualiser la sélection. Nous avons également utilisé LassoCV pour vérifier la sélection d'alpha.