KlassenKlassenKlassenKlassen | | | | Operatoren

create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm (Operator)

Name

create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm — Erzeugen einer Support-Vektor-Maschine zur Klassifikation von Mustern.

Signatur

create_class_svm( : : NumFeatures, KernelType, KernelParam, Nu, NumClasses, Mode, Preprocessing, NumComponents : SVMHandle)

Herror create_class_svm(const Hlong NumFeatures, const char* KernelType, double KernelParam, double Nu, const Hlong NumClasses, const char* Mode, const char* Preprocessing, const Hlong NumComponents, Hlong* SVMHandle)

Herror T_create_class_svm(const Htuple NumFeatures, const Htuple KernelType, const Htuple KernelParam, const Htuple Nu, const Htuple NumClasses, const Htuple Mode, const Htuple Preprocessing, const Htuple NumComponents, Htuple* SVMHandle)

Herror create_class_svm(const HTuple& NumFeatures, const HTuple& KernelType, const HTuple& KernelParam, const HTuple& Nu, const HTuple& NumClasses, const HTuple& Mode, const HTuple& Preprocessing, const HTuple& NumComponents, Hlong* SVMHandle)

void HClassSvm::CreateClassSvm(const HTuple& NumFeatures, const HTuple& KernelType, const HTuple& KernelParam, const HTuple& Nu, const HTuple& NumClasses, const HTuple& Mode, const HTuple& Preprocessing, const HTuple& NumComponents)

void CreateClassSvm(const HTuple& NumFeatures, const HTuple& KernelType, const HTuple& KernelParam, const HTuple& Nu, const HTuple& NumClasses, const HTuple& Mode, const HTuple& Preprocessing, const HTuple& NumComponents, HTuple* SVMHandle)

void HClassSvm::HClassSvm(Hlong NumFeatures, const HString& KernelType, double KernelParam, double Nu, Hlong NumClasses, const HString& Mode, const HString& Preprocessing, Hlong NumComponents)

void HClassSvm::HClassSvm(Hlong NumFeatures, const char* KernelType, double KernelParam, double Nu, Hlong NumClasses, const char* Mode, const char* Preprocessing, Hlong NumComponents)

void HClassSvm::CreateClassSvm(Hlong NumFeatures, const HString& KernelType, double KernelParam, double Nu, Hlong NumClasses, const HString& Mode, const HString& Preprocessing, Hlong NumComponents)

void HClassSvm::CreateClassSvm(Hlong NumFeatures, const char* KernelType, double KernelParam, double Nu, Hlong NumClasses, const char* Mode, const char* Preprocessing, Hlong NumComponents)

void HOperatorSetX.CreateClassSvm(
[in] VARIANT NumFeatures, [in] VARIANT KernelType, [in] VARIANT KernelParam, [in] VARIANT Nu, [in] VARIANT NumClasses, [in] VARIANT Mode, [in] VARIANT Preprocessing, [in] VARIANT NumComponents, [out] VARIANT* SVMHandle)

void HClassSvmX.CreateClassSvm(
[in] Hlong NumFeatures, [in] BSTR KernelType, [in] double KernelParam, [in] double Nu, [in] Hlong NumClasses, [in] BSTR Mode, [in] BSTR Preprocessing, [in] Hlong NumComponents)

static void HOperatorSet.CreateClassSvm(HTuple numFeatures, HTuple kernelType, HTuple kernelParam, HTuple nu, HTuple numClasses, HTuple mode, HTuple preprocessing, HTuple numComponents, out HTuple SVMHandle)

public HClassSvm(int numFeatures, string kernelType, double kernelParam, double nu, int numClasses, string mode, string preprocessing, int numComponents)

void HClassSvm.CreateClassSvm(int numFeatures, string kernelType, double kernelParam, double nu, int numClasses, string mode, string preprocessing, int numComponents)

Beschreibung

create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm erzeugt eine Support-Vektor-Maschine, welche zur Klassifikation von Mustern verwendet werden kann. Die Dimension, aus denen ein Muster besteht, wird mit NumFeaturesNumFeaturesNumFeaturesNumFeaturesNumFeaturesnumFeatures, die Anzahl der verschiedenen Klassen mit NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses angegeben.

