reduce_class_svmT_reduce_class_svmReduceClassSvmReduceClassSvm (Operator)

Name

reduce_class_svmT_reduce_class_svmReduceClassSvmReduceClassSvm — Approximieren einer bereits trainierten Support-Vektor-Maschine durch eine reduzierte Support-Vektor-Maschine für schnellere Klassifikation.

Signatur

reduce_class_svm( : : SVMHandle, Method, MinRemainingSV, MaxError : SVMHandleReduced)

Herror T_reduce_class_svm(const Htuple SVMHandle, const Htuple Method, const Htuple MinRemainingSV, const Htuple MaxError, Htuple* SVMHandleReduced)

void ReduceClassSvm(const HTuple& SVMHandle, const HTuple& Method, const HTuple& MinRemainingSV, const HTuple& MaxError, HTuple* SVMHandleReduced)

HClassSvm HClassSvm::ReduceClassSvm(const HString& Method, Hlong MinRemainingSV, double MaxError) const

HClassSvm HClassSvm::ReduceClassSvm(const char* Method, Hlong MinRemainingSV, double MaxError) const

HClassSvm HClassSvm::ReduceClassSvm(const wchar_t* Method, Hlong MinRemainingSV, double MaxError) const   (Nur Windows)

static void HOperatorSet.ReduceClassSvm(HTuple SVMHandle, HTuple method, HTuple minRemainingSV, HTuple maxError, out HTuple SVMHandleReduced)

HClassSvm HClassSvm.ReduceClassSvm(string method, int minRemainingSV, double maxError)

Beschreibung

Wie bei create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm beschrieben hängt die Klassifikationszeit der SVM von der Anzahl der Kernel-Auswertungen zwischen Support-Vektoren und dem Merkmalsvektor ab. Während die Länge des Datenvektors mit einer Vorverarbeitung wie 'pricipal_components'"pricipal_components""pricipal_components""pricipal_components""pricipal_components" oder 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates" (siehe create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm für Details) reduziert werden kann, wird die Gesamtanzahl der SV erst während des Trainings festgestellt. Um die Klassifikationszeit weiter zu reduzieren ist es möglich, die originale separierende Hyperebene mit weniger SV als ursprünglich notwendig zu approximieren. Hierfür wird eine Kopie der originalen SVM, die in SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle übergeben wird, als SVMHandleReducedSVMHandleReducedSVMHandleReducedSVMHandleReducedSVMHandleReduced zurückgegeben. Diese neue SVM hat die gleiche Parametrisierung wie das Original, enthält aber eine kleinere Anzahl von SV. Die Trainingsdaten, die in SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle gespeichert waren, werden hierbei nicht kopiert. Die originale SVM wird durch reduce_class_svmreduce_class_svmReduceClassSvmReduceClassSvmReduceClassSvm nicht modifiziert.

Das Reduktionsverfahren wird mit MethodMethodMethodMethodmethod ausgewählt. Zur Zeit wird nur ein Bottom-Up-Ansatz unterstützt, der iterativ die SV verschmilzt. Der Algorithmus bricht ab, wenn entweder eine minimal Anzahl von SV erreicht ist (MinRemainingSVMinRemainingSVMinRemainingSVMinRemainingSVminRemainingSV) oder der akkumulierte Fehler eine Schwelle überschreitet (MaxErrorMaxErrorMaxErrorMaxErrormaxError). Dabei ist anzumerken, dass aufgrund der Approximation die Komplexität der Hyperebene reduziert wird, was als Folge eine verschlechterte Klassifikationsrate hat. Das übliche Vorgehen ist deshalb, mit einem kleinen MaxErrorMaxErrorMaxErrorMaxErrormaxError, z.B. 0.001, anzufangen und diesen schrittweise zu erhöhen. Um die Reduktionsrate zu steuern, sollte bei jedem Schritt die Anzahl der SV mit get_support_vector_num_class_svmget_support_vector_num_class_svmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvm und die Klassifikationsrate mit einem separaten Testdatensatz mit classify_class_svmclassify_class_svmClassifyClassSvmClassifyClassSvmClassifyClassSvm überprüft werden.

Ausführungsinformationen

Parameter

SVMHandleSVMHandleSVMHandleSVMHandleSVMHandle (input_control)  class_svm HClassSvm, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle der originalen SVM.

MethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der Nachbearbeitung, um die Anzahl der SV zu reduzieren.

Defaultwert: 'bottom_up' "bottom_up" "bottom_up" "bottom_up" "bottom_up"

Werteliste: 'bottom_up'"bottom_up""bottom_up""bottom_up""bottom_up"

MinRemainingSVMinRemainingSVMinRemainingSVMinRemainingSVminRemainingSV (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimale Anzahl der verbleibenden SV.

Defaultwert: 2

Wertevorschläge: 2, 3, 4, 5, 7, 10, 15, 20, 30, 50

Restriktion: MinRemainingSV >= 2

MaxErrorMaxErrorMaxErrorMaxErrormaxError (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Maximal erlaubter Fehler, der durch die Reduktion erzeugt wird.

Defaultwert: 0.001

Wertevorschläge: 0.0001, 0.0002, 0.0005, 0.001, 0.002, 0.005, 0.01, 0.02, 0.05

Restriktion: MaxError > 0.0

SVMHandleReducedSVMHandleReducedSVMHandleReducedSVMHandleReducedSVMHandleReduced (output_control)  class_svm HClassSvm, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle der reduzierten SVM.

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')
* Create a reduced SVM
reduce_class_svm (SVMHandle, 'bottom_up', 2, 0.01, SVMHandleReduced)
write_class_svm (SVMHandleReduced, '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

train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm, get_support_vector_num_class_svmget_support_vector_num_class_svmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvm

Nachfolger

classify_class_svmclassify_class_svmClassifyClassSvmClassifyClassSvmClassifyClassSvm, write_class_svmwrite_class_svmWriteClassSvmWriteClassSvmWriteClassSvm, get_support_vector_num_class_svmget_support_vector_num_class_svmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvmGetSupportVectorNumClassSvm

Siehe auch

train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm

Modul

Foundation