Comparer les modèles équitablement
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 38 sur 58.
Comparer des modèles sur une seule séparation, c’est jouer à pile ou face : l’un d’eux peut tomber sur un jeu de test favorable. Faites plutôt subir les mêmes cinq plis à chaque modèle. Pour 150 billets de banque, vrais ou faux :
k-NN et la régression logistique sont à égalité compte tenu de leur marge de variation, et k-NN est plus stable. L’arbre est à la traîne.
Un répartiteur KFold</code mélange les lignes une fois et fournit à chaque modèle des plis identiques :</p><pre><code class="language-python">from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")
Il affiche les nombres du graphique :
0.867 0.042
0.873 0.074
0.807 0.077Choisissez la moyenne la plus élevée ; lorsque les moyennes sont proches, l’écart-type le plus faible.
Défi
MoyenUn site de cuisine prédit quels visiteurs préparent une recette qu’ils consultent. Le code de départ évalue trois modèles sur une seule partition, et l’arbre gagne. Évalue-les équitablement ; le programme lit le nombre de plis.
- Crée un
KFoldavec ce nombre de partitions,shuffle=Trueetrandom_state=0. - Évalue chaque modèle par validation croisée sur ces plis ; affiche sa moyenne et son écart-type avec 3 décimales.
- Affiche le modèle ayant la moyenne la plus élevée.
Pour d’autres visiteurs et avec 5 :
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logisticEssayez vous-même
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# Ne modifiez pas les lignes ci-dessous : 300 visiteurs, 6 habitudes de navigation ; le label 1 signifie qu'ils ont cuisiné la recette
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# Un seul découpage désigne un gagnant
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne