train_class_svm
— Trainieren einer Support-Vektor-Maschine.
train_class_svm
trainiert die durch SVMHandle
angegebene Support Vektor Maschine (SVM). Bevor die SVM trainiert
werden kann, müssen mit add_sample_class_svm
oder
read_samples_class_svm
die zum Training zu verwendenden
Trainingsmuster zu der SVM hinzugefügt werden.
Da es sich beim Training von SVMs um ein konvexes quadratisches
Optimierungsproblem handelt, kann sichergestellt werden, dass das
Training nach endlichen Schritten beim globalen Optimum terminiert.
Mit dem Parameter Epsilon
wird die Schwelle gesetzt, den
der Gradient der Funktion, die intern optimiert wird, unterschreiten
muss, damit das Training als beendet angesehen werden kann.
Normalerweise sollte Epsilon
auf 0.001 gesetzt
werden, da dies in der Praxis zu den besten Ergebnissen führt. Ein
zu großer Wert führt zu einem schnelleren Abbrechen des Trainings
und dadurch zu einer sub-optimalen Lösung. Ein zu kleiner Wert
führt dazu, dass der Optimierungsalgoritmus unverhältnissmäßig
lange dauert, ohne dass sich die Erkennungsrate verändert. Erfahrungsgemäß
gibt es zwei Gründe für das Verändern von Epsilon
: Bei extrem
kleinen Nu
, z.B. 0.001 (siehe create_class_svm
),
kann ein kleineres Epsilon die Erkennungsrate deutlich verbessern. Eine
zweiter Fall ist die Bestimmung von optimalen Kernelfunktionen mit
ihrer Parametrisierung (z.B. KernelParam
-Nu
Paare
beim RBF-Kernel) bei einem üblicherweise sehr lange dauernden
n-fachen Vergleichsprüfungsverfahren (Cross Validation). Wählt
man Epsilon
beispielsweise als 0.1 so terminiert
das Training zwar vorschnell, aber der Bereich der optimalen
Kernelfuntion unterscheidet sich nicht wesentlich von dem Bereich,
den man bei der Cross Validation mit einem normalen Epsilon
erhalten hätte. Nachdem ein optimales KernelParam
-Nu
Paar
ermittelt wurde, kann das endgültige Training mit kleinem Epsilon
erfolgen.
Die Dauer des Trainings hängt von der Trainingsdatenmenge, der
Anzahl der beim Training entstehenden SV sowie Epsilon
ab
(und kann zwischen unter einer Sekunde bis mehrere Stunden betragen).
Es empfiehlt sich daher, Nu
in create_class_svm
so
zu wählen, dass möglichst wenige SV beim Training entstehen, ohne
dass die Erkennungsrate sich verschlechtert. Insbesondere ist zu
beachten, dass für Nu
ein nicht zu großer Wert gewählt
wird, damit die Optimierung von einem zulässigen Punkt startet.
Falls zu viele Trainingsfehler mit einem zu großem Nu
gewählt
wurde, erfolgt eine Fehlerbehandlung. In diesem Fall muss eine SVM
mit dem gleichen Trainingsdatensatz, aber kleinerem Nu
trainiert werden.
Mit dem Parameter TrainMode
kann zwischen verschiedenen
Trainingsmodi unterschieden werden. Normalerweise wird eine SVM ohne
weiteres Vorwissen trainiert, und TrainMode
wird auf
'default' gesetzt. Werden für den gleichen Trainingsdatensatz
SVM mit verschiedenen Kernels trainiert (siehe oben), ist es mit
TrainMode
möglich, eine bereits trainierte SVM als
Anfangspunkt für das Optimierungsverfahren zu verwenden und somit das
Training insbesondere bei sehr grossen Trainingsdatensätzen zu
verschnellern. Hierbei muss aber der Trainingsdatensatz, die Anzahl
der Klassen sowie der Modus (siehe create_class_svm
)
übereinstimmen. Hierfür wird der SVMHandle
der bereits trainierten
Maschine in TrainMode
übergeben.
Mit TrainMode
= 'add_sv_to_train_set' ist es
möglich, dass beim Training Support-Vektoren, die aus einem
früheren Aufruf von train_class_svm
entstanden sind, dem
Trainingsdatensatz hinzugefügt werden. Dieser TrainMode
hat zwei typische Anwendungsgebiete: Erstens ist es möglich, SVM
sukzessive zu trainieren. Dabei wird der Trainingsdatensatz zuerst
in verschiedene Teile aufgeteilt. Danach wird ein erster Teil
normal mit TrainMode
= 'default'
trainiert. Anschließend wird mit clear_samples_class_svm
der vorherige Trainingsdatensatz verworfen, ein nächster Teil mit
add_sample_class_svm
übergeben und mit
train_class_svm
bei TrainMode
=
'add_sv_to_train_set' nachtrainiert. Dies wird solange
wiederholt, bis alle Teile des Trainingsdatensatzes trainiert
wurden. Dieses Vorgehen hat den Vorteil, dass so sehr große
Trainingsdatensätze effizient hinsichtlich des Speicherbedarfs trainiert
werden können. Ein weitereres Anwendungsgebiet für TrainMode
=
'add_sv_to_train_set' ist, dass ein genereller
Klassifikator durch Hinzufügen von charakteristischen
Trainingsmustern und Nachtrainieren spezialisiert werden kann. Beim
Nachtrainieren von SVMs mit
TrainMode
='add_sv_to_train_set' muss beachtet
werden, dass die Vorverarbeitung (wie in create_class_svm
beschrieben) nicht verändert wird.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.
SVMHandle
(input_control, Zustand wird modifiziert) class_svm →
(handle)
Handle der SVM.
Epsilon
(input_control) real →
(real)
Abbruchparameter für das Training.
Defaultwert: 0.001
Wertevorschläge: 0.00001, 0.0001, 0.001, 0.01, 0.1
TrainMode
(input_control) number →
(string / integer)
Modus des Trainings. Im Normalfall: 'default'. Falls die bereits enthaltenen SV als Trainingsdaten verwendet werden sollen: 'add_sv_to_train_set'. Im Falle von Alpha seeding das zu verwendende SVM Handle
Defaultwert: 'default'
Werteliste: 'add_sv_to_train_set' , 'default'
* Train an SVM create_class_svm (NumFeatures, 'rbf', 0.01, 0.01, NumClasses,\ 'one-versus-all', 'normalization', NumFeatures,\ SVMHandle) read_samples_class_svm (SVMHandle, 'samples.mtf') train_class_svm (SVMHandle, 0.001, 'default') write_class_svm (SVMHandle, 'classifier.svm')
Sind die Parameterwerte korrekt, dann liefert
train_class_svm
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
add_sample_class_svm
,
read_samples_class_svm
classify_class_svm
,
write_class_svm
,
create_class_lut_svm
train_dl_classifier_batch
,
read_class_svm
John Shawe-Taylor, Nello Cristianini: „Kernel Methods for Pattern
Analysis“; Cambridge University Press, Cambridge; 2004.
Bernhard Schölkopf, Alexander J.Smola: „Learning with Kernels“;
MIT Press, London; 1999.
Foundation