Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP2KNN

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

ENSEIGNANTE : MME HOUDA ANOUN

Machine learning
TP2 : K plus proches voisins

Consigne :

1- Installer la distribution Anaconda : https://www.anaconda.com/


2- Lancer Anaconda Navigator, puis choisir Jupyter Notebook
3- Créer un nouveau Notebook (New Python3) et renommer le avec le nom KNN

1. Présentation de l’Algorithme des k plus proches voisins pour la classification

Nous allons étudier un algorithme d'apprentissage supervisé assez simple : l'algorithme des "k
plus proches voisins" (en anglais "k nearest neighbors" : knn). En apprentissage supervisé,
un algorithme reçoit un ensemble de données étiquetées 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.

L’exécution de l’algorithme des K plus proches voisins suit les étapes ci-après :

Étape 1 : L’utilisateur choisit le nombre K de voisins


Étape 2 : Calcul de la distance (euclidienne) du point non classifié aux autres points.
Étape 3 : On prend les K voisins les plus proches selon la distance calculée.
Étape 4 : Parmi ces K voisins, on compte le nombre de points appartenant à chaque catégorie.
Étape 5 : On attribue au nouveau point la catégorie la plus présente parmi ces K voisins.

Dans l’exemple suivant, on a trois classes (w1, w2, w3) et le but est de trouver la classe de
l’exemple inconnu x. On choisit k=5, parmi les 5 plus proches voisins de x, la majorité (4)
appartiennent à w1 on déduit que la classe de x est w1.
ENSEIGNANTE : MME HOUDA ANOUN

2. Présentation du jeu de données à utiliser

Nous allons utiliser un jeu de données relativement connu dans le monde du machine learning : le jeu
de données "iris". On peut classer les iris en 3 espèces : « iris setosa », « iris virginica » et « iris
versicolor ».

IRIS SETOSA IRIS VIRGINICA IRIS VERSICOLOR

Dans le dataset « iris.csv » envoyé par mail, vous trouverez les données de 50 iris :

- La longueur des pétales (en cm)


- La largeur des pétales (en cm)
- L’espèce de l’iris (codée avec des chiffres comme suit : 0 pour SETOSA, 1 pour VERSICOLOR et
2 pour VIRGINICA)

2.1. Chargement des données et visualisation

Récupérer le fichier iris.csv envoyé par mail et placer le dans un dossier MachineLearning sur
votre Bureau.

Tester puis analyser le code suivant :

import pandas
import matplotlib.pyplot as plt

#mettez le chemin absolu de l’emplacement du fichier iris.csv


