Projet Réalisé par : Thomas Marchand, Louis Milhaud & Gabriel Desfrene
Ce projet présente une implémentation personnalisée de l'algorithme de classification Random Forest, incluant plusieurs variantes et techniques de prétraitement des données. Le code est disponible sous la forme de notebooks Jupyter et de fichiers Markdown pour faciliter l'expérimentation et la compréhension des différentes étapes.
- Mise en Route
- Datasets
- Prétraitement des données avec PCA
- Decision Tree Classifier
- Critères de Séparation
- Bagging
- Random Forest Classifier
- Random Splitter
- Pruning
Le code de ce projet est rassemblé dans un module : ias
. Celui-ci contient toutes les classes
nécessaires pour une utilisation des Decision Tree ainsi que des Random Forests.
Pour exécuter le code, l'installation des dépendances ainsi que des datasets est nécessaire. Dans un
shell quelconque cela peut être réalisé de la manière suivante :
python3 -m venv ./venv # On installe un environnement
source venv/bin/activate # On rentre à l'intérieur
pip install -r requirements.txt # Installation des dépendances (pip et pas conda !)
python3 datasets/install_datasets.py # Installation des datasets (Long si connexion lente, EMNIST n'est pas léger)
Vous devriez ensuite être prêt à tout exécuter !
NB : Pour les Notebooks Jupyter, faire attention à lancer le serveur à la racine du projet pour
permettre l'importation du module ias
.
Une brève présentation des Datasets utilisés est disponible dans cette section. On expliquera également l'utilisation et l'importation de ces derniers.
Notebook Jupyter: docs/Datasets.ipynb
Dans cette partie, nous abordons la réduction de dimensionnalité des attributs en utilisant la méthode PCA (Principal Component Analysis). Cela permet d'améliorer les performances de l'algorithme en réduisant le nombre de dimensions à traiter.
Notebook Jupyter: docs/PCA.ipynb
Ici, nous présentons l'implémentation de l'algorithme CART (Classification and Regression Trees) pour les arbres de décision.
Notebook Jupyter: docs/DecisionTree.ipynb
Cette partie explore les différences entre les deux critères sélection des seuils implémentés : gini et log loss.
Notebook Jupyter: docs/Criterion.ipynb
Dans cette section, nous explorons la technique de Bagging (Bootstrap Aggregating) qui permet de réduire la variance et d'améliorer la performance des arbres de décision en créant plusieurs arbres et en combinant leurs résultats.
Notebook Jupyter: docs/Bagging.ipynb
Dans cette partie, nous implémentons l'algorithme Random Forest, qui repose sur le Decision Tree Classifier et le comparons à un simple Decision Tree Classifier avec la technique de Bagging.
Notebook Jupyter: docs/RandomForest.ipynb
Pour aller plus loin, nous présentons ici la variante Random Splitter, qui utilise des seuils de séparation tirés au hasard pour réduire le temps de calcul et la variance. Nous décrivons les différences par rapport à l'algorithme Random Forest et les avantages et inconvénients de cette approche.
Notebook Jupyter: docs/RandomSplitter.ipynb
Enfin, nous abordons l'élagage des arbres de décision (pruning), c'était plus compliqué que prévu donc nous n'avons pas d'implémentation utilisable.
Fichier Markdown: docs/Pruning.md
Vu l'implémentation en Python, le code est souvent lent à s'exécuter. Sklearn est bien plus rapide principalement grâce à son implémentation en C (Cython pour être précis).