Vous êtes sur la page 1sur 3

Ministère de l’Enseignement Supérieur, de la Recherche Scientifique et des

Technologies de l'Information et de la Communication Université de Carthage

Faculté des Sciences Département


de Bizerte Informatique

TP4 : Classification (k-nearest neighbors)


L’algorithme des K plus proches voisins ou K-nearest neighbors (kNN) est un algorithme de
Machine Learning qui appartient à la classe des algorithmes d’apprentissage supervisé simple et facile
à mettre en œuvre qui peut être utilisé pour résoudre les problèmes de classification et de régression.

En apprentissage supervisé, un algorithme reçoit un ensemble de données qui est étiqueté avec des
valeurs de sorties correspondantes sur lequel il va pouvoir s’entraîner et définir un modèle de
prédiction. Cet algorithme pourra par la suite être utilisé sur de nouvelles données afin de prédire
leurs valeurs de sorties correspondantes.

Voici une illustration simplifiée :

L’intuition derrière l’algorithme des K plus proches voisins est l’une des plus simples de tous les
algorithmes de Machine Learning supervisé :

Étape 1 : Sélectionnez le nombre K de voisins

Étape 2 : Calculez la distance du point non classifié aux autres points.


Ministère de l’Enseignement Supérieur, de la Recherche Scientifique et des
Technologies de l'Information et de la Communication Université de Carthage

Faculté des Sciences Département


de Bizerte Informatique

Étape 3 : Prenez les K voisins les plus proches selon la distance calculée.

Étape 4 : Parmi ces K voisins, comptez le nombre de points appartenant à chaque catégorie.

Étape 5 : Attribuez le nouveau point à la catégorie la plus présente parmis ces K voisins.

Étape 6 : Notre modèle est prêt .

Travail à faire
1. Importez le dataset iris de l’url suivant :
https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7
d537619d0e07d5ae3/iris.csv
2. Visualisez-le dataset. Combien de variables contient-il ? Utilisez ce code pour
visualiser les relations entre les variables :
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(df)
plt.show()
3. Modifiez le code en ajoutant les paramètres suivants :
sns.pairplot(df, hue="variety", palette="husl", markers=["o", "s", "D"])
4. Séparez les données en X et y
5. Divisez les données en données d’apprentissage et de test (80% pour
apprentissage et 20% pour entrainement) en utilisant le code suivant :
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=5)
6. Entrainez sur les données d’apprentissage un modèle de KNN :

7. Calculez le score obtenu par le modèle entrainé sur les données de test
8. Affichez la matrice de confusion :
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, model.predict(X_test)))
Ministère de l’Enseignement Supérieur, de la Recherche Scientifique et des
Technologies de l'Information et de la Communication Université de Carthage

Faculté des Sciences Département


de Bizerte Informatique

Pour visualiser cette matrice, utilisez le code suivant :


from sklearn.metrics import plot_confusion_matrix
plot_confusion_matrix(model, X_test, y_test)
plt.show()
9. Utilisez la validation croisée (5-fold-cross-validation):
from sklearn.model_selection import cross_val_score
cross_val_score(KNeighborsClassifier(n_neighbors = 1), X_train, y_train, cv=5,
scoring="accuracy").mean()
10. Changez le nombre de voisins par : 3, 5 et enfin 9 et calculez le score d’accuracy à
chaque fois. Que remarquez-vous ? 11. Ecrire une boucle qui permet d’afficher le
score (accuracy) pour k allant de 1 à 10.
12. Utilisez la GridSearch pour chercher les meilleurs hyperparamètres de KNN :
from sklearn.model_selection import GridSearchCV
params = {
'n_neighbors': [3, 5, 7, 9, 11],
'metric' : ['euclidean', 'manhattan']
}
grid = GridSearchCV(estimator=KNeighborsClassifier(),param_grid=params, cv=5)
grid.fit(X_train, y_train)
print(grid.best_score_)
print(grid.best_params_)
13. Affichez le rapport de classification en utilisant ce code :
from sklearn.metrics import classification_report
print(classification_report(y_test, grid.predict(X_test)))

Vous aimerez peut-être aussi