KlassenKlassenKlassenKlassen | | | | Operatoren

get_prep_info_class_mlpT_get_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp (Operator)

Name

get_prep_info_class_mlpT_get_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp — Berechnen des Informationsgehalts der vorverarbeiteten Merkmalsvektoren eines mehrschichtigen Perzeptrons.

Signatur

get_prep_info_class_mlp( : : MLPHandle, Preprocessing : InformationCont, CumInformationCont)

Herror T_get_prep_info_class_mlp(const Htuple MLPHandle, const Htuple Preprocessing, Htuple* InformationCont, Htuple* CumInformationCont)

Herror get_prep_info_class_mlp(const HTuple& MLPHandle, const HTuple& Preprocessing, HTuple* InformationCont, HTuple* CumInformationCont)

HTuple HClassMlp::GetPrepInfoClassMlp(const HTuple& Preprocessing, HTuple* CumInformationCont) const

void GetPrepInfoClassMlp(const HTuple& MLPHandle, const HTuple& Preprocessing, HTuple* InformationCont, HTuple* CumInformationCont)

HTuple HClassMlp::GetPrepInfoClassMlp(const HString& Preprocessing, HTuple* CumInformationCont) const

HTuple HClassMlp::GetPrepInfoClassMlp(const char* Preprocessing, HTuple* CumInformationCont) const

void HOperatorSetX.GetPrepInfoClassMlp(
[in] VARIANT MLPHandle, [in] VARIANT Preprocessing, [out] VARIANT* InformationCont, [out] VARIANT* CumInformationCont)

VARIANT HClassMlpX.GetPrepInfoClassMlp(
[in] BSTR Preprocessing, [out] VARIANT* CumInformationCont)

static void HOperatorSet.GetPrepInfoClassMlp(HTuple MLPHandle, HTuple preprocessing, out HTuple informationCont, out HTuple cumInformationCont)

HTuple HClassMlp.GetPrepInfoClassMlp(string preprocessing, out HTuple cumInformationCont)

Beschreibung

get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp berechnet den Informationsgehalt der mit der durch PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing gegebenen Vorverarbeitung transformierten Komponenten der Trainingsvektoren. PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing kann auf 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" oder 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates" gesetzt werden. Die zugrundeliegenden Vorverarbeitungen sind bei create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp 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'"principal_components""principal_components""principal_components""principal_components""principal_components" und min(NumOutput - 1, NumInput) für 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates", siehe create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp) in InformationContInformationContInformationContInformationContInformationContinformationCont 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 CumInformationContCumInformationContCumInformationContCumInformationContCumInformationContcumInformationCont zurückgegeben, d.h. CumInformationContCumInformationContCumInformationContCumInformationContCumInformationContcumInformationCont enthält die Summen der ersten n Elemente von InformationContInformationContInformationContInformationContInformationContinformationCont. Um get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp verwenden zu können, müssen mit add_sample_class_mlpadd_sample_class_mlpAddSampleClassMlpadd_sample_class_mlpAddSampleClassMlpAddSampleClassMlp oder read_samples_class_mlpread_samples_class_mlpReadSamplesClassMlpread_samples_class_mlpReadSamplesClassMlpReadSamplesClassMlp genügend viele Trainingsmuster zu dem durch MLPHandleMLPHandleMLPHandleMLPHandleMLPHandleMLPHandle gegebenen mehrschichtigen Perzeptron (MLP) hinzugefügt werden.

InformationContInformationContInformationContInformationContInformationContinformationCont und CumInformationContCumInformationContCumInformationContCumInformationContCumInformationContcumInformationCont 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 CumInformationContCumInformationContCumInformationContCumInformationContCumInformationContcumInformationCont, der über x% liegt, bestimmt werden. Der so erhaltene Wert kann bei einem neuerlichen Aufruf von create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp als NumComponents verwendet werden. Da zum Aufruf von get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp schon ein MLP mit create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp erzeugt werden muss, also auch ein initialer Wert von NumComponents bei create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp angegeben werden muss, aber bei Verwendung von get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp 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'"principal_components""principal_components""principal_components""principal_components""principal_components" und min(NumOutput - 1, NumInput) für 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates") erzeugt. Dann werden die Trainingsmuster zu dem MLP hinzugefügt und mit write_samples_class_mlpwrite_samples_class_mlpWriteSamplesClassMlpwrite_samples_class_mlpWriteSamplesClassMlpWriteSamplesClassMlp in Datei gespeichert. Anschließend wird mit get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp 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_mlpread_samples_class_mlpReadSamplesClassMlpread_samples_class_mlpReadSamplesClassMlpReadSamplesClassMlp wieder eingelesen. Hierauf wird das MLP mit train_class_mlptrain_class_mlpTrainClassMlptrain_class_mlpTrainClassMlpTrainClassMlp trainiert.

Parallelisierung

Parameter

MLPHandleMLPHandleMLPHandleMLPHandleMLPHandleMLPHandle (input_control)  class_mlp HClassMlp, HTupleHTupleHClassMlp, HTupleHClassMlpX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des MLP.

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

Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.

Defaultwert: 'principal_components' "principal_components" "principal_components" "principal_components" "principal_components" "principal_components"

Werteliste: 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates", 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components"

InformationContInformationContInformationContInformationContInformationContinformationCont (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Relativer Informationsgehalt der transformierten Merkmalsvektoren.

CumInformationContCumInformationContCumInformationContCumInformationContCumInformationContcumInformationCont (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Kumulierter Informationsgehalt der transformierten Merkmalsvektoren.

Beispiel (HDevelop)

* 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 = [...]
clear_class_mlp (MLPHandle)
* 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')
clear_class_mlp (MLPHandle)

Ergebnis

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

Falls get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlp den Fehler 9211 (Matrix ist nicht positiv definit) bei PreprocessingPreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates" zurückliefert, bedeutet dies typischerweise, dass für die verschiedenen Klassen zu wenige Trainingsmuster gespeichert worden sind.

Vorgänger

add_sample_class_mlpadd_sample_class_mlpAddSampleClassMlpadd_sample_class_mlpAddSampleClassMlpAddSampleClassMlp, read_samples_class_mlpread_samples_class_mlpReadSamplesClassMlpread_samples_class_mlpReadSamplesClassMlpReadSamplesClassMlp

Nachfolger

clear_class_mlpclear_class_mlpClearClassMlpclear_class_mlpClearClassMlpClearClassMlp, create_class_mlpcreate_class_mlpCreateClassMlpcreate_class_mlpCreateClassMlpCreateClassMlp

Literatur

Christopher M. Bishop: „Neural Networks for Pattern Recognition“; Oxford University Press, Oxford; 1995.
Andrew Webb: „Statistical Pattern Recognition“; Arnold, London; 1999.

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren