train_class_svmT_train_class_svmTrainClassSvmTrainClassSvmtrain_class_svm (Operator)

Name

train_class_svmT_train_class_svmTrainClassSvmTrainClassSvmtrain_class_svm — 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)

def train_class_svm(svmhandle: HHandle, epsilon: float, train_mode: Union[str, int]) -> None

Beschreibung

train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmtrain_class_svm trainiert die durch SVMHandleSVMHandleSVMHandleSVMHandlesvmhandle angegebene Support Vektor Maschine (SVM). Bevor die SVM trainiert werden kann, müssen mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmadd_sample_class_svm oder read_samples_class_svmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvmread_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 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 Optimierungsalgorithmus 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 NuNuNununu, z.B. 0.001 (siehe create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmcreate_class_svm), kann ein kleineres Epsilon die Erkennungsrate deutlich verbessern. Eine zweiter Fall ist die Bestimmung von optimalen Kernelfunktionen mit ihrer Parametrisierung (z.B. KernelParamKernelParamKernelParamkernelParamkernel_param-NuNuNununu 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 KernelParamKernelParamKernelParamkernelParamkernel_param-NuNuNununu 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, NuNuNununu in create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmcreate_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 NuNuNununu 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 NuNuNununu gewählt wurde, erfolgt eine Fehlerbehandlung. In diesem Fall muss eine SVM mit dem gleichen Trainingsdatensatz, aber kleinerem NuNuNununu trainiert werden.

Mit dem Parameter TrainModeTrainModeTrainModetrainModetrain_mode kann zwischen verschiedenen Trainingsmodi unterschieden werden. Normalerweise wird eine SVM ohne weiteres Vorwissen trainiert, und TrainModeTrainModeTrainModetrainModetrain_mode wird auf 'default'"default""default""default""default" gesetzt. Werden für den gleichen Trainingsdatensatz SVM mit verschiedenen Kernels trainiert (siehe oben), ist es mit TrainModeTrainModeTrainModetrainModetrain_mode möglich, eine bereits trainierte SVM als Anfangspunkt für das Optimierungsverfahren zu verwenden und somit das Training insbesondere bei sehr großen Trainingsdatensätzen zu beschleunigen. Hierbei muss aber der Trainingsdatensatz, die Anzahl der Klassen sowie der Modus (siehe create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmcreate_class_svm) übereinstimmen. Hierfür wird der SVMHandleSVMHandleSVMHandleSVMHandlesvmhandle der bereits trainierten Maschine in TrainModeTrainModeTrainModetrainModetrain_mode übergeben.

Mit TrainModeTrainModeTrainModetrainModetrain_mode = '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_svmTrainClassSvmTrainClassSvmtrain_class_svm entstanden sind, dem Trainingsdatensatz hinzugefügt werden. Dieser TrainModeTrainModeTrainModetrainModetrain_mode 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 TrainModeTrainModeTrainModetrainModetrain_mode = 'default'"default""default""default""default" trainiert. Anschließend wird mit clear_samples_class_svmclear_samples_class_svmClearSamplesClassSvmClearSamplesClassSvmclear_samples_class_svm der vorherige Trainingsdatensatz verworfen, ein nächster Teil mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmadd_sample_class_svm übergeben und mit train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmtrain_class_svm bei TrainModeTrainModeTrainModetrainModetrain_mode = '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 weiteres Anwendungsgebiet für TrainModeTrainModeTrainModetrainModetrain_mode = '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 TrainModeTrainModeTrainModetrainModetrain_mode='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_svmCreateClassSvmCreateClassSvmcreate_class_svm 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, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle der SVM.

EpsilonEpsilonEpsilonepsilonepsilon (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Abbruchparameter für das Training.

Default: 0.001

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

TrainModeTrainModeTrainModetrainModetrain_mode (input_control)  number HTupleUnion[str, int]HTupleHtuple (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

Default: '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_svmTrainClassSvmTrainClassSvmtrain_class_svm den Wert 2 ( H_MSG_TRUE) . Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

add_sample_class_svmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvmadd_sample_class_svm, read_samples_class_svmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvmread_samples_class_svm

Nachfolger

classify_class_svmclassify_class_svmClassifyClassSvmClassifyClassSvmclassify_class_svm, write_class_svmwrite_class_svmWriteClassSvmWriteClassSvmwrite_class_svm, create_class_lut_svmcreate_class_lut_svmCreateClassLutSvmCreateClassLutSvmcreate_class_lut_svm

Alternativen

train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchtrain_dl_classifier_batch, read_class_svmread_class_svmReadClassSvmReadClassSvmread_class_svm

Siehe auch

create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmcreate_class_svm

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