🎯 Objectifs
- Utiliser l’algorithme KNN pour un problème de classification.
- Comprendre l’impact de l’hyperparamètre K.
- Évaluer un classifieur avec la Matrice de Confusion.
1. Le Dataset : Iris
Nous reprenons le dataset Iris. Cette fois, l’objectif est de prédire la colonne species à partir des 4 autres colonnes (sépales et pétales).
- Chargez les données.
- Séparez les features () et la target ().
- :
sepal_length,sepal_width,petal_length,petal_width. - :
species.
- :
- Divisez en Train/Test (80%/20%).
2. Premier modèle KNN
- Importez
KNeighborsClassifierdepuissklearn.neighbors. - Instanciez le modèle avec (
n_neighbors=3). - Entraînez le modèle sur le Train Set.
- Calculez le score (Accuracy) sur le Test Set.
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
print("Accuracy:", knn.score(X_test, y_test))3. Matrice de Confusion
L’accuracy ne dit pas tout (quelles classes sont confondues ?).
- Faites les prédictions sur le Test Set.
- Affichez la matrice de confusion.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
y_pred = knn.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=knn.classes_)
disp.plot()Analysez les erreurs. Y a-t-il des espèces qui se ressemblent plus que d’autres ?
4. Optimisation de l’hyperparamètre K
Quelle est la meilleure valeur de K ?
- Créez une boucle qui teste toutes les valeurs de K de 1 à 30.
- Pour chaque K, entraînez un modèle et stockez son score sur le Test Set.
- Tracez la courbe
Score en fonction de K.
scores = []
k_range = range(1, 31)
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
scores.append(knn.score(X_test, y_test))
plt.plot(k_range, scores)
plt.xlabel('Valeur de K')
plt.ylabel('Accuracy')
plt.title('Performance du KNN selon K')Quel K semble optimal ? Que se passe-t-il si K est trop grand ?
5. Frontières de décision (Bonus)
Pour visualiser les frontières, on ne peut garder que 2 dimensions (ex: petal_length et petal_width).
- Ré-entraînez le modèle sur seulement ces 2 colonnes.
- Créez une grille de points (meshgrid) couvrant l’espace.
- Prédisez la classe pour chaque point de la grille.
- Affichez les zones de couleur.
Indice : Regardez la documentation de sklearn.inspection.DecisionBoundaryDisplay.