iris=pandas.read_csv("C:\\Users\\houda\\Desktop\\cours\\LPU
ARSC\\MachineLearning\\iris.csv")

#afficher les 5 premières lignes du dataset


iris.head()
ENSEIGNANTE : MME HOUDA ANOUN

#informations sur les colonnes du dataset


iris.info()

#extraction des deux colonnes : longueur et largeur des pétales


X= iris[['petal_length', 'petal_width']]

#récupération de la 1ère colonne : longueur des pétales


x=X['petal_length']

#récupération de la 2ème colonne : largeur des pétales


y=X['petal_width']

#récupération de la 3ème colonne : les espèces des iris


lab=iris['species']

#visualisation
#pour avoir un repère orthonormé
plt.axis('equal')
#tracer en vert les points correspondants aux iris d’espèce
Setosa, en rouge les points associés aux iris Versicolor et en
bleu les points associés aux iris Virginica
plt.scatter(x[lab == 0], y[lab == 0], color='g',
label='setosa')
plt.scatter(x[lab == 1], y[lab == 1], color='r',
label='versicolor')
plt.scatter(x[lab == 2], y[lab == 2], color='b',
label='virginica')
#nommer les axes
plt.xlabel('longueur des pétales')
plt.ylabel('largeur des pétales')
plt.legend()
plt.show()

Vous devriez normalement obtenir la figure suivante :


ENSEIGNANTE : MME HOUDA ANOUN

2.2. Prédiction de l’espèce d’un nouvel IRIS en appliquant l’algorithme KNN


Imaginez maintenant qu'au cours d'une promenade vous trouviez un iris, avec les
caractéristiques suivantes : longueur de pétale = 2.5 et largeur de pétale = 0.75. Vous
voulez connaitre son espèce !
Plaçons d’abord cette nouvelle donnée sur notre graphique (en noir) :
plt.scatter(2.5, 0.75, color='k')

Appliquons l’algorithme KNN avec k =3.


Les 3 plus proches voisins sont signalés ci-dessus avec des flèches : nous avons deux
"iris setosa" (points verts) et un "iris versicolor" (point rouge). D'après l'algorithme KNN
notre "iris mystère" appartient à l'espèce "setosa".

Testez et analyser le code suivant :

from sklearn.neighbors import KNeighborsClassifier

#caractéristiques du nouvel iris


longueur=2.5
largeur=0.75

#le nombre de voisins k = 3


k=3

#application de l'algorithme Knn


model = KNeighborsClassifier(n_neighbors=k)

#entrainement du modèle : on utilise une matrice numpy qui


résulte de la conversion du DataFrame X
ENSEIGNANTE : MME HOUDA ANOUN

model.fit(X.to_numpy(),lab)

#prédiction de l’espèce du nouvel Iris


prediction= model.predict([[longueur,largeur]])
print(prediction)

A FAIRE :
Ecrire un programme Python, qui permet de lire au clavier la longueur et la largeur des
pétales d’un nouvel IRIS et qui affiche l’espèce de ce dernier comme suit :

Longueur ? : 4
Largeur ? 1.7
Votre Iris de longueur de pétale 4 cm et de largeur de pétale 1.7cm fait partie de l’espèce
VERSICOLOR

3. Evaluation du modèle
Afin d’évaluer la performance du modèle et calculer son taux de bonne prédictions, il faut
commencer par répartir le data-set initial en deux jeux de données : un jeu de données utilisé
pour l’apprentissage du modèle et un autre jeu de donnée utilisé pour l’évaluation du modèle.
Pour cela, on utilise la fonction train_test_split, par défaut, le data_set d’entrainement
comprend 75% des données du data-set d’origine.

Tester et analysez le code suivant :

from sklearn.model_selection import train_test_split

X=iris[['petal_length', 'petal_width']]
y=iris['species']
#repartition du data-set en deux : data-set d’entrainement
(x_train, y_train) et data-set de test (x_test, y_test)
x_train, x_test, y_train, y_test = train_test_split(X, y,
random_state=0)

#application de l'algorithme Knn


model = KNeighborsClassifier(n_neighbors=k)
model.fit(x_train,y_train)

#calcul de la performance du modèle


model.score(x_test, y_test)
ENSEIGNANTE : MME HOUDA ANOUN

Exercice d’application de l’algorithme Knn :

Récupérer le data-set fruit_data_with_colors.txt envoyé par mail. Nous allons utiliser les
variables prédictives (mass, width et height) pour prédire la catégorie d’un fruit parmi ces
trois catégories :
1 : pomme
2 : mandarine
3 : orange
4 : citron

1. Charger le data-set dans un DataFrame pandas en utilisant la fonction pandas read_table


(qui récupère en paramètre le chemin absolu du fichier fruit_data_with_colors.txt)
2. Afficher les informations sur le data-set ainsi que les 5 premières lignes
3. Récupérer les données suivantes :
a. dans la variable X les 3 colonnes mass, width et height
b. dans la variable m la colonne mass
c. dans la variable w, la colonne width
d. dans la variable h, la colonne height
e. dans la variable cible y, la colonne fruit_label
4. En utilisant la librairie Matplotlib, visualiser les points de coordonnées m, w et h en
dimension 3. Pour cela, utiliser les instructions suivantes à compléter :
ax = plt.axes(projection = '3d')
#afficher les points dont l’étiquette vaut 1 (y=1) en vert
ax.scatter3D(m[y == 1], h[y == 1], w[y==1],color='g',
label='pomme')

Au final, vous devez obtenir un graphique similaire à ce qui suit :

5. Diviser le data-set initial en deux jeux de données : un jeu de données d’entrainement et


un jeu de données de test. La proportion du data-set à inclure dans le jeu de données
d’entrainement devrait être de 80%
ENSEIGNANTE : MME HOUDA ANOUN

6. En utilisant la librairie Sklearn, entrainer le modèle Knn en prenant comme valeur de k = 5,


puis utiliser le modèle pour prédire la catégorie d’un fruit ayant les caractéristiques
suivantes : mass=20g, width= 4.3cm et height = 5.5cm
7. Ecrire un programme, qui lit au clavier les caractéristiques d’un nouveau fruit et affiche sa
catégorie comme suit :
Mass ? 201
Width ? 8.1
Height ? 7.9
Votre fruit est une orange !

8. Calculer le taux de bonnes prédictions du modèle sur le jeu de données de test. Qu’en
déduisez-vous ?

Vous aimerez peut-être aussi