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:
- Choisir K: Déterminer le nombre de voisins les plus proches (K).
- Calculer la distance: Calculer la distance entre le nouvel objet et chaque objet dans l'ensemble d'apprentissage (par exemple, distance euclidienne).
- Trouver K voisins proches: Trier les objets par distance et sélectionner les K plus proches.
- 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]}")