Sobes.tech
Middle

Qu'est-ce que l'algorithme des k-plus proches voisins (kNN) ?

sobes.tech IA

Réponse de l'IA

L'algorithme des k plus proches voisins (kNN) est un algorithme simple et non paramétrique d'apprentissage automatique, utilisé à la fois pour la classification et la régression.

Principe: Attribue un nouvel objet (point de données) à la classe la plus représentée parmi les k voisins les plus proches dans l'ensemble d'apprentissage. Pour la régression, il prédit une valeur comme la moyenne/médiane des valeurs des k voisins les plus proches.

Étapes principales pour la classification:

  1. Choisir K: Déterminer le nombre de voisins les plus proches (K).
  2. Calculer la distance: Calculer la distance entre le nouvel objet et chaque objet dans l'ensemble d'apprentissage (par exemple, distance euclidienne).
  3. Trouver K voisins proches: Trier les objets par distance et sélectionner les K plus proches.
  4. Vote: Déterminer la classe du nouvel objet en fonction du vote majoritaire parmi les K voisins proches.

Avantages:

  • Facilité de mise en œuvre et de compréhension.
  • Ne nécessite pas d'entraînement de modèle (algorithme paresseux).
  • S'adapte aux nouvelles données à mesure qu'elles apparaissent.

Inconvénients:

  • Coûteux en calcul avec de grands volumes de données (phase de prédiction).
  • Le choix de K et la métrique de distance sont critiques.
  • Sensible à l'échelle des caractéristiques et à la "malédiction de la dimension".
  • Ne fonctionne pas bien directement avec des caractéristiques catégoriques (nécessite un encodage).

Applications:

  • Reconnaissance de formes.
  • Systèmes de recommandation.
  • Diagnostic médical.
  • Recherche de documents similaires.
# Exemple d'implémentation de kNN pour la classification avec scikit-learn

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Création de données de démonstration
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Étiquettes de classes

# Division des données en ensemble d'entraînement et de test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Création et entraînement du modèle kNN
# K=3, c'est-à-dire 3 voisins proches
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Prédiction sur l'ensemble de test
y_pred = knn.predict(X_test)

# Évaluation de la précision
accuracy = accuracy_score(y_test, y_pred)
# print(f"Précision du modèle: {accuracy}")

# Prédiction pour un nouveau point
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Classe prédite pour le nouveau point: {predicted_class[0]}")