Visitor menu

Programmation Génétique
J'ai programmé une version de la Programmation Génétique basée sur Koza pour Weka. (cached)
refresh

1. Créateur
2. Objectif
3. Qu'est-ce que c'est ?
4. Structure du système
5. Téléchargement et installation
6. Contribution

1. Créateur de la PG pour Weka

Yan Levasseur :
me contacter
Laboratoire d'Imagerie, de Vision et d'Intelligence Artificielle (LIVIA) - http://www.livia.etsmtl.ca/
École de Technologie Supérieure, Montréal, Canada - http://www.etsmtl.ca/

2. Objectif

Il existe déjà plusieurs outils de Programmation Génétique (PG) téléchargeables. Alors pourquoi créer un nouvel outil ?
J'ai voulu développer un outil de PG collaboratif qui comporte un maximum d'options différentes, et qui est compatible avec un logiciel qui contient une librairie d'algorithmes, ce qui permet de comparer facilement et à "armes égales" des classificateurs. Weka est un outil reconnu et utilisé par plusieurs chercheurs en IA. Il me semblait important que ce logiciel permette d'utiliser la PG.

Les qualités recherchées pour l’algorithme de PG sont la convivialité d’utilisation et de comparaison, la rapidité et la modularité. Ce dernier point est particulièrement important puisque l’algorithme de PG constituera un outil de recherche collaboratif. L’intérêt d’un logiciel libre axé sur la recherche est beaucoup plus grand s’il est facile de l’adapter aux particularités de ses expérimentations.

Plusieurs techniques novatrices utilisées pour la PG ont été proposées depuis son avènement. Ces techniques concernent tous les aspects de la PG, en particulier la structure du programme, sa création et son évolution génétique. Afin d’être en mesure de faire des études exhaustives des possibilités de la PG, il est pertinent d’implémenter toutes les techniques éprouvées et celles qui sont prometteuses, ou du moins préparer leur éventuelle intégration à notre algorithme.

3. Qu'est-ce que c'est ?

C'est un algorithme que l'on peut utiliser comme classificateur dans le logiciel libre
Weka (licence GPL).

Il s'agit de la Programmation Génétique (actuellement, la seule structure disponible pour les programmes est la structure en arbre) inspirée de Koza (1), puis de Banzhaf et al. (2). Ce prédicteur peut procéder à la régression symbolique (la prédiction est une valeur continue) ou à la classification (valeur de sortie est une classe). Pour la classification, l'algorithme utilise plusieurs programmes de type "un contre tous" (dans ce cas, la PG produit donc au moins un programme par classe). Une plus grande performance a été obtenue pour la classification grâce à l'intégration d'une méthode de boosting (3).

(1) Koza, J.R. (1992), Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press
(2) Banzhaf, W., Nordin, P., Keller, R.E., Francone, F.D. (1998), Genetic Programming: An Introduction: On the Automatic Evolution of Computer Programs and Its Applications, Morgan Kaufmann
(3) Yoav Freund and Robert E. Schapire (1996). Experiments with a new boosting algorithm. Proc International Conference on Machine Learning, pages 148-156, Morgan Kaufmann, San Francisco.

Le troisième chapitre du mémoire de maîtrise que j'ai rédigé donne plus de détails sur les options et le fonctionnement général de l'algorithme. Cliquez ici pour télécharger ce chapitre.

4. Structure du système

Le langage de programmation utilisé par Weka est Java, un langage orienté objet rapide et portable.
Afin de mieux visualiser la structure du programme, vous pouvez télécharger et étudier deux diagrammes qui illustrent l'interaction entre les classes de l'algorithme de PG :
->
Diagramme de classes pour la librairie geneticprogramming
-> Diagramme de classes situant Program et ProgramRules
L’appel de l’algorithme de PG se fait à l’aide de la classe suivante à partir de Weka :
weka.classifiers.functions.GeneticProgramming

Voici les options présentement disponibles pour l'algorithme de PG :
  • Proportion de la base d’entraînement réservée pour validation
  • Prétraitement des données
  • Taille de la population
  • Profondeur maximale
  • Critères d’arrêt
  • Fonctions disponibles pour les programmes
  • Fonctions définies automatiquement
  • Création de la population
  • Méthode de sélection des programmes
  • Proportions des opérateurs génétiques
  • Nombre de parents et d’enfants par opérateur génétique
  • Scénario évolutif
  • Gestionnaire d’élite
  • Taille de l’élite
La boîte d'aide de Weka, ou l'appel de la classe avec l'option -h permet d'afficher le nom et une explication de chaque option disponible.

5.Téléchargement et installation

L'algorithme de Programmation Génétique n'est pas par défaut dans la distribution stable actuelle de Weka. Il est donc nécessaire de télécharger et d'installer l'algorithme. Pour ce faire, deux options sont disponibles

1. Télécharger Weka 3.4.12 AVEC l'algorithme de PG déjà intégré via le site du projet de PG sur
SourceForge. Le nom de la version est à télécharger est WekaGP 1.1. Décompressez les fichiers et exécutez le raccourci pour démarrer Weka ou exécuter le fichier weka.jar. Consulter le site de Weka au besoin.

2. Télécharger l'algorithme de PG pour Weka seul, via le site du projet de PG sur SourceForge. Le nom de la version à télécharger est GPforWeka 1.0. Dans ce cas, vous devez extraire le fichier compressé dans le dossier weka/classifiers/functions du fichier weka.jar (de votre installation locale de Weka). Notez que vous pouvez probablement intégrer la PG à une version plus récente (ou une version de développement) de Weka, mais la compatibilité n'est pas assurée.

Concernant Weka :

6. Contribution

La documentation concernant la programmation derrière le module de PG n'est pas complète, mais la programmation est très claire (du moins selon mes critères). Je ne suis pas un programmeur professionnel mais j'ai une expérience fonctionnelle.

Voici des choses qui pourraient être intégrées à l'algorithme en tant qu'option :
  • Structure de programme en graphe
  • Structure de programme linéaire
  • Permettre la parallélisation, par exemple avec la méthode de l'île
De plus, je crois qu'il serait bon d'optimiser la méthode de boosting intégrée et le code de gestion des programmes (afin de réduire le temps d'apprentissage de la PG). Finalement, j'aimerais intégrer le code de la PG au logiciel
RapidMiner.

Il s'agit d'un projet Open Source selon la licence GNU General Public License (GPL). Le code source est compris dans chacune des versions téléchargeable chez SourceForge. Si vous aimeriez travailler de pair avec moi sur ce projet, je vous prie de me contacter.

Created by: Yan last modification: Tuesday 12 of July, 2011[16:58:47 UTC] by Yan