Choisir k
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 7 sur 58.
Quelle valeur de k convient aux piments ? Essayez-en plusieurs et évaluez chaque modèle deux fois : sur les lignes qu’il a étudiées, la précision sur l’ensemble d’entraînement, et sur celles qui sont cachées, la précision sur l’ensemble de test.
Pour k = 1, chaque piment est son propre plus proche voisin, le modèle mémorise donc : il est parfait sur ses lignes, mais moins performant sur de nouvelles données. Un k très grand brouille les groupes.
ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
train_acc.append(model.score(X_train, y_train))
test_acc.append(model.score(X_test, y_test))Choisissez le k où la précision sur l’ensemble de test atteint son maximum, pour l’instant : le chapitre 7 présente un évaluateur plus équitable.
Défi
FacileUn club de football consigne les tirs dans shots.csv : la distance, l’angle et goal ou miss. Quelle valeur de k prédit le mieux ? Le code de départ sépare les données, liste les ks et intitule le graphique.
- Pour chaque valeur de k, ajuste un modèle et conserve sa précision sur les données d’entraînement et de test.
- Affiche la meilleure valeur de k selon la précision sur les données de test, comme ci-dessous.
- Trace les deux listes en fonction de
ks, avec les étiquettestrainettest, et une légende.
Pour un autre club :
Best k: 9 (test accuracy 0.783)Coddy décrit ensuite ton graphique.
Essayez vous-même
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# Une ligne par tir : distance au but (m), angle par rapport à l'ouverture du but (degrés), but ou tir manqué
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4) # k = 1, 5, 9, ..., 41
fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")
# É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