我想使用AdaBoost从大量特征(约10万个)中选择一组好的特征。AdaBoost通过迭代特征集并根据它们的表现添加特征来工作。它选择那些在现有特征集误分类样本上表现良好的特征。
我目前在使用OpenCV的CvBoost
。我已经运行了一个示例,但从文档中看,不清楚如何提取它所使用的特征索引。
使用CvBoost
、第三方库或自己实现,如何从大型特征集中使用AdaBoost提取一组特征?
回答:
声明:我不是OpenCV的用户。从文档来看,OpenCV的AdaBoost使用决策树(分类树或回归树)作为基本的弱学习器。
在我看来,这是获取底层弱学习器的方法:
CvBoost::get_weak_predictors返回弱树分类器的序列。C++: CvSeq* CvBoost::get_weak_predictors()该方法返回弱分类器的序列。序列的每个元素都是指向CvBoostTree类或其派生类之一的指针。
一旦你访问到CvBoostTree*
的序列,你应该能够检查树中包含哪些特征以及分裂值等信息。
如果每棵树只是一个决策树桩,那么每个弱学习器中只包含一个特征。但如果我们允许树的深度更深,每个独立的弱学习器中可能存在特征的组合。
我进一步查看了CvBoostTree
的类;不幸的是,该类本身没有提供公共方法来检查内部使用的特征。但你可能想要创建一个从CvBoostTree
继承的子类,并暴露所需的功能。