Support Vector machines (SVMs)

Transcrição

Support Vector machines (SVMs)
Support Vector machines
(SVMs)
Jan Eidtmann
Übersicht









Einführung
Training erzeugt Modell
(Klassifizierer)
Training erzeugt Modell
(Klassifizierer)(2)
Das Modell
(support vectors)
Klassifizieren der Testmenge
Klassifizieren der Testmenge (2)
Direkte SVM Einbindung ins Programm
Fragen?
Referenzen
Einführung

SV machine ~ Lernmaschine



Statistische Methode (Lernen aus Beispielen)
Entwickelt von Vladimir Vapnik
Findet optimal teilende Hyperebene anhand
von Trainingsdaten
Optimal: maximaler Abstand zu jedem
Trainingsbeispiel
 Auch nicht-lineare Probleme lösbar (durch
mapping der Daten in einen höherdimensionalen Raum, in dem eine lineare Ebene gefunden
werden kann, die die Daten Teilt...(bla))
 Beliebig viele Merkmale als Einabe

Training erzeugt Modell
(Klassifizierer)
Format der Trainingsdaten (enthält feature vektoren):
<line>
.=. <target> <feature>:<value> ...
<feature>:<value> # <info>
<target> .=. +1 | -1 | 0 | <float>
<feature> .=. <integer> | "qid"
<value>
.=. <float>
<info>
.=. <string>
Beispiel (train.dat):
<..>
-1 1:0.43 3:0.12 9284:0.2 # bla
1 2:0.32 4:0.03 5:0.93 10:0.17 # bla
<..>
Aufruf zum trainieren/lernen:
svm_learn [options] train.dat model
Training erzeugt Modell
(Klassifizierer)(2)


Jede Zeile entpricht einem Trainingsbeispiel
feature:value Paare...




müssen nicht für jeden Datensatz vollständig ausgefüllt werden (wenn z.B. für ein Bild das Merkmal mit
Nummer 4 nicht in Frage kommt, einfach weglassen!)
müssen aufsteigend sortiert sein (feature)
werden durch ein Leerzeichen getrennt
<target>


+1 entspricht positivem Beispiel
-1 entspricht negativem Beispiel
Das Modell
(support vectors)
Auszug aus Datei „model“ (enthält support Vektoren):
<..>
2000 # number of training documents
879 # number of support vectors plus 1
<..>
-1.000000005930662183573076617904 6:0.013155501 9:0.10063701
27:0.038305663 41:0.12115256 63:0.056871183 142:0.020468477
206:0.12547429 286:0.073713586 406:0.12335037 578:0.40131235
720:0.13097784 960:0.30321017 1607:0.17021149 2205:0.5118736
3177:0.54580438 4507:0.27290219 #
-0.61395624853270069909427775201038 6:0.019937159 27:0.019350741
31:0.025329925 37:0.031444062 42:0.11928168 83:0.03443896
127:0.066094264 142:0.0086166598 162:0.035993244 190:0.056980081
202:0.16503957 286:0.074475288 323:0.056850906 386:0.052928429
408:0.039132856 411:0.049789339 480:0.048880257 500:0.068775021
506:0.037179198 555:0.076585822 594:0.063632675 663:0.062197074
673:0.067195281 782:0.075720288 834:0.066969693 923:0.44677126
1146:0.076086208 1191:0.5542227 1225:0.059279677 1302:0.094811738
1305:0.060443446 1379:0.070145406 1544:0.087077379 1936:0.089480147
2451:0.31556693 2796:0.1145037 2833:0.20080972 6242:0.1545693
6574:0.28386003 7639:0.29435158 #
<..>
Klassifizieren der Testmenge
Aufruf:
svm_classify [options] test.dat model vorhersage
wobei:
test.dat
= Testdatenmenge
model
= Klassifizierer
vorhersage = Ergebniswert
Testrun mit Ausgabe:
cmak@lunar $ svm_classify test.dat model vorhersage
Reading model...OK. (878 support vectors read)
Classifying test examples..100..200..300..400..500..600..done
Runtime (without IO) in cpu-seconds: 0.00
Accuracy on test set: 97.67% (586 correct, 14 incorrect, 600 total)
Precision/recall on test set: 96.43%/99.00%
Klassifizieren der Testmenge
(2)
Auszug aus Datei "vorhersage":
<..>
0.68261806
1.4150185
-0.56408643
-1.2107418
<..>
-> Pro Testbeispiel ein Ergebnis
-> Vorzeichen binarisiert
(Wert kann genutzt werden Ergebnisse zu
sortieren)
Direkte SVM Einbindung ins
Programm
Include Dateien:
svm_learn.h svm_common.h (für SVM-Light)
svm.h (für libsvm)
Einfach einbinden, lesen und benutzen! ^^)
Fragen?
Referenzen






M. O. Stitson, J. Weston, A Gammerman, V. Vapnik,
V.Vovk,"Theory of SV Machines"
A. Gammerman, "Machine Learning: Progress
and Prospects"
M. O. Stitson, J. Weston, "Function Estimation
using Support Vector Machines"
B. Schölkopf. Künstliches Lernen.
SVM-Light:
http://www.cs.cornell.edu/People/tj/svm%5Flight/
Libsvm: http://www.csie.ntu.edu.tw/~cjlin/libsvm/