select_feature_set_svm
名称
select_feature_set_svm —选择功能的最佳组合以对提供的数据进行分类。
签名
select_feature_set_svm(::ClassTrainDataHandle,SelectionMethod,GenParamNames,GenParamValues:SVMHandle,SelectedFeatureIndices,Score)
描述
select_feature_set_svm从一组要素中选择一个最佳子集以解决给定的分类问题。分类问题必须在ClassTrainDataHandle中用带注释的训练数据指定,并将由支持向量机(SVM)进行分类。可以在create_class_svm中找到此分类器的属性的详细信息。
运算符的结果是经过训练的分类器,该分类器在SVMHandle中返回 。此外,在SelectedFeatureIndices中返回索引列表或所选要素的名称。要使用此分类器,请为SelectedFeatureIndices中提到的所有特征计算新的输入数据 ,并将它们传递给分类器。
该运算符的可能应用是比较某些特征提取技术的不同参数集。另一个应用程序是搜索可以区分不同类的功能。
另外,可以为SVM估算“ nu”和 “ gamma”的值。为了仅估计这两个参数而不更改特征集,必须将特征向量指定为一个大的子特征。
若要定义应从ClassTrainDataHandle中选择 的特征,可以通过调用set_feature_lengths_class_train_data将ClassTrainDataHandle中的特征向量的维分组为子特征。子功能可以包含特征向量的多个后续元素。操作员将决定使用这些子功能中的每个子功能,是将其用于分类还是将其省略。
所选子功能的索引在SelectedFeatureIndices中返回 。如果在set_feature_lengths_class_train_data中设置了名称,则将返回这些名称而不是索引。如果之前没有为ClassTrainDataHandle调用 set_feature_lengths_class_train_data,则特征向量的每个元素都被视为一个子特征。
选择方法 SelectionMethod是贪婪搜索“贪婪” (迭代添加具有最高增益的特征)或动态振荡搜索“ greedy_oscillating” (添加具有最高增益的特征并进行测试,然后测试是否可以忽略任何已添加的特征没有太大的损失)。通常最好使用“贪婪”方法 ,因为它更快。仅在子特征为低维或冗余的情况下,才应选择“ greedy_oscillating”方法。
优化标准是训练数据的两次交叉验证的分类率。获得的最佳值在Score中返回。
可以使用参数GenParamNames和GenParamValues将用于分类的SVM的参数'nu'和'gamma'设置为'auto'。如果将它们设置为“自动”,则估计的是估计的最佳“ nu”和/或 “ gamma”。自动估计“ nu” 和“ gamma”会花费大量时间(最多几天,具体取决于数据集和特征数量)。
此外,还有一个参数“ mode”,可以将其设置为 “ one-versus-all” 或“ one-versus-one”。可以在create_class_svm中找到这两种模式以及作为径向基函数(RBF)内核的内核参数的参数'nu'和 'gamma'的说明。
注意
该操作员可能要花费大量时间,具体取决于训练文件中数据集的大小和功能部件的数量。
请注意,如果只有少量训练数据可用,则不应调用此运算符。由于过拟合的风险,操作员select_feature_set_svm可能会提供得分很高的分类器。但是,分类器在测试时可能表现不佳。
并行化
多线程类型:可重入(与非排他运算符并行运行)。
多线程作用域:全局(可以从任何线程调用)。
在内部数据级别自动并行化。
该运算符返回一个句柄。请注意,此句柄类型的实例的状态可以由特定的运算符更改,即使这些运算符将句柄用作输入参数也是如此。
参量
处理训练数据。
通用参数的值,用于配置选择过程和分类器。
默认值: []
建议值: 0.02、0.05,“自动”,“一对一”,“一对全”
经过训练的SVM分类器,仅使用所选功能。
所选要素集包含索引。
示例(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) clear_class_train_data (ClassTrainDataHandle) * Use the classifier * ... clear_class_svm (SVMHandle)
结果
如果参数有效,则运算符select_feature_set_svm 返回值2(H_MSG_TRUE)。如有必要,将引发异常。
可能的前辈
create_class_train_data, add_sample_class_train_data, set_feature_lengths_class_train_data
可能的继任者
备择方案
select_feature_set_mlp, select_feature_set_knn, select_feature_set_gmm
也可以看看
select_feature_set_trainf_svm, gray_features, region_features

