select_feature_set_svmT_select_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm (Operator)
Name
select_feature_set_svmT_select_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm — Wählt aus einer Liste an Merkmalen eine optimale Untermenge
für ein bestimmtes Klassifikationsproblem aus.
Signatur
void SelectFeatureSetSvm(const HTuple& ClassTrainDataHandle, const HTuple& SelectionMethod, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SVMHandle, HTuple* SelectedFeatureIndices, HTuple* Score)
HTuple HClassSvm::SelectFeatureSetSvm(const HClassTrainData& ClassTrainDataHandle, const HString& SelectionMethod, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Score)
HTuple HClassSvm::SelectFeatureSetSvm(const HClassTrainData& ClassTrainDataHandle, const HString& SelectionMethod, const HString& GenParamName, double GenParamValue, HTuple* Score)
HTuple HClassSvm::SelectFeatureSetSvm(const HClassTrainData& ClassTrainDataHandle, const char* SelectionMethod, const char* GenParamName, double GenParamValue, HTuple* Score)
HTuple HClassSvm::SelectFeatureSetSvm(const HClassTrainData& ClassTrainDataHandle, const wchar_t* SelectionMethod, const wchar_t* GenParamName, double GenParamValue, HTuple* Score)
(Nur Windows)
HClassSvm HClassTrainData::SelectFeatureSetSvm(const HString& SelectionMethod, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SelectedFeatureIndices, HTuple* Score) const
HClassSvm HClassTrainData::SelectFeatureSetSvm(const HString& SelectionMethod, const HString& GenParamName, double GenParamValue, HTuple* SelectedFeatureIndices, HTuple* Score) const
HClassSvm HClassTrainData::SelectFeatureSetSvm(const char* SelectionMethod, const char* GenParamName, double GenParamValue, HTuple* SelectedFeatureIndices, HTuple* Score) const
HClassSvm HClassTrainData::SelectFeatureSetSvm(const wchar_t* SelectionMethod, const wchar_t* GenParamName, double GenParamValue, HTuple* SelectedFeatureIndices, HTuple* Score) const
(Nur Windows)
static void HOperatorSet.SelectFeatureSetSvm(HTuple classTrainDataHandle, HTuple selectionMethod, HTuple genParamName, HTuple genParamValue, out HTuple SVMHandle, out HTuple selectedFeatureIndices, out HTuple score)
HTuple HClassSvm.SelectFeatureSetSvm(HClassTrainData classTrainDataHandle, string selectionMethod, HTuple genParamName, HTuple genParamValue, out HTuple score)
HTuple HClassSvm.SelectFeatureSetSvm(HClassTrainData classTrainDataHandle, string selectionMethod, string genParamName, double genParamValue, out HTuple score)
HClassSvm HClassTrainData.SelectFeatureSetSvm(string selectionMethod, HTuple genParamName, HTuple genParamValue, out HTuple selectedFeatureIndices, out HTuple score)
HClassSvm HClassTrainData.SelectFeatureSetSvm(string selectionMethod, string genParamName, double genParamValue, out HTuple selectedFeatureIndices, out HTuple score)
Beschreibung
select_feature_set_svmselect_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm wählt die optimalen Merkmale für
ein bestimmtes Klassifikationsproblem aus.
Die Daten für das Klassifikationsproblem werden mit
ClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleclassTrainDataHandleclass_train_data_handle angegeben. Als Klassifikator wird eine
Support Vector Machine (SVM) verwendet.
In SVMHandleSVMHandleSVMHandleSVMHandleSVMHandlesvmhandle wird ein Klassifikator zurückgegeben, der mit der
resultierenden Merkmalsauswahl parametrisiert und trainiert wurde. Die
Merkmalsauswahl wird in SelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesselectedFeatureIndicesselected_feature_indices zurückgegeben.
Der Operator kann für folgende Probleme nützlich sein: Es gibt eine Liste
von Merkmalen von denen einige wenige für die Lösung eines Problems
ausreichen. So kann mit Hilfe dieses Operators eine fundierte Entscheidung
getroffen werden welche dieser Merkmale relevant für das gegebene Problem
sind. Außerdem können für bestimmte Verfahren der Merkmalsextraktion
verschiedene Parametersätze verglichen werden.
Um das Klassifikationsproblem zu definieren, werden dem Handle
ClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleclassTrainDataHandleclass_train_data_handle Merkmalsvektoren hinzugefügt, die
aus einzelnen Untergruppen bestehen. Diese Untergruppen müssen mit Hilfe
des Operators set_feature_lengths_class_train_dataset_feature_lengths_class_train_dataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataset_feature_lengths_class_train_data festgelegt werden.
Diese Untergruppen werden dann von dem in select_feature_set_svmselect_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm
ausgeführten Selektionsprozess entweder ausgewählt oder abgelehnt,
je nachdem ob sie zur Lösung des Klassifikationsproblems beitragen.
Die so definierten Merkmale werden dann in SelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesselectedFeatureIndicesselected_feature_indices
mit ihrem Index referenziert, außer es wurden zusätzlich Namen beim
Aufruf von set_feature_lengths_class_train_dataset_feature_lengths_class_train_dataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataset_feature_lengths_class_train_data gesetzt. Ist das der
Fall, werden statt der Indizes die Namen der ausgewählten Merkmale
zurückgegeben. Wurde set_feature_lengths_class_train_dataset_feature_lengths_class_train_dataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataset_feature_lengths_class_train_data zuvor
nicht aufgerufen, werden die einzelnen Spalten als Merkmale interpretiert.
Für den Selektionsprozess können in SelectionMethodSelectionMethodSelectionMethodSelectionMethodselectionMethodselection_method zwei
verschiedene Methoden ausgewählt werden: entweder die Greedy-Variante
'greedy'"greedy""greedy""greedy""greedy""greedy" (das momentan erfolgversprechendste Merkmal wird
zur Auswahl hinzugefügt) oder die dynamisch oszillierende Suche
'greedy_oscillating'"greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating" (Das momentan erfolgversprechendste Merkmal
wird zur Auswahl hinzugefügt. Danach wird getestet ob eines
der hinzugefügten Merkmale entbehrlich ist.). Während 'greedy'"greedy""greedy""greedy""greedy""greedy"
schneller terminiert, kann 'greedy_oscillating'"greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating" bessere
Ergebnisse erzielen wenn die Dimensionen der Merkmale sehr klein
ist oder redundante Daten vorliegen.
Als Optimierungskriterium dient die Klassifikationsrate, die mit einem
zweifachen Kreuzvalidierungsverfahren ermittelt wird. Die beste erreichte
Klassifikationsrate wird in ScoreScoreScoreScorescorescore zurückgegeben.
Die Parameter 'nu'"nu""nu""nu""nu""nu" und 'gamma'"gamma""gamma""gamma""gamma""gamma", die für das SVM benötigt
werden, können über die generischen Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und
GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value entweder direkt auf einen Wert oder auf
'auto'"auto""auto""auto""auto""auto" gesetzt werden. Wenn 'auto'"auto""auto""auto""auto""auto" ausgewählt ist,
wird für den entsprechenden Wert auch eine Optimierung durchgeführt.
Diese automatische Schätzung kann die Ausführung der Merkmalsauswahl
signifikant verlangsamen, was bei größeren Datensätzen zu Rechenzeiten im
Bereich von Tagen führen kann. Zusätzlich kann in den generischen
Parametern auch der SVM-Modus mit 'mode'"mode""mode""mode""mode""mode" gewählt werden:
Es stehen dabei die Varianten 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all"
und 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one" zur Verfügung. Eine Erklärung für die
beiden Varianten wie auch für 'nu'"nu""nu""nu""nu""nu" und 'gamma'"gamma""gamma""gamma""gamma""gamma" als
Kernelparameter des RBF-Kernels (RBF = radial basis function)
findet sich in der Beschreibung von create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvmcreate_class_svm.
Achtung
Die Laufzeit dieses Operators kann mit größeren Datensätzen und einer
längeren Merkmalsliste unter Umständen sehr lange sein.
Es ist zu beachten, dass dieser Operator nicht aufgerufen werden sollte,
wenn für das Training nur ein kleiner Datensatz verfügbar ist.
Auf Grund des Risikos der Überanpassung kann der Operator
select_feature_set_svmselect_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm zwar einerseits einen Klassifikator
mit sehr hohem Score liefern. Andererseits weist der Klassifikator
jedoch eine schlechte Erkennungsrate auf, wenn dieser getestet wird.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf interner Datenebene.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Parameter
ClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleClassTrainDataHandleclassTrainDataHandleclass_train_data_handle (input_control) class_train_data → HClassTrainData, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle der Trainingsdaten. Sollte zuvor in
Untermerkmale aufgeteilt worden sein.
SelectionMethodSelectionMethodSelectionMethodSelectionMethodselectionMethodselection_method (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Methode zur Auswahl der besten Merkmale.
Defaultwert:
'greedy'
"greedy"
"greedy"
"greedy"
"greedy"
"greedy"
Werteliste: 'greedy'"greedy""greedy""greedy""greedy""greedy", 'greedy_oscillating'"greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating""greedy_oscillating"
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control) string(-array) → HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)
Namen der generischen Parameter zum Steuern des
Klassifikators und der Merkmalsauswahl.
Defaultwert: []
Werteliste: 'gamma'"gamma""gamma""gamma""gamma""gamma", 'mode'"mode""mode""mode""mode""mode", 'nu'"nu""nu""nu""nu""nu"
GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control) number(-array) → HTupleMaybeSequence[Union[int, str, float]]HTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
Werte der generischen Parameter zum Steuern des
Klassifikators und der Merkmalsauswahl.
Defaultwert: []
Wertevorschläge: 0.02, 0.05, 'auto'"auto""auto""auto""auto""auto", 'one-versus-one'"one-versus-one""one-versus-one""one-versus-one""one-versus-one""one-versus-one", 'one-versus-all'"one-versus-all""one-versus-all""one-versus-all""one-versus-all""one-versus-all"
SVMHandleSVMHandleSVMHandleSVMHandleSVMHandlesvmhandle (output_control) class_svm → HClassSvm, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Trainierter Klassifikator.
SelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesSelectedFeatureIndicesselectedFeatureIndicesselected_feature_indices (output_control) string-array → HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)
Die Indizes der ausgewählten Merkmale.
ScoreScoreScoreScorescorescore (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Die Klassifikationsrate die mit dem ausgewählten
Merkmalssatz erreicht wurde.
Beispiel (HDevelop)
* Find out which of the two features distinguishes two Classes
NameFeature1 := 'Good Feature'
NameFeature2 := 'Bad Feature'
LengthFeature1 := 3
LengthFeature2 := 2
* Create training data
create_class_train_data (LengthFeature1+LengthFeature2,\
ClassTrainDataHandle)
* Define the features which are in the training data
set_feature_lengths_class_train_data (ClassTrainDataHandle, [LengthFeature1,\
LengthFeature2], [NameFeature1, NameFeature2])
* Add training data
* |Feat1| |Feat2|
add_sample_class_train_data (ClassTrainDataHandle, 'row', [1,1,1, 2,1 ], 0)
add_sample_class_train_data (ClassTrainDataHandle, 'row', [2,2,2, 2,1 ], 1)
add_sample_class_train_data (ClassTrainDataHandle, 'row', [1,1,1, 3,4 ], 0)
add_sample_class_train_data (ClassTrainDataHandle, 'row', [2,2,2, 3,4 ], 1)
* Add more data
* ...
* Select the better feature with a SVM
select_feature_set_svm (ClassTrainDataHandle, 'greedy', [], [], SVMHandle,\
SelectedFeatureSVM, Score)
* Use the classifier
* ...
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
select_feature_set_svmselect_feature_set_svmSelectFeatureSetSvmSelectFeatureSetSvmSelectFeatureSetSvmselect_feature_set_svm den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
Vorgänger
create_class_train_datacreate_class_train_dataCreateClassTrainDataCreateClassTrainDataCreateClassTrainDatacreate_class_train_data,
add_sample_class_train_dataadd_sample_class_train_dataAddSampleClassTrainDataAddSampleClassTrainDataAddSampleClassTrainDataadd_sample_class_train_data,
set_feature_lengths_class_train_dataset_feature_lengths_class_train_dataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataSetFeatureLengthsClassTrainDataset_feature_lengths_class_train_data
Nachfolger
classify_class_svmclassify_class_svmClassifyClassSvmClassifyClassSvmClassifyClassSvmclassify_class_svm
Alternativen
select_feature_set_mlpselect_feature_set_mlpSelectFeatureSetMlpSelectFeatureSetMlpSelectFeatureSetMlpselect_feature_set_mlp,
select_feature_set_knnselect_feature_set_knnSelectFeatureSetKnnSelectFeatureSetKnnSelectFeatureSetKnnselect_feature_set_knn,
select_feature_set_gmmselect_feature_set_gmmSelectFeatureSetGmmSelectFeatureSetGmmSelectFeatureSetGmmselect_feature_set_gmm
Siehe auch
select_feature_set_trainf_svmselect_feature_set_trainf_svmSelectFeatureSetTrainfSvmSelectFeatureSetTrainfSvmSelectFeatureSetTrainfSvmselect_feature_set_trainf_svm,
gray_featuresgray_featuresGrayFeaturesGrayFeaturesGrayFeaturesgray_features,
region_featuresregion_featuresRegionFeaturesRegionFeaturesRegionFeaturesregion_features
Modul
Foundation