K-Nearest Neighbors (KNN)
Découvre les k plus proches voisins (KNN). Apprends comment cet algorithme d’apprentissage supervisé fonctionne pour la classification et la régression, comment il est utilisé dans la recherche visuelle et comment l’intégrer à Ultralytics YOLO26.
Les plus proches voisins (KNN) sont un algorithme robuste et intuitif utilisé dans le domaine de l'apprentissage supervisé pour les tâches de classification et de régression. Grâce à sa simplicité, KNN est souvent classé parmi les « apprenants paresseux », car il ne construit pas de modèle et n'apprend pas de paramètres pendant la phase d'entraînement. Il mémorise plutôt l'ensemble des données d'entraînement et n'effectue des calculs que 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 ayant des attributs similaires se trouvent à proximité les uns des autres dans un espace de caractéristiques multidimensionnel.
Fonctionnement de l'algorithme#
Le fonctionnement des plus proches voisins (KNN) repose sur des calculs de distance. Lorsqu'un nouveau point requête est introduit, l'algorithme recherche dans l'ensemble de données stocké les « K » échantillons d'entraînement les plus proches de la nouvelle entrée.
-
Mesure de la distance : Le système calcule la distance entre le point requête et chacun des 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, comme la distance de Manhattan (géométrie des taxis) 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 souvent parmi les K voisins est attribuée au point requête. Cette méthode est largement utilisée pour les tâches de base de classification d'images. - Pour la régression : La prédiction est calculée en faisant la moyenne des valeurs des K plus proches voisins afin d'estimer une variable continue.
Choisir la bonne valeur de « K »#
La sélection de la valeur optimale de « K » est une étape essentielle de l'optimisation des hyperparamètres. Le choix de K influence considérablement les performances du modèle et sa capacité à se généraliser à de nouvelles données.
- Valeur de K faible : Une petite valeur de K (par exemple, K=1) rend le modèle très sensible au bruit et aux valeurs aberrantes dans les données, ce qui peut entraîner un surapprentissage.
- Valeur de K élevée : Une grande valeur de K lisse les frontières de décision, réduisant l'effet du bruit, mais peut aussi estomper des motifs distincts, ce qui entraîne un sous-apprentissage.
Applications concrètes#
Malgré sa simplicité par rapport aux réseaux neuronaux profonds, KNN reste très pertinent dans l'IA moderne, notamment lorsqu'il est associé à des techniques avancées d'extraction de caractéristiques.
- Systèmes de recommandation : KNN facilite le filtrage collaboratif dans les services de streaming multimédia et le commerce électronique. En identifiant les utilisateurs ayant des historiques de visionnage ou des comportements d'achat similaires (les voisins), les plateformes peuvent suggérer des produits qu'un utilisateur est susceptible d'apprécier en fonction des préférences de ses « plus proches voisins ».
- Détection des anomalies : Dans la cybersécurité et la finance, KNN est utilisé pour la détection des anomalies. Les transactions ou les activités réseau sont représentées dans un espace de caractéristiques ; tout nouveau point de données qui s'éloigne fortement des groupes denses d'activités « normales » est signalé comme une fraude potentielle ou une faille de sécurité.
- Recherche visuelle : Les moteurs modernes de recherche vectorielle s'appuient souvent sur des algorithmes de recherche approximative des plus proches voisins (ANN) — une variante optimisée de KNN — pour récupérer rapidement des images similaires en fonction d'embeddings de grande dimension générés par des modèles comme YOLO26.
Défis et considérations#
Bien qu'efficace, KNN est confronté à la malédiction de la dimensionnalité. À mesure que le nombre de caractéristiques (dimensions) augmente, les points de données deviennent clairsemés et les métriques de distance perdent de leur efficacité. De plus, comme KNN stocke toutes les données d'entraînement, il peut être très exigeant 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 dimensionnalité, comme l'analyse en composantes principales (PCA), ou utilisent des structures de données spécialisées, comme les KD-Trees, afin d'accélérer la recherche. Pour mettre à l'échelle les ensembles de données et l'entraînement des modèles au niveau des entreprises, l'utilisation de l'Ultralytics Platform peut aider à gérer les ressources de calcul nécessaires au prétraitement de données complexes.
Différencier KNN de K-Means#
Il est important de distinguer les plus proches voisins de l'algorithme des K-moyennes, car leurs noms similaires sont souvent source de 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 clusters selon leurs similitudes structurelles.
Exemple d’implémentation#
L'extrait de code suivant illustre un flux de travail simple de classification KNN 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 comme 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)")








