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.
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.