如何使用AdaBoost进行功能选择
How do I use AdaBoost for feature selection?
我想使用AdaBoost从大量(约100k)中选择一组好的功能。AdaBoost的工作原理是迭代特征集,并根据它们的预成型程度添加特征。它选择在现有特征集错误分类的样本上预成型良好的特征。
我目前在Open CV的CvBoost
中使用。我有一个正在运行的示例,但从文档中不清楚如何提取它使用的功能索引。
使用CvBoost
,第三方库或自己实现它,如何使用AdaBoot从大型功能集中提取一组功能?
在@greeness answer的帮助下,我创建了CvBoost
的子类
std::vector<int> RSCvBoost::getFeatureIndexes() {
CvSeqReader reader;
cvStartReadSeq( weak, &reader );
cvSetSeqReaderPos( &reader, 0 );
std::vector<int> featureIndexes;
int weak_count = weak->total;
for( int i = 0; i < weak_count; i++ ) {
CvBoostTree* wtree;
CV_READ_SEQ_ELEM( wtree, reader );
const CvDTreeNode* node = wtree->get_root();
CvDTreeSplit* split = node->split;
const int index = split->condensed_idx;
// Only add features that are not already added
if (std::find(featureIndexes.begin(),
featureIndexes.end(),
index) == featureIndexes.end()) {
featureIndexes.push_back(index);
}
}
return featureIndexes;
}
声明:我不是opencv的用户。从文档来看,opencv的adaboost使用决策树(分类树或回归树)作为基本的弱学习器。
在我看来,这是让弱学习者下划线的方法:
CvBoost::get_weak_predictors
Returns the sequence of weak tree classifiers.
C++: CvSeq* CvBoost::get_weak_predictors()
The method returns the sequence of weak classifiers.
Each element of the sequence is a pointer to the CvBoostTree class or
to some of its derivatives.
一旦您访问了CvBoostTree*
的序列,您就应该能够检查树中包含的哪些特征以及分割值等。
如果每棵树只是一个决策树桩,那么每个弱学习器中只包含一个特征。但如果我们允许树的深度更深,每个弱学习者都可能存在特征的组合。
我进一步查看了CvBoostTree
类;不幸的是,类本身没有提供一个公共方法来检查所使用的内部特性。但是,您可能希望创建自己的继承自CvBoostTree
的子类,并公开任何功能。
相关文章:
- 对可变参数使用声明.如何选择正确的功能
- 如果在VC6中使用打开功能,如何选择文件夹?
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 在 Windows 上的C++中使用选择功能进行轮询
- 如何在类中实现可选择的类似命名空间的功能?
- 我的选择排序功能C 有什么问题
- 如何使用std ::有条件地选择一个免费功能
- 明智的选择是更喜欢lambdas功能对象
- QT:无法在ListBoxWidget中的ListBox项目中添加选择和取消选择功能
- 为什么C 编译器选择错误的功能(模板)
- 在不违反干prinicple的情况下,对传递功能对象的参数类型进行模板选择
- 我是否应该使用功能指针在构造函数中选择实现
- 选择何时使用好友功能
- 选择正确功能的更好方法
- 可以编译器告诉我它选择的哪个超载或模板功能
- unix中选择和轮询系统调用之间的功能差异
- C 超载和选择正确的功能
- 在模板功能和自动类型扣除之间进行选择
- 运行时的模板实例化和功能选择
- 如何使用AdaBoost进行功能选择