get_prep_info_class_mlp — Berechnen des Informationsgehalts der vorverarbeiteten
Merkmalsvektoren eines mehrschichtigen Perzeptrons.
get_prep_info_class_mlp( : : MLPHandle, Preprocessing : InformationCont, CumInformationCont)
get_prep_info_class_mlp berechnet den Informationsgehalt der
mit der durch Preprocessing gegebenen Vorverarbeitung
transformierten Komponenten der Trainingsvektoren.
Preprocessing kann auf 'principal_components' oder
'canonical_variates' gesetzt werden. Die zugrundeliegenden
Vorverarbeitungen sind bei create_class_mlp beschrieben.
Der Informationsgehalt wird aus die Variation der transformierten
Komponenten der Trainingsvektoren berechnet, d.h. er wird rein
aufgrund der Trainingsdaten unabhängig von einer Fehlerrate bei
einer Klassifikation der Trainingsdaten berechnet. Der
Informationsgehalt wird für alle relevanten Komponenten der
transformierten Merkmalsvektoren (NumInput für
'principal_components' und min(NumOutput - 1,
NumInput) für 'canonical_variates', siehe
create_class_mlp) in InformationCont
zurückgegeben. Der Informationsgehalt wird als eine Zahl zwischen
0 und 1 dargestellt. Ein prozentualer Informationsgehalt kann
leicht durch Multiplikation mit 100 berechnet werden. Der kumulierte
Informationsgehalt der ersten n Komponenten wird in der n-ten
Komponente von CumInformationCont zurückgegeben, d.h.
CumInformationCont enthält die Summen der ersten n
Elemente von InformationCont. Um
get_prep_info_class_mlp verwenden zu können, müssen mit
add_sample_class_mlp oder read_samples_class_mlp
genügend viele Trainingsmuster zu dem durch MLPHandle
gegebenen mehrschichtigen Perzeptron (MLP) hinzugefügt werden.
InformationCont und CumInformationCont können
dazu verwendet werden, um zu entscheiden, wie viele Komponenten der
transformierten Merkmalsvektoren relevante Information enthalten.
Ein oft verwendetes Kriterium ist z.B. zu verlangen, dass die
transformierten Daten x% (z.B. 90%) der Daten enthalten sollten.
Dies kann leicht anhand des ersten Wertes von
CumInformationCont, der über x% liegt, bestimmt werden.
Der so erhaltene Wert kann bei einem neuerlichen Aufruf von
create_class_mlp als NumComponents verwendet
werden. Da zum Aufruf von get_prep_info_class_mlp schon ein
MLP mit create_class_mlp erzeugt werden muss, also auch ein
initialer Wert von NumComponents bei
create_class_mlp angegeben werden muss, aber bei Verwendung
von get_prep_info_class_mlp typischerweise noch nicht
bekannt ist, wie viele Komponenten relevant sind, empfiehlt sich
folgendes zweistufiges Vorgehen, um NumComponents zu
bestimmen: In einem ersten Schritt wird ein MLP mit der maximalen
Anzahl von NumComponents (NumInput für
'principal_components' und min(NumOutput - 1,
NumInput) für 'canonical_variates') erzeugt.
Dann werden die Trainingsmuster zu dem MLP hinzugefügt und mit
write_samples_class_mlp in Datei gespeichert. Anschließend
wird mit get_prep_info_class_mlp der Informationsgehalt der
Komponenten und somit NumComponents bestimmt. Danach wird
ein neues MLP mit der gewünschten Anzahl Komponenten erzeugt, und
die abgespeicherten Trainingsdaten mit
read_samples_class_mlp wieder eingelesen. Hierauf wird das
MLP mit train_class_mlp trainiert.
MLPHandle (input_control) class_mlp → (handle)
Handle des MLP.
Preprocessing (input_control) string → (string)
Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.
Defaultwert: 'principal_components'
Werteliste: 'canonical_variates', 'principal_components'
InformationCont (output_control) real-array → (real)
Relativer Informationsgehalt der transformierten Merkmalsvektoren.
CumInformationCont (output_control) real-array → (real)
Kumulierter Informationsgehalt der transformierten Merkmalsvektoren.
* Create the initial MLP
create_class_mlp (NumIn, NumHidden, NumOut, 'softmax', \
'principal_components', NumIn, 42, MLPHandle)
* Generate and add the training data
for J := 0 to NumData-1 by 1
* Generate training features and classes
* Data = [...]
* Class = [...]
add_sample_class_mlp (MLPHandle, Data, Class)
endfor
write_samples_class_mlp (MLPHandle, 'samples.mtf')
* Compute the information content of the transformed features
get_prep_info_class_mlp (MLPHandle, 'principal_components',\
InformationCont, CumInformationCont)
* Determine NumComp by inspecting InformationCont and CumInformationCont
* NumComp = [...]
* Create the actual MLP
create_class_mlp (NumIn, NumHidden, NumOut, 'softmax', \
'principal_components', NumComp, 42, MLPHandle)
* Train the MLP
read_samples_class_mlp (MLPHandle, 'samples.mtf')
train_class_mlp (MLPHandle, 100, 1, 0.01, Error, ErrorLog)
write_class_mlp (MLPHandle, 'classifier.mlp')
Sind die Parameterwerte korrekt, dann liefert
get_prep_info_class_mlp den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
Falls get_prep_info_class_mlp den Fehler 9211 (Matrix ist
nicht positiv definit) bei Preprocessing =
'canonical_variates' zurückliefert, bedeutet dies
typischerweise, dass für die verschiedenen Klassen zu wenige
Trainingsmuster gespeichert worden sind.
add_sample_class_mlp,
read_samples_class_mlp
clear_class_mlp,
create_class_mlp
Christopher M. Bishop: „Neural Networks for Pattern Recognition“;
Oxford University Press, Oxford; 1995.
Andrew Webb: „Statistical Pattern Recognition“; Arnold, London;
1999.
Foundation