Für ein binäres Klassifikationsproblem, in dem die Klassen linear separierbar sind, werden aus einem gegebenen Trainingsdatensatz die Merkmalsvektoren ausgewählt, die die optimal trennende Hyperebene zwischen den verschieden Klassen aufspannen. Optimal bedeutet hier, dass der Abstand zwischen den konvexen Hüllen der jeweiligen Datensätze maximal wird. Die Merkmalsvektoren, die am Rand liegen und die Hypereberne implizit aufspannen, werden Support-Vektoren (SV) genannt.

Die Klassifikation eines neuen Merkmalsvektors z erfolgt mit der Formel:

Dabei sind die Support-Vektoren, kodiert ihre jeweilige Klassenzugehörigkeit ( ) und sind die Gewichtskoeffizienten. Mit b wird der Abstand der Hyperebene zum Ursprung bezeichnet. Hierbei ist anzumerken, dass für die Klassifikation nur ein Bruchteil des originalen Datensatzes benötigt wird ( : Anzahl der Support-Vektoren), der genau an der Hyperebene liegt. Deshalb werden die Datenvektoren, die keine Support-Vektoren sind, verworfen. Die Klassifikationsgeschwindigkeit hängt von der Auswertung des Skalarproduktes zwischen den Support-Vektoren und dem zu klassifizierenden Merkmalsvektor ab, und somit von der Länge des Merkmalsvektors und der Anzahl der Support-Vektoren.

Für Klassifikationsprobleme, bei denen die Klassen nicht linear separierbar sind, wird der Algorithmus in zweierlei Art erweitert. Erstens wird ein bestimmter Anteil von Fehlern (Überlappungen) durch die Verwendung von Schlupfvariablen innerhalb des Trainings ausgeglichen. Das bedeutet, dass die Gewichte ( ) einen maximalen Wert nicht übersteigen. Um intuitiv die Anzahl von Überlappungen einzustellen, wird die als Nu-SVM bezeichnete Variante des Trainingsalgorithmus verwendet. Der Regularisierungsparameter NuNuNuNuNunu stellt eine obere Schranke für Trainingsfehler und eine untere Schranke für den Anteil von SV dar. Als Faustregel empfiehlt es sich, einen Wert für NuNuNuNuNunu einzustellen, der den Anteil der anwendungsspezifisch erwarteten Fehler entspricht, z.B. 0.01 (entsprechend 1% maximalem Trainingsfehler). Es ist zu beachten, dass ein zu großer Wert für NuNuNuNuNunu zu einem unzulässigen Trainingsproblem führen kann, und somit die SVM nicht trainiert werden kann (siehe train_class_svmtrain_class_svmTrainClassSvmtrain_class_svmTrainClassSvmTrainClassSvm für Details). Da dies aber erst während des Trainings festgestellt werden kann, erfolgt eine Fehlerbehandlung erst dort. In diesem Fall ist eine neue SVM mit angepasstem NuNuNuNuNunu zu erzeugen.

Zweitens ist es möglich, eine so genannte Kernelfunktion in dem Trainings- bzw. Klassifikationsalgorithmus zu verwenden, da zwischen Merkmalsvektoren ausschließlich Skalarprodukte berechnet werden. Das bedeutet, dass das Skalarprodukt durch eine Kernelfunktion ersetzt wird, die das Skalarprodukt implizit in einem höherdimensionalen Merkmalsraum ausführt. Ein im Ursprungsraum linear nicht separierbarer Datensatz wird mit einer passenden Kernelfunktion im höherdimensionalem Merkmalsraum linear separierbar.

Die entsprechende Kernelfunktion kann mit dem Parameter KernelTypeKernelTypeKernelTypeKernelTypeKernelTypekernelType ausgewählt werden: Für KernelTypeKernelTypeKernelTypeKernelTypeKernelTypekernelType = 'linear'"linear""linear""linear""linear""linear" wird das ursprüngliche Skalarprodukt (wie in der Formel) verwendet. Dieser Kernel sollte nur für linear separierbare Datensätze verwendet werden. Der Parameter KernelParamKernelParamKernelParamKernelParamKernelParamkernelParam wird ignoriert.

