create_class_gmm — Erzeugen eines Gaussian Mixture Models zur Klassifikation
create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)
create_class_gmm erzeugt ein Gaussian Mixture Model (GMM),
das zur Klassifikation verwendet werden kann. NumDim gibt
die Anzahl der Dimensionen des Merkmalsraumes an,
NumClasses gibt die Anzahl der zu trainierenden Klassen
an. Ein GMM besteht aus einer Anzahl NumCenters an
Gaußschen Zentren je Klasse. NumCenters 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:
Der Parameter entspricht exakt der zu verwendenden Anzahl an Zentren für alle Klassen.
Der erste Parameter entspricht der minimalen Anzahl an Zentren, der zweite der maximalen Anzahl für alle Klassen.
NumClasses 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
NumDim x NumDim
(NumComponents x NumComponents, falls
eine Vorverarbeitung verwendet wird) und sind symmetrisch. Weitere
Bedingungen werden mit CovarType festgelegt:
Für CovarType = 'spherical' ist ein skalares Vielfaches der Einheitsmatrix . Die Zentrum-Dichtefunktion
p(x|j) wird damit
Für CovarType = 'diag' ist eine Diagonalmatrix . Die zugehörige
Zentrum-Dichtefunktion p(x|j) ist
Für CovarType = 'full' ist eine positiv definite Matrix. Die zugehörige
Zentrum-Dichtefunktion p(x|j) ist
Die Komplexität der Berechnungen steigt von CovarType =
'spherical' über CovarType = 'diag' bis
CovarType = 'full' an. Gleichzeitig nimmt
jedoch die Flexibilität der Zentrum zu. 'spherical'
benötigt deshalb im Allgemeinen höhere Werte für NumCenters
als 'full'.
Die allgemeine Vorgehensweise, um GMM zu benutzen, ist wie folgt:
Zuerst wird mit create_class_gmm ein GMM
erzeugt. Anschließend werden mit add_sample_class_gmm
Trainingsvektoren hinzugefügt, diese können anschließend mit
write_samples_class_gmm in einer Datei gespeichert
werden. Mit train_class_gmm werden die o.a. Zentrenparameter
bestimmt. Die können weiterhin mit write_class_gmm 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_gmm für einen
Merkmalsvektor x bestimmt
werden. classify_class_gmm hingegen sortiert die
p(x) und gibt damit die wahrscheinlichsten Klassen
des Merkmalsvektors an.
Die Parameter Preprocessing und NumComponents
verwendet man, um die Trainingsdaten vorzuverarbeiten. Dabei können
die Dimensionen der Daten reduziert werden. Diese Parameter sind in
create_class_mlp beschrieben.
create_class_gmm initialisiert die Koordinaten der Zentren
mit Zufallszahlen. Damit die Ergebnisse des Trainierens des GMM mit
train_class_gmm reproduzierbar werden, wird in
RandSeed der Initialisierungswert des
Zufallszahlengenerators angegeben.
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.
NumDim (input_control) integer → (integer)
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
NumClasses (input_control) integer → (integer)
Anzahl der Klassen des GMM.
Defaultwert: 5
Wertevorschläge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Restriktion: NumClasses >= 1
NumCenters (input_control) integer(-array) → (integer)
Anzahl der Zentren pro Klasse.
Defaultwert: 1
Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30
Restriktion: NumClasses >= 1
CovarType (input_control) string → (string)
Art der Kovarianzmatrizen.
Defaultwert: 'spherical'
Werteliste: 'diag', 'full', 'spherical'
Preprocessing (input_control) string → (string)
Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.
Defaultwert: 'normalization'
Werteliste: 'canonical_variates', 'none', 'normalization', 'principal_components'
NumComponents (input_control) integer → (integer)
Parameter der Vorverarbeitung: Anzahl der
transformierten Merkmale (ignoriert bei
Preprocessing = 'none' und
Preprocessing =
'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
RandSeed (input_control) integer → (integer)
Initialisierungswert des Zufallszahlengenerators, der zur Initialisierung des GMM mit zufälligen Werten verwendet wird.
Defaultwert: 42
GMMHandle (output_control) class_gmm → (handle)
Handle des GMM.
* 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)
Sind die Parameterwerte korrekt, dann liefert
create_class_gmm den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
add_sample_class_gmm,
add_samples_image_class_gmm
create_class_mlp,
create_class_svm
clear_class_gmm,
train_class_gmm,
classify_class_gmm,
evaluate_class_gmm,
classify_image_class_gmm
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.
Foundation