Exercices Machine Learning KNN : trouver le k optimal
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

KNN : trouver le k optimal

KNN est l'algorithme le plus intuitif qui existe : pour classer un nouveau point, tu regardes ses k voisins les plus proches et tu votes. Si tu veux savoir si un email est un spam, tu regardes les 5 emails les plus similaires dans ton historique. Mais le choix de k est crucial, et c'est l'occasion d'apprendre a tuner un hyperparametre.

Le choix de k est crucial :
k trop petit (1-3) : le modèle est sensible au bruit, overfitting
k trop grand (50+) : le modèle est trop lisse, underfitting

Pour trouver le meilleur k, on teste plusieurs valeurs et on garde celle qui donne la meilleure accuracy en cross-validation.

Attention : KNN est sensible a l'echelle des features. Il faut TOUJOURS normaliser avant d'utiliser KNN.

Écris une fonction trouver_meilleur_k(X, y, k_range=range(1, 21), cv=5) qui teste chaque valeur de k en cross-validation et renvoie :
'meilleur_k' : la valeur de k avec le meilleur score moyen
'meilleur_score' : le score moyen du meilleur k
'tous_scores' : dictionnaire k -> score moyen

Tests (4/4)

Meilleur k dans la range
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = trouver_meilleur_k(X, y, k_range=range(1, 11))
assert 1 <= result['meilleur_k'] <= 10
Score entre 0 et 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = trouver_meilleur_k(X, y, k_range=range(1, 6))
assert 0 <= result['meilleur_score'] <= 1
Tous les k testes
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = trouver_meilleur_k(X, y, k_range=range(3, 8))
assert set(result['tous_scores'].keys()) == {3, 4, 5, 6, 7}
Meilleur score correspond au meilleur k
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = trouver_meilleur_k(X, y, k_range=range(1, 11))
assert result['meilleur_score'] == result['tous_scores'][result['meilleur_k']]

Indices (3 disponibles)

solution.py