Die Radiale Basis Funktion (KernelTypeKernelTypeKernelTypeKernelTypeKernelTypekernelType = 'rbf'"rbf""rbf""rbf""rbf""rbf") stellt die beste Wahl für die Kernelfunktion dar, da mit ihr relativ leicht gute Ergebnisse erzielt werden können. Sie ist folgendermaßen definiert:

Dabei muss im Parameter KernelParamKernelParamKernelParamKernelParamKernelParamkernelParam der Wert von eingestellt werden. Anschaulich bedeutet der Wert, wie groß der Einfluss eines SV auf seine Umgebung ist. Ein zu großer Wert (kleiner Einfluss auf die Umgebung) bedeutet, dass jeder Trainingsvektor ein SV wird. Der Trainingsalgorithmus lernt den Trainingsdatensatz “auswendig„, ist aber nicht in der Lage zu generalisieren (Überanpassung). Zusätzlich dauern Training und Klassifikation viel länger. Ein zu kleiner Wert von führt dazu, dass wenige SV einen großen Einfluss auf weit entfernte Bereiche haben (Unteranpassung). Ein typisches Vorgehen bei der Ermittlung des optimalen
ist es, von einem kleinen -NuNuNuNuNunu Paar auszugehen und die Werte solange zu erhöhen, solange die Erkennungsraten sich verbessern.

Mit KernelTypeKernelTypeKernelTypeKernelTypeKernelTypekernelType = 'polynomial_homogeneous'"polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous" oder 'polynomial_inhomogeneous'"polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous" können Polynome als Kernel ausgewählt werden. Sie sind folgendermaßen definiert:

Der Grad des Polynoms d muss in KernelParamKernelParamKernelParamKernelParamKernelParamkernelParam eingestellt werden. Dabei ist zu beachten, dass Polynome zu hohen Grades (d > 10) zu numerischen Problemen führen können.

Eine Faustregel ist, dass der RBF-Kernel für die meisten Klassifikationsprobleme eine gute Wahl darstellt und deshalb ausschließlich verwendet werden soll. Nichtsdestotrotz erzeugen der lineare und polynomielle Kernel in manchen Anwendungen gute Klassifikationsergebnisse und können zum Vergleich ausprobiert werden. Weiterhin ist zu beachten, dass nur für den RBF-Kernel der ModeModeModeModeModemode 'novelty-detection'"novelty-detection""novelty-detection""novelty-detection""novelty-detection""novelty-detection" und der Operator reduce_class_svmreduce_class_svmReduceClassSvmreduce_class_svmReduceClassSvmReduceClassSvm unterstützt werden.

Mit ModeModeModeModeModemode wird der generelle Klassifikationmodus angegeben, was entweder beschreibt, wie das Multi-Klassen Problem auf binäre Entscheidungen reduziert wird oder ob eine so genannte 'novelty-detection'"novelty-detection""novelty-detection""novelty-detection""novelty-detection""novelty-detection" Aufgabe gelöst werden soll. ModeModeModeModeModemode = 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all" erzeugt einen Klassifikator für jede Klasse, die sie mit allen restlichen Klassen vergleicht. In der Testphase wird die Klasse mit dem größten Klassifikationsergebnis (siehe Klassifikationsformel ohne Vorzeichen) ausgewählt. ModeModeModeModeModemode = 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" erzeugt zwischen allen Paaren von Klassen jeweils einen Klassifikator. In der Testphase erfolgt eine Abstimmung, bei der die Klasse mit den meisten Stimmen ausgewählt wird. Die optimale Strategie (ModeModeModeModeModemode) hängt von der Anzahl der Klassen bzw. der Anwendung ab. Bei n Klassen erzeugt 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all" n Klassifikatoren und 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" n(n-1)/2. Bei nur zwei Klassen erzeugt 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" genau einen Klassifikator und 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all" unnötigerweise zwei symmetrische Klassifikatoren. Bei wenigen Klassen (ca. bis zu 10) ist 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" sowohl im Training als auch in der Testphase schneller, da die Unterklassifikatoren weniger Trainingsdaten enthalten und in der Summe weniger Support-Vektoren entstehen. Für viele Klassen ist 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all" vorzuziehen, da die Anzahl der Klassifikatoren für 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" quadratisch wächst und daher unnötig viele Sub-Klassifikatoren erzeugt werden.

Einen besonderen Fall stellt die Situation dar, falls nur die Zugehörigkeit von Testdaten zu den Trainingsdaten bestimmt werden soll (ModeModeModeModeModemode = 'novelty-detection'"novelty-detection""novelty-detection""novelty-detection""novelty-detection""novelty-detection"), d.h. NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses muss auf 1 gesetzt sein. Die separierende Hyperebene verläuft nun um die Trainingsdaten herum und trennt hierbei implizit Trainingsdaten von der Umgebung. Der Vorteil ist hierbei, dass eine explizite Angabe einer Rückweisungsklasse entfällt, was in bestimmten Anwendungen wie z.B. Texturklassifikation vorteilhaft ist. Die Support-Vektoren sind hierbei Daten, die am äußeren Rand der Verteilung liegen. Der Parameter NuNuNuNuNunu bestimmt den Anteil an Ausreißern innerhalb des Trainingsdatensatzes. Es ist zu beachten, dass bei der Klassifikation im 'novelty detection'"novelty detection""novelty detection""novelty detection""novelty detection""novelty detection" Modus die Klasse der Trainingsdaten mit dem Index 1 und die Rückweisungsklasse mit dem Index 0 zurückgegeben wird. Somit dient die erste Klasse als Rückweisungsklasse. Im Gegensatz dazu ist bei der Klassifikation mit MLP standardmäßig die letzte Klasse als Rückweisungsklasse.

Das ist anders als bei den MLP, bei denen im Standardfall die letzte Klasse die Rückweisungsklasse wird.

Mit den Parametern PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing und NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents kann eine Vorverarbeitung der Merkmalsvektoren festgelegt werden. Für PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'none'"none""none""none""none""none" werden die Merkmalsvektoren ohne Änderung an die SVM übergeben. NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird hier ignoriert.

Für alle anderen Werte von PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing wird aus dem Trainingsdatensatz eine Transformation der Merkmale berechnet, die sowohl beim Training als auch bei der späteren Klassifikation dazu verwendet wird, die Merkmalsvektoren zu transformieren.

Für PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'normalization'"normalization""normalization""normalization""normalization""normalization" werden die Merkmalsvektoren normalisiert. Im Falle eines polynomiellen Kernels wird der minimale bzw. maximale Wert des Trainingsdatensatzes auf -1 bzw. +1 abgebildet. Im Falle eines RBF-Kernels wird normalisiert, indem der Mittelwert aller Trainingsvektoren von den Merkmalsvektoren abgezogen wird und die dadurch entstehenden Merkmalsvektoren durch die Standardabweichung der jeweiligen Komponente der Trainingsvektoren geteilt werden. Die transformierten Merkmalsvektoren haben also einen Mittelwert von 0 und eine Standardabweichung von 1 in jeder Komponente. NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird in beiden Fällen ignoriert. Diese Transformation empfiehlt sich bei allen Daten, bei denen die Komponenten der Merkmalsvektoren nicht in denselben Einheiten gemessen werden (z.B. falls einige der Daten Grauwertmerkmale und andere Regionenmerkmale sind, oder falls z.B. Regionenmerkmale wie 'circularity' (Einheit: Skalar) und 'area' (Einheit: Quadratpixel) gemischt werden). Die Normalisierung sollte grundsätzlich durchgeführt werden, um die numerische Stabilität während des Trainings/Testens zu verbessern.

