KNeighborsClassifier
Glissez pour afficher le menu
Lors de la création de l'estimateur final dans un pipeline, le modèle choisi était KNeighborsClassifier. Ce chapitre fournit une brève explication du fonctionnement de cet algorithme.
Le fonctionnement des modèles n'est pas le sujet principal de ce cours, donc il est normal que certains points restent flous. Ce sujet est abordé plus en détail dans d'autres cours comme Linear Regression with Python ou Classification with Python.
k-plus proches voisins
k-NN prédit la classe d'une nouvelle instance en examinant ses k échantillons d'entraînement les plus similaires.
KNeighborsClassifier implémente cet algorithme dans Scikit-learn.
- Pour un nouveau point, trouver les k plus proches voisins en utilisant la similarité des caractéristiques.
- La classe la plus fréquente parmi eux devient la prédiction.
k est un hyperparamètre (valeur par défaut = 5). Différentes valeurs modifient le comportement du modèle, il est donc important d'ajuster k.
KNeighborsClassifier lors de .fit()
Contrairement à de nombreux algorithmes, KNeighborsClassifier stocke simplement les données d'entraînement.
Cependant, l'appel de .fit(X, y) est nécessaire pour que le modèle sache à quel ensemble de données se référer lors de la prédiction.
KNeighborsClassifier lors de .predict()
Lors de la prédiction, le classificateur recherche pour chaque instance ses k voisins les plus proches. Dans l'exemple visuel, seules deux caractéristiques sont affichées ; l'ajout de caractéristiques supplémentaires améliore généralement la séparation des classes et la précision des prédictions.
Dans les gifs ci-dessus, seules deux caractéristiques, 'body_mass_g' et 'culmen_depth_mm', sont utilisées car il est difficile de visualiser des graphiques de dimensions supérieures. L'ajout de caractéristiques supplémentaires aidera probablement le modèle à mieux séparer les points de données verts et rouges, permettant au KNeighborsClassifier de réaliser des prédictions plus précises.
Exemple de code KNeighborsClassifier
Création d'un classificateur, entraînement et vérification de la précision à l'aide de .score().
L'argument n_neighbors contrôle k—essayez avec 5 et 1.
12345678910111213import pandas as pd from sklearn.neighbors import KNeighborsClassifier df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Initialize and train a model knn5 = KNeighborsClassifier().fit(X, y) # Trained 5 neighbors model knn1 = KNeighborsClassifier(n_neighbors=1).fit(X, y) # Trained 1 neighbor model # Print the scores of both models print('5 Neighbors score:',knn5.score(X, y)) print('1 Neighbor score:',knn1.score(X, y))
Utiliser k=1 peut donner une précision parfaite, mais cela est trompeur car l'évaluation a été réalisée sur le jeu d'entraînement.
Pour mesurer la véritable performance, il faut toujours tester le modèle sur des données inconnues.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion