ConsigneImplémente le K-Nearest Neighbors
K-Nearest Neighbors (knn) prédit la classe d'un point en regardant les K points d'entraînement les plus proches et en faisant un vote majoritaire.
C'est l'un des algos les plus simples : pas d'"entraînement" au sens classique, juste un stockage des données.
Pour prédire la classe d'un nouveau point :
1. calculer la distance vers TOUS les points d'entraînement2. garder les K plus proches3. vote majoritaire → classe préditefrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=5)knn.fit(X_train, y_train)y_pred = knn.predict(X_test)K petit (1, 3) → modèle complexe, sensible au bruit (overfitting possible)K grand (15+) → modèle lisse, sous-apprentissage si trop grandRègle empirique : K ≈ √n (n = taille du train). À deux classes, on le prend impair pour éviter les égalités de vote ; dès trois classes un K impair n'y suffit plus (avec K = 5, les voix peuvent se partager 2-2-1).
Méthodologie : tester plusieurs K en cross-validation et choisir le meilleur.
Les distances dominent les variables d'amplitude élevée. SI tes features ont des unités différentes (âge en années, salaire en €) :
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_s = scaler.fit_transform(X_train)X_test_s = scaler.transform(X_test)knn.fit(X_train_s, y_train)Sans ça, knn devient inutile en pratique.
for k in [3, 5, 7, 11]: knn = KNeighborsClassifier(n_neighbors=k) knn.fit(X_train, y_train) acc = accuracy_score(y_test, knn.predict(X_test)) print(f'K={k}: accuracy={acc:.2%}')weights='distance' plus proches votent plus fortmetric='euclidean' 'manhattan', 'cosine', etc.p=2 paramètre pour la métrique de Minkowski- lent à la prédiction sur de gros datasets (calcul de toutes les distances)- mauvais en haute dimension ("curse of dimensionality")- stockage = tout le dataset d'entraînementknn est aussi disponible pour la régression (KNeighborsRegressor) : moyenne des K voisins au lieu d'un vote.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →