| Operatoren |
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:
Der Wert dieses Parameters darf nicht über mehrere Threads verwendet werden.Handle der SVM.
Abbruchparameter für das Training.
Defaultwert: 0.001
Wertevorschläge: 0.00001, 0.0001, 0.001, 0.01, 0.1
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')
clear_class_svm (SVMHandle)
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
| Operatoren |