Für PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" werden die Merkmalsvektoren einer Hauptachsentransformation (principal component analysis, PCA) unterzogen. Die Hauptachsentransformation normalisiert zunächst die Merkmalsvektoren (s.o.). Danach wird eine orthogonale Transformation (eine Rotation im Merkmalsraum) berechnet, die die Trainingsvektoren dekorreliert. Nach der Transformation ist der Mittelwert der Trainingsvektoren 0 und die Kovarianzmatrix der Trainingsvektoren ist eine Diagonalmatrix. Die Transformation wird so bestimmt, dass die transformierten Merkmale, die die größte Variationsbreite aufweisen, als erstes in dem transformierten Merkmalsvektor stehen. Dadurch kann erreicht werden, dass die letzten Komponenten des Merkmalsvektors, die typischerweise stark vom Rauschen beeinflusst werden, ohne großen Informationsverlust weggelassen werden können. Mit NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird festgelegt, wie viele der transformierten Komponenten verwendet werden sollen. Es können bis zu NumFeaturesNumFeaturesNumFeaturesNumFeaturesNumFeaturesnumFeatures Komponenten selektiert werden. Mit Hilfe von get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm kann der Informationsgehalt der einzelnen transformierten Komponenten bestimmt werden und somit NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents einfacher bestimmt werden. Wie die Normalisierung empfiehlt sich diese Transformation, wenn die Merkmalsvektoren Mittelwerte und Standardabweichungen haben, die sich stark von 0 bzw. 1 unterscheiden oder bei denen die Komponenten der Merkmalsvektoren nicht in denselben Einheiten gemessen werden, und wenn zusätzlich zu erwarten ist, dass die Merkmale stark korreliert sind. Hier ist anzumerken, dass der RBF-Kernel bezüglich Dimensionsreduktion durch die PCA sehr robust ist. Daher sollte er die erste Wahl sein, wenn es darum geht, die Klassifikationszeiten zu beschleunigen.

Mit PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates" (kanonische Merkmale) wird eine Transformation bestimmt, die die Trainingsvektoren zuerst normalisiert und dann im Mittel über alle Klassen dekorreliert. Gleichzeitig werden in den transformierten Trainingsvektoren die Mittelwerte der einzelnen Klassen möglichst weit separiert. Wie bei PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" werden die transformierten Komponenten nach Informationsgehalt sortiert, so dass transformierte Merkmale mit wenig Informationsgehalt weggelassen werden können. Bei kanonischen Merkmalen können höchstens min(NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses - 1, NumFeaturesNumFeaturesNumFeaturesNumFeaturesNumFeaturesnumFeatures) Merkmale selektiert werden. Auch hier kann mit get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm der Informationsgehalt der einzelnen transformierten Komponenten bestimmt werden. Wie die Hauptachsentransformation können die kanonischen Merkmale dazu verwendet werden, die Datenmenge ohne großen Informationsverlust zu verringern, wobei zusätzlich noch die Trennbarkeit der Daten nach der Datenreduktion optimiert wird.

