get_prep_info_class_svm
— Berechnen des Informationsgehaltes der vorverarbeiteten
Merkmalsvektoren einer Support-Vektor-Maschine.
get_prep_info_class_svm( : : SVMHandle, Preprocessing : InformationCont, CumInformationCont)
get_prep_info_class_svm
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 zu Grunde liegenden
Vorverarbeitungen sind bei create_class_svm
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' und min(NumClasses
- 1,
NumFeatures
) für 'canonical_variates' , siehe
create_class_svm
) 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_svm
verwenden zu können, müssen mit
add_sample_class_svm
oder read_samples_class_svm
genügend viele Trainingsmuster zu der durch SVMHandle
gegebenen SVM 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_svm
als NumComponents
verwendet
werden. Da zum Aufruf von get_prep_info_class_svm
schon
eine SVM mit create_class_svm
erzeugt werden muss, also auch
ein initialer Wert von NumComponents
bei
create_class_svm
angegeben werden muss, aber bei Verwendung
von get_prep_info_class_svm
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' und min(NumClasses
- 1,
NumFeatures
) für 'canonical_variates' )
erzeugt. Dann werden die Trainingsmuster zu der SVM hinzugefügt
und mit write_samples_class_svm
in eine Datei gespeichert.
Anschließend wird mit get_prep_info_class_svm
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_svm
wieder eingelesen. Hierauf wird die
SVM mit train_class_svm
trainiert.
SVMHandle
(input_control) class_svm →
(handle)
Handle der SVM.
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 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 = [...] * 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')
Sind die Parameterwerte korrekt, dann liefert
get_prep_info_class_svm
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
Falls get_prep_info_class_svm
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_svm
,
read_samples_class_svm
clear_class_svm
,
create_class_svm
Christopher M. Bishop: „Neural Networks for Pattern Recognition“;
Oxford University Press, Oxford; 1995.
Andrew Webb: „Statistical Pattern Recognition“; Arnold, London;
1999.
Foundation