KNeighborsClassifier
Lors de la construction d'un estimateur final pour une pipeline, nous avons utilisé le modèle KNeighborsClassifier
. Ce chapitre expliquera brièvement son fonctionnement.
k-plus proches voisins
k-plus proches voisins est un algorithme d'apprentissage automatique basé sur la recherche des instances les plus similaires dans l'ensemble d'entraînement pour effectuer une prédiction.
KNeighborsClassifier
est une implémentation scikit-learn de cet algorithme pour une tâche de classification. Voici comment il effectue une prédiction :
- Pour une nouvelle instance, trouver les k instances les plus proches (basées sur les caractéristiques) de l'ensemble d'entraînement. Ces k instances sont appelées voisins ;
- Trouver la classe la plus fréquente parmi les k voisins. Cette classe sera la prédiction pour la nouvelle instance.
k est le nombre de voisins à considérer. Ce nombre doit être spécifié lors de l'initialisation du modèle. Par défaut, k est fixé à 5.
Avec différentes valeurs de k, le modèle produit des prédictions différentes. Ceci est appelé un hyperparamètre — un paramètre à spécifier à l'avance et qui peut modifier les prédictions du modèle.
Il est possible d'essayer différentes valeurs de k et de trouver la valeur optimale pour votre tâche. Ce processus d'ajustement des hyperparamètres est appelé optimisation des hyperparamètres, et il permet d'optimiser les performances du modèle.
KNeighborsClassifier lors de .fit()
Contrairement à la plupart des modèles d'apprentissage automatique, le KNeighborsClassifier
ne fait rien d'autre que stocker l'ensemble d'entraînement pendant l'entraînement. Mais même si l'entraînement ne prend pas de temps, l'appel de .fit(X, y)
est obligatoire pour qu'il mémorise l'ensemble d'entraînement.
KNeighborsClassifier lors de .predict()
Lors de la prédiction, le KNeighborsClassifier
recherche de manière gloutonne les k plus proches voisins pour chaque nouvelle instance.
Exemple de code KNeighborsClassifier
Création d'un KNeighborsClassifier
, entraînement et obtention de son exactitude à l'aide de la méthode .score()
. Pour simplifier, les données du fichier .csv sont déjà entièrement prétraitées.
Pour spécifier la valeur de k, utilisez l'argument n_neighbors
du constructeur KNeighborsClassifier
. Nous allons essayer les valeurs 5 (valeur par défaut) 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))
Nous avons obtenu une assez bonne précision ! Avec un plus proche voisin (k=1), la précision est même parfaite.
Cependant, devons-nous faire confiance à ces scores ? Non, car nous avons évalué le modèle sur le jeu d'entraînement—les mêmes données sur lesquelles il a été entraîné. Naturellement, il va bien prédire les instances qu'il a déjà vues.
Pour réellement comprendre les performances du modèle, il faut l'évaluer sur des instances que le modèle n'a jamais vues auparavant.
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
Awesome!
Completion rate improved to 3.13
KNeighborsClassifier
Glissez pour afficher le menu
Lors de la construction d'un estimateur final pour une pipeline, nous avons utilisé le modèle KNeighborsClassifier
. Ce chapitre expliquera brièvement son fonctionnement.
k-plus proches voisins
k-plus proches voisins est un algorithme d'apprentissage automatique basé sur la recherche des instances les plus similaires dans l'ensemble d'entraînement pour effectuer une prédiction.
KNeighborsClassifier
est une implémentation scikit-learn de cet algorithme pour une tâche de classification. Voici comment il effectue une prédiction :
- Pour une nouvelle instance, trouver les k instances les plus proches (basées sur les caractéristiques) de l'ensemble d'entraînement. Ces k instances sont appelées voisins ;
- Trouver la classe la plus fréquente parmi les k voisins. Cette classe sera la prédiction pour la nouvelle instance.
k est le nombre de voisins à considérer. Ce nombre doit être spécifié lors de l'initialisation du modèle. Par défaut, k est fixé à 5.
Avec différentes valeurs de k, le modèle produit des prédictions différentes. Ceci est appelé un hyperparamètre — un paramètre à spécifier à l'avance et qui peut modifier les prédictions du modèle.
Il est possible d'essayer différentes valeurs de k et de trouver la valeur optimale pour votre tâche. Ce processus d'ajustement des hyperparamètres est appelé optimisation des hyperparamètres, et il permet d'optimiser les performances du modèle.
KNeighborsClassifier lors de .fit()
Contrairement à la plupart des modèles d'apprentissage automatique, le KNeighborsClassifier
ne fait rien d'autre que stocker l'ensemble d'entraînement pendant l'entraînement. Mais même si l'entraînement ne prend pas de temps, l'appel de .fit(X, y)
est obligatoire pour qu'il mémorise l'ensemble d'entraînement.
KNeighborsClassifier lors de .predict()
Lors de la prédiction, le KNeighborsClassifier
recherche de manière gloutonne les k plus proches voisins pour chaque nouvelle instance.
Exemple de code KNeighborsClassifier
Création d'un KNeighborsClassifier
, entraînement et obtention de son exactitude à l'aide de la méthode .score()
. Pour simplifier, les données du fichier .csv sont déjà entièrement prétraitées.
Pour spécifier la valeur de k, utilisez l'argument n_neighbors
du constructeur KNeighborsClassifier
. Nous allons essayer les valeurs 5 (valeur par défaut) 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))
Nous avons obtenu une assez bonne précision ! Avec un plus proche voisin (k=1), la précision est même parfaite.
Cependant, devons-nous faire confiance à ces scores ? Non, car nous avons évalué le modèle sur le jeu d'entraînement—les mêmes données sur lesquelles il a été entraîné. Naturellement, il va bien prédire les instances qu'il a déjà vues.
Pour réellement comprendre les performances du modèle, il faut l'évaluer sur des instances que le modèle n'a jamais vues auparavant.
Merci pour vos commentaires !