K-Nearest Neighbors (KNN)
Explore les K-Nearest Neighbors (KNN). Apprends comment cet algorithme d'apprentissage supervisé fonctionne pour la classification et la régression, son utilisation dans la recherche visuelle et l'intégration avec Ultralytics YOLO26.
Les K-Nearest Neighbors (KNN) constituent un algorithme robuste et intuitif utilisé dans le domaine de l'apprentissage supervisé pour les tâches de classification et de régression. Distingué par sa simplicité, le KNN est souvent qualifié d'« apprenti paresseux » car il ne construit pas de modèle et n'apprend pas de paramètres lors d'une phase d'entraînement. Au lieu de cela, il mémorise l'ensemble des données d'entraînement et effectue des calculs uniquement lorsqu'une prédiction est demandée. Le principe fondamental de l'algorithme repose sur la similarité des caractéristiques : il suppose que les points de données dotés d'attributs similaires se trouvent à proximité les uns des autres dans un espace de caractéristiques multidimensionnel.
Comment fonctionne l'algorithme#
Le mécanisme des K-Nearest Neighbors est piloté par des calculs de distance. Lorsqu'un nouveau point de requête est introduit, l'algorithme recherche dans le jeu de données stocké les 'K' échantillons d'entraînement les plus proches de la nouvelle entrée.
-
Mesure de distance : Le système calcule la distance entre le point de requête et tous les autres points de la base de données. La métrique la plus courante est la distance euclidienne, qui mesure la distance en ligne droite entre les points. D'autres métriques telles que la distance de Manhattan (géométrie du taxi) ou la distance de Minkowski peuvent être utilisées selon le type de données.
-
Sélection des voisins : Après avoir calculé les distances, l'algorithme les trie et identifie les 'K' entrées les plus proches.
-
Prise de décision : - Pour la classification : L'algorithme utilise un système de « vote majoritaire ». L'étiquette de classe qui apparaît le plus fréquemment parmi les K voisins est attribuée au point de requête. Cette méthode est largement utilisée dans les tâches de classification d'images de base. - Pour la régression : La prédiction est calculée en faisant la moyenne des valeurs des K voisins les plus proches afin d'estimer une variable continue.
Choisir le bon 'K'#
Sélectionner la valeur optimale pour « K » est une étape critique de l'optimisation des hyperparamètres. Le choix de K influence considérablement les performances du modèle et sa capacité à généraliser sur de nouvelles données.
- Valeur de K faible : Un K petit (par exemple, K=1) rend le modèle extrêmement sensible au bruit et aux valeurs aberrantes dans les données, ce qui peut mener au surapprentissage.
- Valeur de K élevée : Un K grand lisse les frontières de décision, réduisant l'effet du bruit mais pouvant brouiller des motifs distincts, ce qui entraîne un sous-apprentissage.
Applications concrètes#
Malgré sa simplicité par rapport aux réseaux de neurones profonds, le KNN reste très pertinent dans l'IA moderne, en particulier lorsqu'il est combiné à des techniques avancées d'extraction de caractéristiques.
- Systèmes de recommandation : Le KNN facilite le filtrage collaboratif dans le streaming média et le commerce électronique. En identifiant des utilisateurs ayant des historiques de visionnage ou des comportements d'achat similaires (voisins), les plates-formes peuvent suggérer des produits qu'un utilisateur est susceptible d'apprécier en se basant sur les préférences de ses « voisins les plus proches ».
- Détection d'anomalies : En cybersécurité et en finance, le KNN est utilisé pour la détection d'anomalies. Les transactions ou activités réseau sont cartographiées dans un espace de caractéristiques ; tout nouveau point de données qui tombe loin des grappes denses d'activité « normale » est signalé comme une fraude potentielle ou une faille de sécurité.
- Recherche visuelle : Les moteurs de recherche vectorielle modernes reposent souvent sur des algorithmes de type Approximate Nearest Neighbor (ANN) — une variation optimisée du KNN — pour récupérer rapidement des images similaires en se basant sur des embeddings de grande dimension générés par des modèles comme YOLO26.
Défis et considérations#
Bien qu'efficace, le KNN fait face à la malédiction de la dimensionnalité. À mesure que le nombre de caractéristiques (dimensions) augmente, les points de données deviennent parsemés et les métriques de distance perdent de leur efficacité. De plus, comme il stocke toutes les données d'entraînement, le KNN peut être gourmand en mémoire et souffrir d'une latence d'inférence élevée sur les grands ensembles de données. Pour y remédier, les praticiens prétraitent souvent les données à l'aide de techniques de réduction de la dimensionnalité telles que l'analyse en composantes principales (ACP) ou utilisent des structures de données spécialisées comme les KD-Trees pour accélérer la recherche. Pour une mise à l'échelle de niveau entreprise des ensembles de données et de l'entraînement des modèles, l'utilisation de la Ultralytics Platform peut aider à gérer les ressources de calcul requises pour le prétraitement de données complexes.
Différencier le KNN du K-Means#
Il est important de différencier les K-Nearest Neighbors du clustering K-Means, car leurs noms similaires prêtent souvent à confusion.
- KNN est un algorithme d'apprentissage supervisé qui utilise des données étiquetées pour effectuer des prédictions.
- K-Means est un algorithme d'apprentissage non supervisé utilisé pour regrouper des données non étiquetées en grappes sur la base de similarités structurelles.
Exemple d'implémentation#
L'extrait de code suivant démontre un flux de travail de classification KNN simple utilisant la bibliothèque populaire Scikit-learn. Dans un contexte de vision par ordinateur, les « caractéristiques » d'entrée seraient généralement extraites par un modèle d'apprentissage profond tel que YOLO26 avant d'être transmises au classificateur KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")





