Atelier - 1
Intelligence Artificielle
Réalisé par Yahya Bouchak
1er avril 2025
1. Introduction
Ce document présente les réponses détaillées à l’atelier 1 sur les fondamentaux de
l’intelligence artificielle, couvrant les concepts d’apprentissage automatique et leur appli-
cation pratique avec le dataset Iris.
2. Réponses aux questions
2.1. Rôle de la bibliothèque scikit-learn
Scikit-learn est une bibliothèque Python open-source dédiée au machine learning. Dans
cet exercice, elle joue plusieurs rôles clés :
— Fournir le dataset Iris via load_iris()
— Offrir des fonctions pour diviser les données (train_test_split)
— Proposer des algorithmes de classification (RandomForestClassifier)
— Fournir des métriques d’évaluation (accuracy_score, classification_report)
— Permettre des visualisations basiques en combinaison avec matplotlib
2.2. Fonction du RandomForestClassifier
Le RandomForestClassifier est un algorithme d’apprentissage ensembliste qui :
— Crée de multiples arbres de décision (d’où le terme "forêt")
— Chaque arbre est entraîné sur un sous-ensemble aléatoire des données
— Pour chaque split dans les arbres, seul un sous-ensemble aléatoire des caractéris-
tiques est considéré
Avantages pour la classification :
— Réduit le sur-apprentissage par rapport à un seul arbre de décision
— Gère bien les données non linéaires
— Peut traiter des caractéristiques catégorielles et numériques sans normalisation préa-
lable
1
2.3. Analyse des performances du modèle
La précision (accuracy) mesure le pourcentage de prédictions correctes. Le rapport de
classification montre pour chaque classe :
— Precision : proportion de vrais positifs parmi les prédictions positives
— Recall : proportion de vrais positifs parmi les cas réels positifs
— F1-score : moyenne harmonique de precision et recall
2.4. Taille des ensembles après division
Le dataset Iris contient 150 échantillons :
— Ensemble d’entraînement : 80% de 150 = 120 échantillons
— Ensemble de test : 20% de 150 = 30 échantillons
2.5. Signification des couleurs dans le scatter plot
Dans le graphique plt.scatter(X[:, 0], X[:, 1], c=y, cmap=’viridis’) :
— X[:, 0] et X[:, 1] représentent respectivement la longueur et largeur des sépales
— c=y colore chaque point selon sa classe réelle (0, 1 ou 2)
— La palette ’viridis’ assigne différentes couleurs aux différentes classes
2.6. Importance de la division train/test
La séparation est cruciale pour :
— Évaluer la capacité de généralisation du modèle
— Détecter le surapprentissage
— Fournir une estimation non biaisée des performances
2.7. Hyperparamètres principaux du RandomForestClassifier
Les principaux hyperparamètres :
— n_estimators : nombre d’arbres (100 ici)
— max_depth : profondeur maximale des arbres
— min_samples_split : échantillons minimum pour diviser un nœud
— min_samples_leaf : échantillons minimum dans une feuille
2.8. Avantages de la forêt aléatoire vs régression logistique
La forêt aléatoire est préférée car :
— Peut modéliser des relations non linéaires
— Gère automatiquement les interactions entre caractéristiques
— Plus robuste aux caractéristiques redondantes
2
2.9. Signification de la précision (accuracy)
Dans ce contexte multiclasse :
— Accuracy = (prédictions correctes) / (total prédictions)
— Métrique globale mais pas toujours suffisante
— Doit être complétée par d’autres métriques
2.10. Termes du rapport de classification
Pour chaque classe :
— Precision : TP / (TP + FP)
— Recall : TP / (TP + FN)
— F1-score : 2*(precision*recall)/(precision+recall)
2.11. Moyens d’améliorer la précision
Approches possibles :
— Ingénierie des caractéristiques
— Réglage des hyperparamètres
— Essayer d’autres algorithmes
— Approfondir l’analyse des erreurs
2.12. Surapprentissage (overfitting)
Faible précision sur test vs haute précision sur train suggère :
— Le modèle a mémorisé les particularités du jeu d’entraînement
— Manque de capacité à généraliser
Solutions possibles :
— Réduire la complexité du modèle
— Augmenter les données d’entraînement
— Appliquer des techniques de régularisation
2.13. Passage à un modèle d’apprentissage profond
Pour utiliser un réseau neuronal :
— Normaliser les données
— Définir l’architecture du modèle
— Choisir la fonction de perte et l’optimiseur
— Monitorer la loss sur train/validation
3
2.14. Application avec AdaBoost, XGBoost et SVM
Implémentation comparative
1 from sklearn . ensemble import Ad aB oos tC la ssi fi er
2 from xgboost import XGBClassifier
3 from sklearn . svm import SVC
4
5 # AdaBoost
6 ada = A daB oo st Cla ss if ie r ( n_estimators =100 , random_state =42)
7 ada . fit ( X_train , y_train )
8 y_pred_ada = ada . predict ( X_test )
9 print ( " AdaBoost Accuracy : " , accuracy_score ( y_test , y_pred_ada ) )
10
11 # XGBoost
12 xgb = XGBClassifier ( n_estimators =100 , random_state =42)
13 xgb . fit ( X_train , y_train )
14 y_pred_xgb = xgb . predict ( X_test )
15 print ( " XGBoost Accuracy : " , accuracy_score ( y_test , y_pred_xgb ) )
16
17 # SVM
18 svm = SVC ( kernel = ’ rbf ’ , C =1.0 , gamma = ’ scale ’ , random_state =42)
19 svm . fit ( X_train , y_train )
20 y_pred_svm = svm . predict ( X_test )
21 print ( " SVM Accuracy : " , accuracy_score ( y_test , y_pred_svm ) )
Figure 1 – Résultats d’exécution du code comparatif
Analyse comparative
— AdaBoost : Algorithme boosting séquentiel, sensible au bruit
— XGBoost : Implémentation optimisée du gradient boosting, souvent plus précise
4
— SVM : Trouve l’hyperplan optimal, performance dépend du noyau
Conclusion
Cet atelier a permis d’explorer les bases du machine learning appliqué à la classification
avec le dataset Iris. Les différentes méthodes comparées montrent qu’il existe plusieurs
approches pour résoudre un même problème, chacune avec ses avantages spécifiques.