Un framework complet d'apprentissage automatique en Rust avec une interface utilisateur graphique basée sur Bevy. Ce projet a été développé dans le cadre du cours "Machine Learning" et permet de tester différents algorithmes d'apprentissage sur des cas d'études simples ainsi que sur des tâches de classification d'images.
- Présentation du projet
- Fonctionnalités
- Algorithmes implémentés
- Structure du projet
- Prérequis et installation
- Guide d'utilisation
- Développement et contribution
Ce projet implémente une bibliothèque d'algorithmes de machine learning en Rust, avec une interface graphique permettant de visualiser les résultats et d'interagir avec les modèles. Il offre deux fonctionnalités principales :
- Cas de tests : Plusieurs jeux de données synthétiques pour comparer et évaluer différents algorithmes de machine learning.
- Classification d'images de jeux : Un système d'apprentissage pour classifier des images de jeux vidéo.
Conformément au syllabus du cours, le projet permet d'implémenter, de comparer et d'analyser les performances des modèles sur des problèmes de classification et de régression.
- Interface graphique interactive basée sur Bevy et egui
- Visualisation 3D des données et des frontières de décision
- Entraînement en temps réel avec retour visuel
- Graphiques de progression de l'apprentissage
- Sauvegarde et chargement de modèles entraînés
- Classification et régression sur divers jeux de données synthétiques
- Classification d'images de jeux vidéo
-
Modèles linéaires
- Régression linéaire
- Classification linéaire
-
Perceptron Multi-Couches (MLP)
- Fonctions d'activation : Tanh, ReLU, Sigmoïde, Linéaire
- Support pour plusieurs couches cachées
- Algorithme de rétropropagation du gradient
-
Réseaux à Fonctions de Base Radiale (RBF)
- Sélection de centres par K-means
- Ajustement automatique des paramètres
- Support pour la classification et la régression
-
Machines à Vecteurs de Support (SVM)
- Algorithme SMO (Sequential Minimal Optimization)
- Noyaux : linéaire, polynomial, RBF
- Classification binaire
machine-learning/
├── src/
│ ├── algorithms/ # Implémentations des algorithmes de ML
│ │ ├── learning_model.rs # Trait commun pour tous les modèles
│ │ ├── linear_classifier.rs
│ │ ├── linear_regression.rs
│ │ ├── mlp.rs # Perceptron multicouches
│ │ ├── rbf.rs # Réseaux à fonctions de base radiale
│ │ └── svm.rs # Machines à vecteurs de support
│ ├── data/ # Gestion des données et jeux de tests
│ ├── ui/ # Interface utilisateur avec egui
│ ├── systems/ # Systèmes Bevy
│ ├── plugins/ # Plugins Bevy
│ ├── resources/ # Ressources globales de l'application
│ └── main.rs # Point d'entrée de l'application
├── Cargo.toml # Dépendances et configuration du projet
└── README.md # Ce fichier
- Rust (version 1.75.0 ou supérieure)
- Dépendances de développement pour Bevy:
- Sur Linux:
sudo apt install libudev-dev libasound2-dev - Sur macOS: Xcode et ses outils de ligne de commande
- Sur Windows: Pas de dépendances supplémentaires
- Sur Linux:
-
Clonez ce dépôt :
git clone https://github.com/votre-nom/machine-learning.git cd machine-learning -
Construisez le projet :
cargo build --release
-
Exécutez l'application :
cargo run --release
Le menu principal offre deux options:
- Cas de Tests : Pour explorer et comparer différents algorithmes sur des jeux de données synthétiques
- Classification de Jeux : Pour entraîner et tester un modèle de classification d'images de jeux vidéo
Cette section vous permet de visualiser et d'expérimenter avec différents algorithmes sur des jeux de données prédéfinis.
- Utilisez la fenêtre "Test Case Selector" pour choisir un jeu de données:
- Linear Simple: Classification binaire simple
- Linear Multiple: Classification binaire avec plus de points
- XOR: Problème XOR (non linéairement séparable)
- Cross: Problème en forme de croix
- Multi Linear 3 Classes: Classification à 3 classes
- Linear Simple 2d/3d: Régression linéaire en 2D/3D
- Non Linear Simple 2d/3d: Régression non linéaire
- Utilisez la fenêtre "Model Selector" pour choisir un algorithme:
- Linear Classifier/Regression: Pour les problèmes linéairement séparables
- MLP: Pour les problèmes plus complexes, avec configuration des couches cachées
- RBF: Alternative aux MLP, particulièrement efficace pour certains types de données
- SVM: Pour la classification binaire avec marge maximale
Chaque type de modèle dispose de sa propre fenêtre de configuration:
- MLP Configuration: Nombre de couches, nombre de neurones, fonction d'activation
- RBF Configuration: Nombre de centres, gamma, utilisation de K-means
- SVM Configuration: Type de noyau, paramètres C et gamma
-
Dans la fenêtre "Training Control", ajustez les hyperparamètres:
- Learning Rate: Taux d'apprentissage
- Train Ratio: Proportion des données utilisées pour l'entraînement
- Batch Size: Taille des lots pour l'entraînement
-
Cliquez sur "Start Training" pour lancer l'entraînement
- Observez la progression dans le graphique d'apprentissage
- Les métriques d'entraînement et de test sont affichées
-
Cliquez sur "Stop Training" pour arrêter l'entraînement à tout moment
La fenêtre "Model Manager" permet de:
- Sauvegarder le modèle actuel
- Charger un modèle préalablement sauvegardé
- Supprimer des modèles existants
Cette section vous permet d'entraîner un modèle pour classifier des images de jeux vidéo.
-
Organisez vos images dans des sous-dossiers par catégorie:
dataset/ ├── fps/ # Images de jeux FPS │ ├── image1.jpg │ └── ... ├── moba/ # Images de jeux MOBA │ ├── image1.jpg │ └── ... └── rts/ # Images de jeux RTS ├── image1.jpg └── ... -
Dans l'interface, entrez le chemin du dossier contenant vos catégories et cliquez sur "Load Dataset"
-
Ajustez la configuration du MLP:
- Nombre de couches cachées
- Nombre de neurones par couche
- Fonction d'activation
-
Ajustez les hyperparamètres:
- Learning Rate
- Batch Size
- Train Ratio
- Cliquez sur "Start" pour démarrer l'entraînement
- Observez les courbes d'apprentissage pour suivre la progression
- Cliquez sur "Stop" pour arrêter l'entraînement
- Sauvegardez le modèle une fois satisfait des résultats
- Entrez le chemin d'une image à classifier dans "Image path"
- Cliquez sur "Classify image"
- Le résultat s'affiche avec les scores pour chaque catégorie
- Ajouter de nouveaux algorithmes
- Améliorer la visualisation des frontières de décision
- Ajouter le support pour d'autres types de données (audio, texte)
- Optimiser les performances de calcul avec du compute shader
Projet développé dans le cadre du cours de Machine Learning - ESGI 2024-2025.