Analyse de données
TP Classification non-superviée
Wilson Toussile
Introduction
Ce TP concerne la classification non-superviée par les algorithmes des KMeans et de la classifi-
cation ascendante hiérarchique (cah). Nous appliquons ces méthodes sur des données simulées
et sur des données réelles.
Nous aurons besoin des library suivantes:
import numpy as np
import pandas as pd
import sklearn
from [Link] import KMeans 1
import [Link] as plt 2
from sklearn import datasets 3
from [Link] import PCA 4
from [Link] import StandardScaler 5
1 Importer la classe KMeans
2 Pour les graphiques
3 Pour charger les données iris
4 Importer la classe PCA pour l’ACP
5 La classe StandardScaler permet de centrer et|ou réduire les données
1 Données
Nous considérons les données iris qui décrivent des fleurs. Pour chaque fleur, on a mesuré: -
La longueur et la largeur des pétals - La longueur et la largeur des sépals - l’espèce.
1
iris = datasets.load_iris() 1
df = [Link]([Link], columns=iris.feature_names)
df["Species"] = iris.target_names[[Link]]
print(f"5 1eres lignes: \n\n {[Link]()}\n")
print(f"Dimensions du jeu de données: {[Link]}\n")
1 Charger les données
5 1eres lignes:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
Species
0 setosa
1 setosa
2 setosa
3 setosa
4 setosa
Dimensions du jeu de données: (150, 5)
Ĺ Note
• Nous allons ignorer la variable “Species” et faire le clustering sur les 4 autres vari-
ables, qui sont quantitatives.
• Nous allons faire une ACP sur les 4 variables quantitatives pour représenter le nuage
de points dans le plan.
2 ACP sur les variables quantitatives
X = [Link]
scaler = StandardScaler(with_mean=True, with_std=True) 1
Z = scaler.fit_transform(X) 2
2
1 Instancier la classe pour centrer et réduire les données
2 Obtenir les données centrées et réduires
pca = PCA() 1
[Link](Z) 2
C = [Link](Z) 3
print(f"Valeurs propres: {pca.explained_variance_}") 4
print(f"Part d'inertie expliquée par le 1er plan principal: {sum(pca.explained_variance_[0:2]
1 Instancier la classe PCA
2 Calculer les élements de l’ACP
3 Calculer la matrice des composantes princpales
Valeurs propres: [2.93808505 0.9201649 0.14774182 0.02085386]
Part d'inertie expliquée par le 1er plan principal: 95.81320720000163%
Représentation du premier plan principal
Dans la carte des individus, nous utilisons différentes couleurs pour différentes espèces des
fleurs, pour faciliter l’interprétation.
[Link](figsize=(7, 7))
for species in iris.target_names:
indices = [Link](df["Species"] == species)[0]
[Link](C[indices, 0], C[indices, 1], label=species)
[Link](loc="best")
[Link]()
3
2
2
setosa
versicolor
virginica
3 2 1 0 1 2 3
Représentation graphique des inerties des axes principaux
[Link](figsize=(7,7))
[Link]([0, 1, 2, 3], pca.explained_variance_, color="coral")
[Link]([0, 1, 2, 3], pca.explained_variance_, color="steelblue")
[Link]()
4
3.0
2.5
2.0
1.5
1.0
0.5
0.0
0.0 0.5 1.0 1.5 2.0 2.5 3.0
Ď Remarques
• Le premier plan principal représente près de 96% de l’information, donc les conclu-
sions qu’on peut en tirer sont pertinentes.
• Le premier axe principal permet de distinguer l’espèce setosa des deux autres, qui
sont tout de même distinguables.
5
3 Kmeans
Appliquons les KMeans.
kmeans = KMeans(n_clusters=3)
[Link](Z)
[Link](figsize=(7, 7))
for k in range(3):
indices = [Link](kmeans.labels_ == k)[0]
[Link](C[indices, 0], C[indices, 1], label=str(k))
[Link](loc="best")
[Link]()
6
0
1
2
2
3 2 1 0 1 2 3
[Link](iris.target_names[[Link]], kmeans.labels_)
col_0 0 1 2
row_0
setosa 50 0 0
versicolor 0 39 11
virginica 0 14 36
Exercise 3.1.
7
1. Implémenter votre classe MyKMeans, qui hérite de KMeans avec fonctionnalités supplémen-
taires suivantes.
a. Ajouter une méthode qui calcule les sommes des carrés
b. Ajouter une méthode qui calcule le critère 𝐶𝐻
2. Appliquer le critère 𝐶𝐻 pour sélectionner le nombre de classes 𝐾 sur les données iris.
4 Classification Acsendante Hiérarchique (cah)
Exercise 4.1.
1. Faire des recherches web pour trouver une librairie Python permettant de faire la cah
2. Appliquer la cah sur données iris.