如何使用 AdaBoost 进行特征选择?

2024-05-22

我想使用 AdaBoost 从大量(~100k)中选择一组好的特征。 AdaBoost 的工作原理是迭代功能集并根据功能的执行情况添加功能。它选择对现有特征集错误分类的样本表现良好的特征。

我目前正在 Open CV 中使用CvBoost。我得到了一个示例工作 https://stackoverflow.com/questions/15869954/opencv-c-problems-working-with-cvboost-adaboost-classifer/25960806#25960806,但从文档 http://docs.opencv.org/modules/ml/doc/boosting.html目前尚不清楚如何提取它所使用的特征索引。

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


在@greeness回答的帮助下,我做了一个子类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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 AdaBoost 进行特征选择? 的相关文章