TP : Classification supervisée des fleurs IRIS
Machine Learning
Objectifs pédagogiques
À l’issue de ce TP, l’étudiant sera capable de :
— Comprendre un problème de classification supervisée
— Explorer et visualiser un jeu de données
— Appliquer plusieurs algorithmes de classification
— Évaluer et comparer les performances des modèles
1 Présentation du dataset
Le TP utilise le dataset :contentReference[oaicite :0]index=0, qui contient 150 échan-
tillons répartis en trois classes :
— Iris Setosa
— Iris Versicolor
— Iris Virginica
Chaque fleur est décrite par quatre attributs :
— Longueur du sépale
— Largeur du sépale
— Longueur du pétale
— Largeur du pétale
2 Chargement des bibliothèques
1 import numpy as np
2 import pandas as pd
3 import matplotlib . pyplot as plt
4 import seaborn as sns
5
6 from sklearn . datasets import load_iris
7 from sklearn . model_selection import train_test_split
8 from sklearn . preprocessing import StandardScaler
9 from sklearn . metrics import accuracy_score , confusion_matrix ,
classification_report
10
11 from sklearn . neighbors import K N e i g h b o r s C l a s s i f i er
12 from sklearn . svm import SVC
13 from sklearn . tree import D e c i s i o n T r e e C l a s s i f i e r
3 Chargement et exploration des données
1
1 iris = load_iris ()
2 X = iris . data
3 y = iris . target
4
5 df = pd . DataFrame (X , columns = iris . feature_names )
6 df [ ’ classe ’] = y
7 df . head ()
Visualisation
1 sns . pairplot ( df , hue = " classe " )
2 plt . show ()
Question : Quelles caractéristiques semblent les plus discriminantes ?
4 Séparation des données
1 X_train , X_test , y_train , y_test = train_test_split (
2 X , y , test_size =0.3 , random_state =42
3 )
5 Normalisation
1 scaler = StandardScaler ()
2 X_train = scaler . fit_transform ( X_train )
3 X_test = scaler . transform ( X_test )
6 Classification
6.1 K plus proches voisins (KNN)
1 knn = KN e i g h b o r s C l a s s i f i e r ( n_neighbors =5)
2 knn . fit ( X_train , y_train )
3
4 y_pred_knn = knn . predict ( X_test )
5 print ( " Accuracy ␣ KNN ␣ : " , accuracy_score ( y_test , y_pred_knn ) )
6.2 Support Vector Machine (SVM)
1 svm = SVC ( kernel = ’ rbf ’)
2 svm . fit ( X_train , y_train )
3
4 y_pred_svm = svm . predict ( X_test )
5 print ( " Accuracy ␣ SVM ␣ : " , accuracy_score ( y_test , y_pred_svm ) )
2
6.3 Arbre de décision
1 dt = D e c i s i o n T r e e C l a s s i f i e r ()
2 dt . fit ( X_train , y_train )
3
4 y_pred_dt = dt . predict ( X_test )
5 print ( " Accuracy ␣ Decision ␣ Tree ␣ : " , accuracy_score ( y_test , y_pred_dt ) )
7 Évaluation
1 print ( c l a s s i f i c a t i o n _ r e p o r t ( y_test , y_pred_svm ) )
Matrice de confusion
1 cm = confusion_matrix ( y_test , y_pred_svm )
2 sns . heatmap ( cm , annot = True , fmt = " d " )
3 plt . xlabel ( " P r d i t " )
4 plt . ylabel ( " R e l " )
5 plt . show ()
8 Comparaison des modèles
Modèle Accuracy
KNN
SVM
Arbre de décision
9 Questions
1. Pourquoi la normalisation est-elle importante ?
2. Quel est l’effet du paramètre k dans KNN ?
3. Pourquoi la classe Setosa est-elle plus facile à classifier ?
4. Quel modèle recommanderiez-vous et pourquoi ?
10 Travail demandé
— Tester d’autres valeurs de k
— Ajouter une régression logistique
— Tester Random Forest
— Rédiger un mini-rapport (1 page)