首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AdaBoost进行功能选择?

如何使用AdaBoost进行功能选择?
EN

Stack Overflow用户
提问于 2014-09-21 18:14:18
回答 2查看 2.2K关注 0票数 2

我想使用AdaBoost从大量(~100 k)中选择一个很好的集合特性。AdaBoost的工作方式是迭代特性集,并根据它们的预置效果添加特性。它选择对现有特征集错误分类的样本进行良好预成形的特征。

我目前使用的开放简历的CvBoost。我得到了一个示例工作,但是从文档中还不清楚如何提取它所使用的特性索引。

使用CvBoost (第三方库)或自己实现它,如何使用AdaBoot从大型功能集中提取一组特性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-21 21:44:29

声明:我不是opencv的用户。从文档中看,opencv的adaboost是使用决策树 (分类树或回归树)作为基础弱学习者。

在我看来这是通往让下划线弱的学习者的路

代码语言:javascript
复制
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继承,并公开任何功能。

票数 2
EN

Stack Overflow用户

发布于 2014-09-27 19:48:57

在@greeness答案的帮助下,我创建了一个CvBoost子类

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25962349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档