KlassenKlassenKlassenKlassen | | | | Operatoren

get_prep_info_class_svmT_get_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm (Operator)

Name

get_prep_info_class_svmT_get_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm — Berechnen des Informationsgehaltes der vorverarbeiteten Merkmalsvektoren einer Support-Vektor-Maschine.

Signatur

get_prep_info_class_svm( : : SVMHandle, Preprocessing : InformationCont, CumInformationCont)

Herror T_get_prep_info_class_svm(const Htuple SVMHandle, const Htuple Preprocessing, Htuple* InformationCont, Htuple* CumInformationCont)

Herror get_prep_info_class_svm(const HTuple& SVMHandle, const HTuple& Preprocessing, HTuple* InformationCont, HTuple* CumInformationCont)

HTuple HClassSvm::GetPrepInfoClassSvm(const HTuple& Preprocessing, HTuple* CumInformationCont) const

void GetPrepInfoClassSvm(const HTuple& SVMHandle, const HTuple& Preprocessing, HTuple* InformationCont, HTuple* CumInformationCont)

HTuple HClassSvm::GetPrepInfoClassSvm(const HString& Preprocessing, HTuple* CumInformationCont) const

HTuple HClassSvm::GetPrepInfoClassSvm(const char* Preprocessing, HTuple* CumInformationCont) const

void HOperatorSetX.GetPrepInfoClassSvm(
[in] VARIANT SVMHandle, [in] VARIANT Preprocessing, [out] VARIANT* InformationCont, [out] VARIANT* CumInformationCont)

VARIANT HClassSvmX.GetPrepInfoClassSvm(
[in] BSTR Preprocessing, [out] VARIANT* CumInformationCont)

static void HOperatorSet.GetPrepInfoClassSvm(HTuple SVMHandle, HTuple preprocessing, out HTuple informationCont, out HTuple cumInformationCont)

HTuple HClassSvm.GetPrepInfoClassSvm(string preprocessing, out HTuple cumInformationCont)

Beschreibung

get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm 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 zu Grunde liegenden Vorverarbeitungen sind bei create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm 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 (NumFeatures für 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" und min(NumClasses - 1, NumFeatures) für 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates", siehe create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm) 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_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm verwenden zu können, müssen mit add_sample_class_svmadd_sample_class_svmAddSampleClassSvmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvm oder read_samples_class_svmread_samples_class_svmReadSamplesClassSvmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvm genügend viele Trainingsmuster zu der durch SVMHandleSVMHandleSVMHandleSVMHandleSVMHandleSVMHandle gegebenen SVM 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_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm als NumComponents verwendet werden. Da zum Aufruf von get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm schon eine SVM mit create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm erzeugt werden muss, also auch ein initialer Wert von NumComponents bei create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm angegeben werden muss, aber bei Verwendung von get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm typischerweise noch nicht bekannt ist, wie viele Komponenten relevant sind, empfiehlt sich folgendes zweistufiges Vorgehen, um NumComponents zu bestimmen: In einem ersten Schritt wird eine SVM mit der maximalen Anzahl von NumComponents (NumFeatures für 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components" und min(NumClasses - 1, NumFeatures) für 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates") erzeugt. Dann werden die Trainingsmuster zu der SVM hinzugefügt und mit write_samples_class_svmwrite_samples_class_svmWriteSamplesClassSvmwrite_samples_class_svmWriteSamplesClassSvmWriteSamplesClassSvm in eine Datei gespeichert. Anschließend wird mit get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm der Informationsgehalt der Komponenten und somit NumComponents bestimmt. Danach wird eine neue SVM mit der gewünschten Anzahl Komponenten erzeugt, und die abgespeicherten Trainingsdaten mit read_samples_class_svmread_samples_class_svmReadSamplesClassSvmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvm wieder eingelesen. Hierauf wird die SVM mit train_class_svmtrain_class_svmTrainClassSvmtrain_class_svmTrainClassSvmTrainClassSvm trainiert.

Parallelisierung

Parameter

SVMHandleSVMHandleSVMHandleSVMHandleSVMHandleSVMHandle (input_control)  class_svm HClassSvm, HTupleHTupleHClassSvm, HTupleHClassSvmX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle der SVM.

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 SVM
create_class_svm (NumFeatures, 'rbf', 0.01, 0.01, NumClasses,\
                  'one-versus-all', 'normalization', NumFeatures,\
                  SVMHandle)
* Generate and add the training data
for J := 0 to NumData-1 by 1
    * Generate training features and classes
    * Data = [...]
    * Class = ...
    add_sample_class_svm (SVMHandle, Data, Class)
endfor
write_samples_class_svm (SVMHandle, 'samples.mtf')
* Compute the information content of the transformed features
get_prep_info_class_svm (SVMHandle, 'principal_components',\
                         InformationCont, CumInformationCont)
* Determine NumComp by inspecting InformationCont and CumInformationCont
* NumComp = [...]
clear_class_svm (SVMHandle)
* Create the actual SVM
create_class_svm (NumFeatures, 'rbf', 0.01, 0.01, NumClasses, \
                  'one-versus-all', 'principal_components', \
                  NumComp, SVMHandle)
* Train the SVM
read_samples_class_svm (SVMHandle, 'samples.mtf')
train_class_svm (SVMHandle, 0.001, 'default')
write_class_svm (SVMHandle, 'classifier.svm')
clear_class_svm (SVMHandle)

Ergebnis

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

Falls get_prep_info_class_svmget_prep_info_class_svmGetPrepInfoClassSvmget_prep_info_class_svmGetPrepInfoClassSvmGetPrepInfoClassSvm 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_svmadd_sample_class_svmAddSampleClassSvmadd_sample_class_svmAddSampleClassSvmAddSampleClassSvm, read_samples_class_svmread_samples_class_svmReadSamplesClassSvmread_samples_class_svmReadSamplesClassSvmReadSamplesClassSvm

Nachfolger

clear_class_svmclear_class_svmClearClassSvmclear_class_svmClearClassSvmClearClassSvm, create_class_svmcreate_class_svmCreateClassSvmcreate_class_svmCreateClassSvmCreateClassSvm

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