Für die letzten zwei Transformationsarten ('principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" und 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates") bestimmt NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents die Länge des transformierten Datenvektors, während NumFeaturesNumFeaturesNumFeaturesNumFeaturesNumFeaturesnumFeatures die Dimensionalität der Eingabedaten (Länge des untransformierten Merkmalsvektors) bestimmt. Dadurch wird die Länge der Eingabevariablen der SVM geringer, wodurch sich normalerweise die Trainingszeit und die Klassifikationszeit verringert.

Nachdem die SVM mit create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm erzeugt wurde, werden typischerweise mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvm oder read_samples_class_svmread_samples_class_svmReadSamplesClassSvmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvm Trainingsdaten hinzugefügt und die SVM mit train_class_svmtrain_class_svmTrainClassSvmtrain_class_svmTrainClassSvmTrainClassSvm trainiert. Daraufhin kann die SVM mit write_class_svmwrite_class_svmWriteClassSvmwrite_class_svmWriteClassSvmWriteClassSvm abgespeichert werden. Alternativ können auch sofort nach dem Training Daten mit classify_class_svmclassify_class_svmClassifyClassSvmclassify_class_svmClassifyClassSvmClassifyClassSvm klassifiziert werden.

Ein Vergleich zwischen SVM und mehrschichtigem Perzeptron (engl.: multilayer perceptron, MLP; siehe create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp) zeigt typischerweise, dass SVMs generell schneller traniert werden, insbesondere bei großen Trainingsdatensätzen, und eine leicht verbesserte Erkennungsrate haben. Das MLP weist schnellere Klassifikationszeiten auf und sollte daher in zeitkritischen Anwendungen verwendet werden. Es ist zu beachten, dass der Vergleich von optimal abgestimmten Parametern ausgeht.

Parallelisierung

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

NumFeaturesNumFeaturesNumFeaturesNumFeaturesNumFeaturesnumFeatures (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Anzahl der Eingabevariablen (Merkmale) der SVM.

Defaultwert: 10

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

Restriktion: NumFeatures >= 1

KernelTypeKernelTypeKernelTypeKernelTypeKernelTypekernelType (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art des Kernels.

Defaultwert: 'rbf' "rbf" "rbf" "rbf" "rbf" "rbf"

Werteliste: 'linear'"linear""linear""linear""linear""linear", 'polynomial_homogeneous'"polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous""polynomial_homogeneous", 'polynomial_inhomogeneous'"polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous""polynomial_inhomogeneous", 'rbf'"rbf""rbf""rbf""rbf""rbf"

KernelParamKernelParamKernelParamKernelParamKernelParamkernelParam (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zusätzlicher Parameter für die Kernel Funktion. Im Falle des RBF-Kernels der Wert für . Falls polynomieller Kernel ausgewählt wurde, der Grad des Polynoms.

Defaultwert: 0.02

Wertevorschläge: 0.01, 0.02, 0.05, 0.1, 0.5

NuNuNuNuNunu (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Regularisierungskonstante der SVM.

Defaultwert: 0.05

Wertevorschläge: 0.0001, 0.001, 0.01, 0.05, 0.1, 0.2, 0.3

Restriktion: Nu > 0.0 && Nu < 1.0

NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Anzahl der Klassen.

Defaultwert: 5

Wertevorschläge: 2, 3, 4, 5, 6, 7, 8, 9, 10

Restriktion: NumClasses >= 1

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Modus der SVM.

Defaultwert: 'one-versus-one' "one-versus-one" "one-versus-one" "one-versus-one" "one-versus-one" "one-versus-one"

Werteliste: 'novelty-detection'"novelty-detection""novelty-detection""novelty-detection""novelty-detection""novelty-detection", 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all", 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one"

PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.

Defaultwert: 'normalization' "normalization" "normalization" "normalization" "normalization" "normalization"

Werteliste: 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates", 'none'"none""none""none""none""none", 'normalization'"normalization""normalization""normalization""normalization""normalization", 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components"

NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Parameter der Vorverarbeitung: Anzahl der transformierten Merkmale (ignoriert bei PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'none'"none""none""none""none""none" und PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'normalization'"normalization""normalization""normalization""normalization""normalization").

Defaultwert: 10

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

Restriktion: NumComponents >= 1

SVMHandleSVMHandleSVMHandleSVMHandleSVMHandleSVMHandle (output_control)  class_svm HClassSvm, HTupleHTupleHClassSvm, HTupleHClassSvmX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle der SVM.

Beispiel (HDevelop)

create_class_svm (NumFeatures, 'rbf', 0.01, 0.01, NumClasses,\
                  'one-versus-all', 'normalization', NumFeatures,\
                  SVMHandle)
* Generate and add the training data
for J := 0 to NumData-1 by 1
    * Generate training features and classes
    * Data = [...]
    * Class = ...
    add_sample_class_svm (SVMHandle, Data, Class)
endfor
* Train the SVM
train_class_svm (SVMHandle, 0.001, 'default')
* Use the SVM to classify unknown data
for J := 0 to N-1 by 1
    * Extract features
    * Features = [...]
    classify_class_svm (SVMHandle, Features, 1, Class)
endfor
clear_class_svm (SVMHandle)

Ergebnis

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

Nachfolger

add_sample_class_svmadd_sample_class_svmAddSampleClassSvmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvm

Alternativen

create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp, create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm

Siehe auch

clear_class_svmclear_class_svmClearClassSvmclear_class_svmClearClassSvmClearClassSvm, train_class_svmtrain_class_svmTrainClassSvmtrain_class_svmTrainClassSvmTrainClassSvm, classify_class_svmclassify_class_svmClassifyClassSvmclassify_class_svmClassifyClassSvmClassifyClassSvm

Literatur

Bernhard Schölkopf, Alexander J.Smola: „Learning with Kernels“; MIT Press, London; 1999.
John Shawe-Taylor, Nello Cristianini: „Kernel Methods for Pattern Analysis“; Cambridge University Press, Cambridge; 2004.

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren