| Operatoren |
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.
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 m_j, Kovarianzmatrix C_j und Mischungskoeffizient (mixing coefficient) P_j 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 C_j 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 C_j ein skalares Vielfaches der Einheitsmatrix C_j = s_j^(2) I. Die Zentrum-Dichtefunktion p(x|j) wird damit
1 / || x-m_j ||^2 \
p(x|j) = ------------------------ exp | - --------------- |
( (2 pi s_j^2) )^(d/2) \ 2 s_j^2 /
Für CovarType = 'diag' ist C_j eine Diagonalmatrix C_j = diag ( s_(j,1)^(2),...,s_(j,d)^(2) ) . Die zugehörige Zentrum-Dichtefunktion p(x|j) ist
1
p(x|j) = ----------------------------------------- *
__d
(2 pi)^(d/2) ( || s_(j,i)^2 ) )^(1/2)
i=1
d
/ ---- \
| \ ( x_i - m_(j,i) )^2 |
exp | - / ----------------------- |
| ---- 2 s_j^2 |
\ i=1 /
Für CovarType = 'full' ist C_j eine positiv definite Matrix. Die zugehörige Zentrum-Dichtefunktion p(x|j) ist
1
p(x|j) = -------------------------- *
(2 pi)^(d/2) |C_j|^(1/2)
/ 1 \
exp | - - ( x - m_j )^T C^(-1) ( x-m_j ) |
\ 2 /
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 P_j und den Zentren-Dichtefunktionen p(x|j) wird die Wahrscheinlichkeitsdichtefunktion p(x) berechnet:
n_comp
----
\
p(x) = / P(j) p(x|j)
----
j=1
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.
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
Anzahl der Klassen des GMM.
Defaultwert: 5
Wertevorschläge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Restriktion: NumClasses >= 1
Anzahl der Zentren pro Klasse.
Defaultwert: 1
Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30
Restriktion: NumClasses >= 1
Art der Kovarianzmatrizen.
Defaultwert: 'spherical'
Werteliste: 'diag', 'full', 'spherical'
Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.
Defaultwert: 'normalization'
Werteliste: 'canonical_variates', 'none', 'normalization', 'principal_components'
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
Initialisierungswert des Zufallszahlengenerators, der zur Initialisierung des GMM mit zufälligen Werten verwendet wird.
Defaultwert: 42
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 NData-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)
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, create_class_box
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
| Operatoren |