KlassenKlassenKlassenKlassen | | | | Operatoren

create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm (Operator)

Name

create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm — Erzeugen eines Gaussian Mixture Models zur Klassifikation

Signatur

create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)

Herror create_class_gmm(const Hlong NumDim, const Hlong NumClasses, const Hlong NumCenters, const char* CovarType, const char* Preprocessing, const Hlong NumComponents, const Hlong RandSeed, Hlong* GMMHandle)

Herror T_create_class_gmm(const Htuple NumDim, const Htuple NumClasses, const Htuple NumCenters, const Htuple CovarType, const Htuple Preprocessing, const Htuple NumComponents, const Htuple RandSeed, Htuple* GMMHandle)

Herror create_class_gmm(const HTuple& NumDim, const HTuple& NumClasses, const HTuple& NumCenters, const HTuple& CovarType, const HTuple& Preprocessing, const HTuple& NumComponents, const HTuple& RandSeed, Hlong* GMMHandle)

void HClassGmm::CreateClassGmm(const HTuple& NumDim, const HTuple& NumClasses, const HTuple& NumCenters, const HTuple& CovarType, const HTuple& Preprocessing, const HTuple& NumComponents, const HTuple& RandSeed)

void CreateClassGmm(const HTuple& NumDim, const HTuple& NumClasses, const HTuple& NumCenters, const HTuple& CovarType, const HTuple& Preprocessing, const HTuple& NumComponents, const HTuple& RandSeed, HTuple* GMMHandle)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, const HTuple& NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const char* CovarType, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, const HTuple& NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const char* CovarType, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HOperatorSetX.CreateClassGmm(
[in] VARIANT NumDim, [in] VARIANT NumClasses, [in] VARIANT NumCenters, [in] VARIANT CovarType, [in] VARIANT Preprocessing, [in] VARIANT NumComponents, [in] VARIANT RandSeed, [out] VARIANT* GMMHandle)

void HClassGmmX.CreateClassGmm(
[in] Hlong NumDim, [in] Hlong NumClasses, [in] VARIANT NumCenters, [in] BSTR CovarType, [in] BSTR Preprocessing, [in] Hlong NumComponents, [in] Hlong RandSeed)

static void HOperatorSet.CreateClassGmm(HTuple numDim, HTuple numClasses, HTuple numCenters, HTuple covarType, HTuple preprocessing, HTuple numComponents, HTuple randSeed, out HTuple GMMHandle)

