Une application web interactive développée avec Streamlit pour prédire l'espèce d'une fleur d'Iris basée sur les mesures de ses pétales et sépales. Ce projet utilise l'apprentissage automatique via scikit-learn pour offrir des prédictions précises et visualiser les résultats.
- 🔍 Prédiction en temps réel des espèces d'Iris (Setosa, Versicolor, Virginica)
- 📊 Visualisation interactive des probabilités pour chaque espèce avec Plotly
- 💾 Historique des prédictions sauvegardé automatiquement
- 📥 Export des données au format CSV
- 🎨 Interface utilisateur intuitive avec navigation simplifiée
- 📈 Analyse des données pour explorer les caractéristiques des iris
- Python 3.8 ou supérieur
- pip (gestionnaire de paquets Python)
-
Cloner le dépôt
git clone https://github.com/kara99313/Iris_App.git cd Iris_App -
Créer un environnement virtuel (recommandé)
python -m venv venv # Windows venv\Scripts\activate # Linux/MacOS source venv/bin/activate
-
Installer les dépendances
pip install -r requirements.txt
Note: Si vous rencontrez des problèmes avec certaines dépendances, essayez d'installer uniquement les packages essentiels:
pip install streamlit pandas scikit-learn plotly joblib
-
Entraîner le modèle (si ce n'est pas déjà fait)
python train_model.py
-
Lancer l'application
streamlit run app.py
-
Accéder à l'application dans votre navigateur à l'adresse
http://localhost:8501 -
Navigation dans l'application:
- Accueil: Présentation générale du projet
- Prédiction: Entrez les mesures pour obtenir une prédiction
- Historique: Consultez les prédictions précédentes
- Analyse: Visualisez et explorez les données
- Paramètres: Configurez l'application
- À propos: Informations sur le développeur et le projet
-
Pour faire une prédiction:
- Ajustez les paramètres des mesures florales dans le panneau latéral
- Cliquez sur "Prédire" pour obtenir les résultats
| Sépale (longueur) | Sépale (largeur) | Pétale (longueur) | Pétale (largeur) | Prédiction |
|---|---|---|---|---|
| 5.1 cm | 3.5 cm | 1.4 cm | 0.2 cm | Setosa |
| 6.7 cm | 3.0 cm | 5.2 cm | 2.3 cm | Virginica |
| 5.9 cm | 3.0 cm | 4.2 cm | 1.5 cm | Versicolor |
Notre application utilise l'algorithme Random Forest qui est particulièrement adapté aux problèmes de classification comme celui des fleurs d'Iris. Ce modèle fait partie des méthodes d'ensemble (ensemble learning) qui combinent plusieurs modèles pour améliorer les performances prédictives.
-
Principes fondamentaux:
- Random Forest crée plusieurs arbres de décision indépendants (une "forêt")
- Chaque arbre est entraîné sur un sous-échantillon aléatoire des données (technique de bagging)
- À chaque nœud de décision, seul un sous-ensemble aléatoire des caractéristiques est considéré
- La prédiction finale est déterminée par un vote majoritaire de tous les arbres
-
Paramètres clés du modèle utilisé:
RandomForestClassifier( n_estimators=100, # Nombre d'arbres dans la forêt max_depth=None, # Profondeur maximale des arbres (None = expansion complète) min_samples_split=2, # Nombre minimum d'échantillons pour diviser un nœud min_samples_leaf=1, # Nombre minimum d'échantillons requis dans une feuille criterion='gini', # Mesure de la qualité de la division (gini ou entropy) random_state=42 # Assure la reproductibilité des résultats )
-
Avantages du Random Forest pour cette application:
- Robustesse au surapprentissage: La combinaison de multiples arbres réduit le risque de surapprentissage
- Gestion efficace des petits jeux de données: Parfait pour le dataset Iris qui ne contient que 150 observations
- Importance des caractéristiques: Permet d'identifier facilement quelles mesures florales sont les plus discriminantes
- Quantification de l'incertitude: Fournit des probabilités pour chaque classe, utiles pour nos visualisations
- Peu de prétraitement nécessaire: Fonctionne bien sans normalisation extensive des données
Avant l'entraînement du modèle, les données sont préparées selon ces étapes:
-
Division du jeu de données:
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.25, random_state=42, stratify=y )
- 75% des données pour l'entraînement, 25% pour les tests
stratify=yassure une distribution équilibrée des classes dans les ensembles d'entraînement et de test
-
Normalisation des caractéristiques:
scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
- Centrage et mise à l'échelle des données pour améliorer la convergence
Notre analyse a révélé l'importance relative de chaque caractéristique pour la classification:
| Caractéristique | Importance (%) |
|---|---|
| Longueur du pétale | 42.3% |
| Largeur du pétale | 38.7% |
| Longueur du sépale | 11.5% |
| Largeur du sépale | 7.5% |
Ces valeurs montrent que les dimensions des pétales sont beaucoup plus discriminantes que celles des sépales pour identifier les espèces d'Iris.
Pour garantir la fiabilité du modèle, nous avons effectué une validation croisée à 10 plis:
scores = cross_val_score(rf_model, X, y, cv=10)
print(f"Score moyen: {scores.mean():.3f} (± {scores.std():.3f})")Résultat: Score moyen: 0.953 (± 0.025)
Ce score élevé avec un faible écart-type confirme la stabilité et la précision du modèle.
La matrice de confusion sur l'ensemble de test montre la répartition des prédictions:
| Prédit Setosa | Prédit Versicolor | Prédit Virginica
-------------------|---------------|------------------|------------------
Réel Setosa | 13 | 0 | 0
Réel Versicolor | 0 | 11 | 2
Réel Virginica | 0 | 1 | 11
On observe une excellente classification des Setosa (100% correct) et quelques confusions entre Versicolor et Virginica, ce qui est cohérent avec leurs similarités biologiques.
Nous avons également analysé les courbes d'apprentissage pour vérifier si notre modèle pourrait bénéficier de plus de données:
Les courbes montrent une convergence des scores d'entraînement et de validation, indiquant que notre modèle ne souffre pas de surapprentissage ou de sous-apprentissage significatif.
Le modèle Random Forest utilisé dans cette application atteint une précision d'environ 95% sur l'ensemble de test. Les principales métriques sont:
- Précision: 0.95
- Rappel: 0.94
- Score F1: 0.94
La matrice de confusion montre que le modèle est particulièrement performant pour identifier l'espèce Setosa, avec très peu de confusion entre Versicolor et Virginica.
IRIS_APP/
├── .streamlit/ # Configuration Streamlit
├── assets/ # Ressources statiques (CSS, images)
├── data/ # Données et historique des prédictions
├── env/ # Environnement virtuel (non suivi par git)
├── pages/ # Pages de l'application
│ ├── pages_files/ # Composants réutilisables
│ ├── A_propos.py # Page "À propos"
│ ├── Accueil.py # Page d'accueil
│ ├── Analyse.py # Visualisations et analyses
│ ├── Historique.py # Historique des prédictions
│ ├── Parametres.py # Paramètres de l'application
│ └── predictions.py # Page de prédiction
├── .gitignore # Fichiers ignorés par git
├── app.py # Point d'entrée principal
├── iris_model.pkl # Modèle entraîné (généré par train_model.py)
├── predictions.csv # Historique des prédictions
├── README.md # Documentation du projet
├── requirements.txt # Dépendances du projet
└── train_model.py # Script d'entraînement du modèle
- Créez un compte sur Streamlit Cloud
- Connectez votre compte GitHub
- Sélectionnez ce dépôt et la branche principale
- Cliquez sur "Deploy"
# Construire l'image
docker build -t iris-app .
# Exécuter le conteneur
docker run -p 8501:8501 iris-app| Problème | Solution |
|---|---|
ModuleNotFoundError |
Vérifiez que toutes les dépendances sont installées avec pip install -r requirements.txt |
| L'application ne se lance pas | Assurez-vous que le fichier app.py est bien à la racine du projet |
| Le modèle ne se charge pas | Exécutez d'abord python train_model.py pour générer le fichier iris_model.pkl |
| Erreurs de chemin de fichier | Vérifiez que le dossier data existe et est accessible en écriture |
- Streamlit - Framework pour applications web de data science
- scikit-learn - Bibliothèque d'apprentissage automatique
- Pandas - Manipulation et analyse de données
- Plotly - Visualisations interactives
- joblib - Sérialisation de modèles ML
Cette application utilise le célèbre jeu de données Iris qui contient des mesures de 150 fleurs d'iris réparties en trois espèces:
- Setosa: Reconnaissable par ses petits pétales
- Versicolor: Présente des caractéristiques intermédiaires
- Virginica: Se distingue par ses grands pétales et sépales
Le jeu de données comprend 4 caractéristiques:
- Longueur du sépale (cm)
- Largeur du sépale (cm)
- Longueur du pétale (cm)
- Largeur du pétale (cm)
Fonctionnalités prévues pour les futures versions:
- Intégration de nouveaux algorithmes de classification
- Possibilité d'entraîner le modèle depuis l'interface utilisateur
- Ajout d'un mode de classification par image
- Support multilingue
- Mode hors ligne pour utilisation sans internet
Les contributions sont les bienvenues! N'hésitez pas à:
- Forker le projet
- Créer une nouvelle branche (
git checkout -b feature/amazing-feature) - Commiter vos changements (
git commit -m 'Add amazing feature') - Pousser sur la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
- UCI Machine Learning Repository pour le jeu de données Iris
- La communauté Streamlit pour les exemples et inspiration
- Tous les contributeurs qui ont aidé à améliorer ce projet
Auteur: KARABOUE VAKABOU
Email: karabouevakabou@gmail.com
Lien du projet: https://github.com/kara99313/Iris_App
Fait avec ❤️ et Python