Machine Learning Tutorial a very fast WEKA Introduction

[email protected]

05.01.09

1

Hauptbestandteile von WEKA:

Instances ●Instance ●Attribute ●FastVector ●Classifier ●Evaluation ●(Filter) ●

http://weka.wiki.sourceforge.net/ 05.01.09

2

Instances (Dataset) besteht aus mehreren Instanzen (Instance, nächste Folie) ● verschiedene Instanzen können unterschiedliche Gewichte bekommen ● Instanzen sind geordnet (!!!) ● stratified tests (stratify(int numFolds)) ● cross validation experiments ●



trainCV(int numFolds, int foldNumber)

Zugriff auf Metadaten des Datensatzes ● median, mean, variance, min, max, etc. ● Ist initialisiert auf ein (geschlossenes) Set von Attributen ●

05.01.09

3

Instances (Dataset) ●

Erzeugen ● aus ARFF-Dateien java.io.Reader auf Datei an Konstruktor übergeben weka.core.converter.Loader verwenden ● aus Datenbanken ●



● ●

weka.core.converter.DatabaseLoader weka.experiment.InstanceQuery

mit Hilfe eigenen Quelltextes ● etc. ●

05.01.09

4

Instances (Dataset) ●

Speichern ●

weka.core.converter.Saver

verwenden

ARFF ● Datenbank ● CSV ● … ● … oder aber für ARFF einfach ●

FileWriter fw = new FileWriter(target); fw.write(instances.toString()); fw.close(); 05.01.09

5

Instances (Dataset)



Aber: ● kein direktes Zusammenführen oder Teilen von Instances-Objekten ● Hinzufügen von Attributen funktioniert nicht immer ● (pers. Erfahrung ohne Beispiel)

05.01.09

6

Instance (eine Instanz) Klasse Instance ● wird erzeugt nach einer gewissen Anzahl an Attributen, deren Semantik sich nicht direkt aus der Instanz erschließt. ● warum? ●



Instance.setDataSet(Instances inst)

optional! kann auch Fehler erzeugen (wenn z. B. Initialisierungsreihenfolge nicht eingehalten wird)! ● Methoden wie attribute(int index):Attribute schlagen fehl, wenn kein DS gesetzt ist, bzw. Instance noch keinem DS hinzugefügt wurde. ●

05.01.09

7

Attribute

(kurzer Einschub)

Eine Klasse für alle Variablentypen ● numeric ● nominal (fixed set of predefined values) ● string (growable set of values) ● date ● relational ● 12 Konstruktoren, die je nach Parameter einen der genannten Variablentypen erzeugen ● string-Typ in der Praxis problematisch ● alle Typen sind intern numerisch ● (nom. Attribute verweisen auf Indexposition des Sets) ●

05.01.09

8

FastVector

(auch ein kurzer Einschub)

Funktionsweise wie Vector aus dem Collections Framework ● aber: ● keine Synchronisation (-> schneller) ● nicht getypt (-> casting erforderlich) (auch nicht in V3.6) ● implementiert nicht java.util.Collection ●

● ●

wird u. A. benutzt, um ● nom. Attribute zu erzeugen ● Achtung: kein Hinzufügen von Werten möglich!!

05.01.09

9

Instance (eine Instanz) ●

inst.setValue(Attribute/int attr, String/double value)

setzt einen Wert ● String value -> nomineller Wert wird in index position (> double) aufgelöst ● Fehler, wenn String nicht in dem FastVector existiert, der für die Erzeugung des Attributs benutzt wurde ● double Wert wird an Indexposition des Attributs geschrieben ● setMissing(Attribute/int index) ●

05.01.09

10

Classifier

05.01.09

-> Cursor auf Classifier und F4 in Eclipse ...11

Classifier initialisiert einen Klassifikator für die gegebenen Instanzen (alle!) ● classifyInstance(Instance i) gibt double für predizierten Wert zurück ● index-Position für nominelles Attribut ● „echter“ numerischer Wert für num. Attribut ● vor Training: generisches Setzen von Parametern mittels ●

buildClassifier(Instances inst)

setOptions(String[] options) ●

05.01.09

12

Classifier (Beispiel Knn) weka.classifiers.lazy.IBk

05.01.09

13

Classifier (Beispiel Knn) Instances wekaInstances = null; Classifier classifier = new IBk(10); try { classifier.setOptions(new String[] {"-K", "3"}); classifier.buildClassifier(wekaInstances); } catch (Exception e) { }

05.01.09

14

Evaluation ●

z. B. für 10-fold cv ●

weka.classifiers.Evaluation

Instances wekaInstances = load "iris.arff"; Evaluation eval = new Evaluation(wekaInstances); Classifier classifier = new IBk(3); eval.crossValidateModel(classifier, wekaInstances, 10, new Random()); System.out.println(eval.toSummaryString());

05.01.09

15

Evaluation === Confusion Matrix === a b c