2

AdaBoost を使用して、多数 (~100k) から適切なセット機能を選択したいと考えています。AdaBoost は、機能セットを反復処理し、機能のパフォーマンスに基づいて機能を追加することで機能します。既存の機能セットによって誤って分類されたサンプルで適切に機能する機能を選択します。

現在、Open CV で使用していCvBoostます。動作する例を取得しましたが、ドキュメントからは、使用した機能インデックスを引き出す方法が明確ではありません。

サードパーティのライブラリを使用するかCvBoost、自分で実装するかのいずれかを使用して、AdaBoot を使用して大規模な機能セットから一連の機能を引き出すにはどうすればよいでしょうか?

4

2 に答える 2

3

@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;
}
于 2014-09-27T19:48:57.283 に答える