public HClassGmm(int numDim, int numClasses, HTuple numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

public HClassGmm(int numDim, int numClasses, int numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

void HClassGmm.CreateClassGmm(int numDim, int numClasses, HTuple numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

void HClassGmm.CreateClassGmm(int numDim, int numClasses, int numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

Beschreibung

create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm erzeugt ein Gaussian Mixture Model (GMM), das zur Klassifikation verwendet werden kann. NumDimNumDimNumDimNumDimNumDimnumDim gibt die Anzahl der Dimensionen des Merkmalsraumes an, NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses gibt die Anzahl der zu trainierenden Klassen an. Ein GMM besteht aus einer Anzahl NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters an Gaußschen Zentren je Klasse. NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters kann dabei nicht nur die exakt zu verwendende Anzahl an Zentren spezifizieren, sondern in Abhängigkeit der Anzahl der übergebenen Parameter auch eine Ober- und Untergrenze:

Genau ein Parameter:

Der Parameter entspricht exakt der zu verwendenden Anzahl an Zentren für alle Klassen.

Genau zwei Parameter:

Der erste Parameter entspricht der minimalen Anzahl an Zentren, der zweite der maximalen Anzahl für alle Klassen.

Genau 2*NumClassesNumClassesNumClassesNumClassesNumClassesnumClasses Parameter:

Abwechselnd jeder erste Parameter entspricht der minimalen Anzahl Zentren je Klasse und jeder zweite Parameter der maximalen Anzahl an Zentren je Klasse.

Werden Ober- und Untergrenzen für die Anzahl der Zentren spezifiziert, dann wird die optimale Anzahl an Zentren aus dem Minimale-Nachrichtenlänge-Kriterium (Mimimum Message Length Criterion, MML) bestimmt. Im Allgemeinen ist es empfehlenswert, für das spätere Training mit (zu) vielen Zentren als Maximum und der erwarteten Anzahl Zentren als Minimum zu beginnen.

Ein Zentrum wird jeweils von den Parametern Mittelpunkt , Kovarianzmatrix und Mischungskoeffizient (mixing coefficient) beschrieben. Diese Parameter werden aus den Trainingsdaten mittels des Expectation-Maximization (EM) Algorithmus bestimmt. Ein GMM kann eine beliebige Wahrscheinlichkeitsdichtefunktion annähern, vorausgesetzt es werden genügend Zentren verwendet. Die Kovarianzmatrizen haben eine Größe von NumDimNumDimNumDimNumDimNumDimnumDim x NumDimNumDimNumDimNumDimNumDimnumDim (NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents x NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents, falls eine Vorverarbeitung verwendet wird) und sind symmetrisch. Weitere Bedingungen werden mit CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType festgelegt:

Für CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'spherical'"spherical""spherical""spherical""spherical""spherical" ist ein skalares Vielfaches der Einheitsmatrix . Die Zentrum-Dichtefunktion p(x|j) wird damit

Für CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'diag'"diag""diag""diag""diag""diag" ist eine Diagonalmatrix . Die zugehörige Zentrum-Dichtefunktion p(x|j) ist

Für CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'full'"full""full""full""full""full" ist eine positiv definite Matrix. Die zugehörige Zentrum-Dichtefunktion p(x|j) ist

Die Komplexität der Berechnungen steigt von CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'spherical'"spherical""spherical""spherical""spherical""spherical" über CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'diag'"diag""diag""diag""diag""diag" bis CovarTypeCovarTypeCovarTypeCovarTypeCovarTypecovarType = 'full'"full""full""full""full""full" an. Gleichzeitig nimmt jedoch die Flexibilität der Zentrum zu. 'spherical'"spherical""spherical""spherical""spherical""spherical" benötigt deshalb im Allgemeinen höhere Werte für NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters als 'full'"full""full""full""full""full".

Die allgemeine Vorgehensweise, um GMM zu benutzen, ist wie folgt: Zuerst wird mit create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm ein GMM erzeugt. Anschließend werden mit add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmm Trainingsvektoren hinzugefügt, diese können anschließend mit write_samples_class_gmmwrite_samples_class_gmmWriteSamplesClassGmmwrite_samples_class_gmmWriteSamplesClassGmmWriteSamplesClassGmm in einer Datei gespeichert werden. Mit train_class_gmmtrain_class_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm werden die o.a. Zentrenparameter bestimmt. Die können weiterhin mit write_class_gmmwrite_class_gmmWriteClassGmmwrite_class_gmmWriteClassGmmWriteClassGmm für spätere Klassifikationen gespeichert werden.

Aus den Mischungskoeffizienten und den Zentren-Dichtefunktionen p(x|j) wird die Wahrscheinlichkeitsdichtefunktion p(x) berechnet:

Eine Funktion der Wahrscheinlichkeitsdichtefunktion p(x) kann mittels evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmm für einen Merkmalsvektor x bestimmt werden. classify_class_gmmclassify_class_gmmClassifyClassGmmclassify_class_gmmClassifyClassGmmClassifyClassGmm hingegen sortiert die p(x) und gibt damit die wahrscheinlichsten Klassen des Merkmalsvektors an.

Die Parameter PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing und NumComponentsNumComponentsNumComponentsNumComponentsNumComponentsnumComponents verwendet man, um die Trainingsdaten vorzuverarbeiten. Dabei können die Dimensionen der Daten reduziert werden. Diese Parameter sind in create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp beschrieben.

create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm initialisiert die Koordinaten der Zentren mit Zufallszahlen. Damit die Ergebnisse des Trainierens des GMM mit train_class_gmmtrain_class_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm reproduzierbar werden, wird in RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed der Initialisierungswert des Zufallszahlengenerators angegeben.

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

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

Anzahl der Dimensionen des Merkmalsraums.

Defaultwert: 3

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

Restriktion: NumDim >= 1

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

Anzahl der Klassen des GMM.

Defaultwert: 5

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

Restriktion: NumClasses >= 1

NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Anzahl der Zentren pro Klasse.

Defaultwert: 1

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30

Restriktion: NumClasses >= 1

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

Art der Kovarianzmatrizen.

Defaultwert: 'spherical' "spherical" "spherical" "spherical" "spherical" "spherical"

Werteliste: 'diag'"diag""diag""diag""diag""diag", 'full'"full""full""full""full""full", 'spherical'"spherical""spherical""spherical""spherical""spherical"

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

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

Initialisierungswert des Zufallszahlengenerators, der zur Initialisierung des GMM mit zufälligen Werten verwendet wird.

Defaultwert: 42

GMMHandleGMMHandleGMMHandleGMMHandleGMMHandleGMMHandle (output_control)  class_gmm HClassGmm, HTupleHTupleHClassGmm, HTupleHClassGmmX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des GMM.

Beispiel (HDevelop)

* Classification with Gaussian Mixture Models
create_class_gmm (NumDim , NumClasses, [1,5], 'full', 'none',\
                  NumComponents, 42, GMMHandle)
* Add the training data
for J := 0 to NumData-1 by 1
    * Features := [...]
    * ClassID := [...]
    add_sample_class_gmm (GMMHandle, Features, ClassID, Randomize)
endfor
* Train the GMM
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)
* Classify unknown data in 'Features'
classify_class_gmm (GMMHandle, Features, 1, ID, Prob, Density, KSigmaProb)
clear_class_gmm (GMMHandle)

Ergebnis

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

Nachfolger

add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmm, add_samples_image_class_gmmadd_samples_image_class_gmmAddSamplesImageClassGmmadd_samples_image_class_gmmAddSamplesImageClassGmmAddSamplesImageClassGmm

Alternativen

create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp, create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm

Siehe auch

clear_class_gmmclear_class_gmmClearClassGmmclear_class_gmmClearClassGmmClearClassGmm, train_class_gmmtrain_class_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm, classify_class_gmmclassify_class_gmmClassifyClassGmmclassify_class_gmmClassifyClassGmmClassifyClassGmm, evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmm, classify_image_class_gmmclassify_image_class_gmmClassifyImageClassGmmclassify_image_class_gmmClassifyImageClassGmmClassifyImageClassGmm

Literatur

Christopher M. Bishop: „Neural Networks for Pattern Recognition“; Oxford University Press, Oxford; 1995.
Mario A.T. Figueiredo: „Unsupervised Learning of Finite Mixture Models“; IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 24, No. 3; March 2002.

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren