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/