Weka
Mémoires Gratuits : Weka. Rechercher de 53 000+ Dissertation Gratuites et Mémoiresrformances de deux algorithmes. – Etudier le rˆle des param`tres d’un algorithme. o e – Combiner plusieurs algorithmes. – Eventuellement (mais l`, c’est un peu plus dur), d´finir un nouvel algorithme. a e
1 www.cs.waikato.ac.nz/ml/weka
2
Liens et ressources
Le site de Weka contient : – La version courante (´volution rapide). e – Un lien vers la javadoc. – Quelques tutoriaux. – La liste de diffusion r´pond aux questions de tout type concernant Weka (y compris les questions de e d´butants . . .). C’est en anglais. e Il existe un ”wekawiki” qui regroupe des tutoriaux, une FAQ et d’autres infos pour l’installation et l’utilisation de weka (en anglais) ` l’adresse suivante : http://weka.wiki.sourceforge.net/ a La javadoc est dans /opt/weka/weka-3-4-13/doc
3
Installation, initialisation
Weka est install´ dans les salles TP (/opt/weka/weka-3-4-13/weka.jar). e Si vous voulez l’employer chez vous : – Charger l’archive zip ` partir du site de Weka a – D´compressez-la. e – C’est tout.. . . – Les classes sont dans weka.jar – Les sources dans weka-src.jar – Tutorial.pdf est une pr´sentation assez pouss´e des fonctionnalit´s de Weka e e e Vous trouverez en annexe de cette fiche de TP une br`ve description de l’utilisation de l’interface graphique e de Weka .
3.1
Weka dans Eclipse
Sous Eclipse, si vous cr´ez un projet qui aura besoin de Weka, vous pouvez indiquer que vous voulez utiliser e weka.jar : – Project −→ properties−→ onglet Librairies – Add external jar (ici /opt/weka/weka-3-4-13/weka.jar)
Programmer avec Weka
En travaux pratiques, nous utiliserons les algorithmes de classification impl´ment´s par Weka pour exp´rimenter e e e des m´thodes, r´soudre des probl`mes, en nous concentrant sur l’utilisation et les r´sultats fournis par ces e e e e impl´mentations, sans avoir ` r´ecrire ` chaque fois les algorithmes. e a e a Utiliser Weka nous permettra par exemple de d´finir un protocole ou un programme g´n´rique d’apprentissage e e e a o` il nous suffira de changer une ligne dans le programme pour pouvoir utiliser un classifieur ` la place d’un u autre. Pour pouvoir utiliser les algorithmes dans nos programmes, il nous faut : – Pouvoir d´finir ou charger ` partir d’un fichier un ensemble d’exemples d’apprentissage. e a – Connaˆ les quelques m´thodes qui permettent de d´finir, initialiser et utiliser un classifieur. ıtre e e – Connaˆ la m´thode qui permet d’utiliser un classifieur pour trouver la classe d’un nouvel exemple. ıtre e – Afficher, lire, interpr´ter les classifications obtenues. e 2
4
Compilation, ex´cution e
Pour pouvoir compiler et ex´cuter les programmes utilisant Weka , il faut demander ` javac et java d’aller e a chercher les classes de Weka . Celles-ci sont ` l’int´rieur du fichier weka.jar. a e Compiler : javac -classpath /opt/weka/weka-3-4-13/weka.jar Exemple.java Executer : java -cp . :/opt/weka/weka-3-4-13/weka.jar Exemple Mais sous Eclipse, ` condition d’avoir configur´ le projet comme indiqu´ ci-dessus, il n’y a plus rien ` faire. . . a e e a
5
Br`ves notions d’apprentissage e
Le cadre dans lequel nous allons travailler, et les algorithmes que nous ´tudierons et utiliserons se basent sur e le sch´ma de fonctionnement suivant : e – On dispose d’un ensemble d’exemples, chaque exemple ´tant d´fini par : e e – Sa description : c’est un ensemble de valeurs d´finissant cet exemple (par exemple ses dimensions, sa e couleur . . .) – La classe qu’on lui a associ´e (avec l’aide d’un expert humain, par exemple. . .) e – On fournit cet ensemble d’exemples ` un programme qui va g´n´rer un classifieur. Un classifieur est a e e un programme qui, quand on lui fournira un exemple, essaiera de deviner sa classe. Dit autrement, le programme essaie de deviner la classe d’un exemple ` partir de sa description. Dit encore autrement, le a programme cherche la relation qui lie la description ` la classe. a – Si tout s’est bien pass´, on dispose maintenant d’un classifieur qui va agir un peu comme un oracle, pour e deviner la classe d’un exemple.
6
D´finir un ensemble d’apprentissage e
Un ensemble d’apprentissage est d´fini dans Weka par la classes Instances (au pluriel !). Un objet de cette e classe contient : – une description de la structure des exemples (liste des attributs, type de chaque attribut, indice de l’attribut qui sert de classe). – La liste des exemples.
6.1
Charger un ensemble d’exemples
On peut charger un ensemble d’exemples ` partir d’un fichier de suffixe .arff. On utilise alors le construca teur : Instances(java.io.Reader reader) Exemple : reader = new FileReader(filename); instances = new Instances(reader); Le r´pertoire /opt/weka/weka-3-4-13/data contient quelques fichiers e
6.2
Il – – – –
Construire un ensemble d’exemples
faudra, dans l’ordre : D´finir quels sont les attributs, et leur type. e Construire un ensemble d’exemples ` partir de ces attributs. a D´finir l’attribut qui jouera le rˆle de la classe. e o Construire chaque exemple, et l’int´grer ` l’ensemble. e a 3
6.2.1
D´finir les attributs e
Les deux principaux types d’attributs dans Weka sont : Attributs Num´riques Le constructeur est Attribute(String attributeName) : il n’y a rien d’autre ` e a d´finir pour le sp´cifier compl`tement. e e e Attributs Nominaux La construction se fait en deux temps : – Stocker les valeurs que peut prendre cet attribut : – Cr´er un FastVector de la bonne taille. e – Utiliser la m´thode addElement de FastVector pour ajouter chacune des valeurs. e – Cr´er l’attribut avec le constructeur Attribute(String attributeName,FastVector attributeValues) e Exemples (tir´s de la javadoc d’Attribute) e // Cr´er les attributs num´riques "length" and "weight" e e Attribute length = new Attribute("length"); Attribute weight = new Attribute("weight"); // Cr´er un FastVector pour contenir les valeurs "first", "second", "third" e FastVector my_nominal_values = new FastVector(3); my_nominal_values.addElement("first"); my_nominal_values.addElement("second"); my_nominal_values.addElement("third"); // Cr´er un attribut discret position pouvant prendre les trois valeurs e // "first", "second", "third" Attribute position = new Attribute("position", my_nominal_values); ... 6.2.2 Construire un ensemble d’exemples ` partir de ces attributs a
Le constructeur Instances(String name,FastVector attInfo,int capacity) permet de d´finir un ene semble d’exemples : name Le nom de la relation (tel qu’il apparaˆ en premi`re ligne du fichier arff) ıt e attInfo Le FastVector contenant la d´finition des attributs. e capacity La taille initiale de l’ensemble (peu important : s’il n’y a plus de place pour un nouvel exemple, on en cr´e automatiquement). e Exemple : // Cr´er trois attributs A1,A2,A3 e Attribute A1=new Attribute(‘‘nom_A1’’) // Un attribut numerique Attribute A2=new Attribute(‘‘nom_A2’’,my_nominal_values) // un attribut discret dont les valeurs // possibles sont rang´es dans le vecteur e //value_Vector (voir ci-dessus) Attribut A3=new Attribute(‘‘nom_A3’’,my_nominal_values) // Rien n’emp^che deux attributs de prendre e // leurs valeurs dans le m^me ensemble e // Regrouper les trois attributs dans un m^me vecteur e FastVector attName=new FastVector(3); attName.addElement(A1); attName.addElement(A2); attName.addElement(A3)
4
// Cr´er l’ensemble d’Instances e Instances dataset=new Instances(‘‘nom_du_fichier’’,attname,1000); Attention : la classe FastVector est utilis´e deux fois avec des rˆles diff´rents : e o e – la premi`re fois pour regrouper les valeurs possibles d’un attribut discret (FastVector de String). e – la deuxi`me fois pour regrouper les attributs d´crivant chaque exemple (FastVector d’Attribute). e e 6.2.3 D´finir la classe e
C’est la m´thode : e public final void setClass(Attribute att) o` att est l’objet de type attribut qui servira de classe. On peut aussi fixer la classe en donnant son rang u parmi les attributs. Usuellement, la classe est le dernier attribut de la liste, mais ca n’a rien d’obligatoire : ¸ // Indique que la classe est le dernier attribut de la description instances.setClassIndex(instances.numAttributes() - 1); 6.2.4 Construire chaque exemple, et l’int´grer ` l’ensemble e a
Un exemple est un objet de la classe Instance (au singulier !). On peut utiliser le constructeur : Instance(int numAttributes), qui construit un exemple vide avec numAttributes
...