Machine Learning Tutorial

Werbung
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
<-- classified as
50 0 0 | a = Iris-setosa
0 50 0 | b = Iris-versicolor
0 4 46 | c = Iris-virginica
Correctly Classified Instances
Incorrectly Classified Instances
Kappa statistic
Mean absolute error
Root mean squared error
Relative absolute error
Root relative squared error
Total Number of Instances
05.01.09
Precision?
146
97.3333 %
4
2.6667 %
0.96
0.0363
0.1146
8.1683 %
24.3129 %
150
Recall? Accuracy?
F1-Measure?
16
Evaluation
Jedes (Standard-)Fehlermaß hat eigene Methoden:
● fMeasure(int classIndex)
● recall(int classIndex)
● …
● auch:
● numTrueNegatives(int classIndex)
● numTruePositives(int classIndex)
●
05.01.09
17
Alternativen zu WEKA?
MinorThird
● http://minorthird.sourceforge.net/
●Java Machine Learning Library
● (mit Anbindung an WEKA)
● http://java-ml.sourceforge.net/
● Sogar eine JSR:
● JSR 73: Data Mining API
● http://jcp.org/en/jsr/detail?id=73
●
●
05.01.09
18
Herunterladen