train_class_svmT_train_class_svmTrainClassSvmTrainClassSvm (Operator)

Name

train_class_svmT_train_class_svmTrainClassSvmTrainClassSvm — Trainieren einer Support-Vektor-Maschine.

Signatur

train_class_svm( : : SVMHandle, Epsilon, TrainMode : )

Herror T_train_class_svm(const Htuple SVMHandle, const Htuple Epsilon, const Htuple TrainMode)

void TrainClassSvm(const HTuple& SVMHandle, const HTuple& Epsilon, const HTuple& TrainMode)

void HClassSvm::TrainClassSvm(double Epsilon, const HTuple& TrainMode) const

void HClassSvm::TrainClassSvm(double Epsilon, const HString& TrainMode) const

void HClassSvm::TrainClassSvm(double Epsilon, const char* TrainMode) const

void HClassSvm::TrainClassSvm(double Epsilon, const wchar_t* TrainMode) const   (Nur Windows)

static void HOperatorSet.TrainClassSvm(HTuple SVMHandle, HTuple epsilon, HTuple trainMode)

void HClassSvm.TrainClassSvm(double epsilon, HTuple trainMode)

void HClassSvm.TrainClassSvm(double epsilon, string trainMode)

Beschreibung

train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm trainiert die durch SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle angegebene Support Vektor Maschine (SVM). Bevor die SVM trainiert werden kann, müssen mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmAddSampleClassSvm oder read_samples_class_svmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvmReadSamplesClassSvm 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 EpsilonEpsilonEpsilonEpsilonepsilon 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 EpsilonEpsilonEpsilonEpsilonepsilon 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 EpsilonEpsilonEpsilonEpsilonepsilon: Bei extrem kleinen Nu, z.B. 0.001 (siehe create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm), 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 EpsilonEpsilonEpsilonEpsilonepsilon 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 EpsilonEpsilonEpsilonEpsilonepsilon erhalten hätte. Nachdem ein optimales KernelParam-Nu Paar ermittelt wurde, kann das endgültige Training mit kleinem EpsilonEpsilonEpsilonEpsilonepsilon erfolgen.

Die Dauer des Trainings hängt von der Trainingsdatenmenge, der Anzahl der beim Training entstehenden SV sowie EpsilonEpsilonEpsilonEpsilonepsilon ab (und kann zwischen unter einer Sekunde bis mehrere Stunden betragen).

Es empfiehlt sich daher, Nu in create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm 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 TrainModeTrainModeTrainModeTrainModetrainMode kann zwischen verschiedenen Trainingsmodi unterschieden werden. Normalerweise wird eine SVM ohne weiteres Vorwissen trainiert, und TrainModeTrainModeTrainModeTrainModetrainMode wird auf 'default'"default""default""default""default" gesetzt. Werden für den gleichen Trainingsdatensatz SVM mit verschiedenen Kernels trainiert (siehe oben), ist es mit TrainModeTrainModeTrainModeTrainModetrainMode 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_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm) übereinstimmen. Hierfür wird der SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle der bereits trainierten Maschine in TrainModeTrainModeTrainModeTrainModetrainMode übergeben.

Mit TrainModeTrainModeTrainModeTrainModetrainMode = 'add_sv_to_train_set'"add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set" ist es möglich, dass beim Training Support-Vektoren, die aus einem früheren Aufruf von train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm entstanden sind, dem Trainingsdatensatz hinzugefügt werden. Dieser TrainModeTrainModeTrainModeTrainModetrainMode 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 TrainModeTrainModeTrainModeTrainModetrainMode = 'default'"default""default""default""default" trainiert. Anschließend wird mit clear_samples_class_svmclear_samples_class_svmClearSamplesClassSvmClearSamplesClassSvmClearSamplesClassSvm der vorherige Trainingsdatensatz verworfen, ein nächster Teil mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmAddSampleClassSvm übergeben und mit train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm bei TrainModeTrainModeTrainModeTrainModetrainMode = 'add_sv_to_train_set'"add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set""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 TrainModeTrainModeTrainModeTrainModetrainMode = 'add_sv_to_train_set'"add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set""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 TrainModeTrainModeTrainModeTrainModetrainMode='add_sv_to_train_set'"add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set" muss beachtet werden, dass die Vorverarbeitung (wie in create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm beschrieben) nicht verändert wird.

Ausführungsinformationen

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.

Parameter

SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle (input_control, Zustand wird modifiziert)  class_svm HClassSvm, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle der SVM.

EpsilonEpsilonEpsilonEpsilonepsilon (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Abbruchparameter für das Training.

Defaultwert: 0.001

Wertevorschläge: 0.00001, 0.0001, 0.001, 0.01, 0.1

TrainModeTrainModeTrainModeTrainModetrainMode (input_control)  number HTupleHTupleHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong)

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' "default" "default" "default" "default"

Werteliste: 'add_sv_to_train_set'"add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set""add_sv_to_train_set", 'default'"default""default""default""default"

Beispiel (HDevelop)

* 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')

Ergebnis

Sind die Parameterwerte korrekt, dann liefert train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmAddSampleClassSvm, read_samples_class_svmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvmReadSamplesClassSvm

Nachfolger

classify_class_svmclassify_class_svmClassifyClassSvmClassifyClassSvmClassifyClassSvm, write_class_svmwrite_class_svmWriteClassSvmWriteClassSvmWriteClassSvm, create_class_lut_svmcreate_class_lut_svmCreateClassLutSvmCreateClassLutSvmCreateClassLutSvm

Alternativen

train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch, read_class_svmread_class_svmReadClassSvmReadClassSvmReadClassSvm

Siehe auch

create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm

Literatur

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.

Modul

Foundation