2

私は 2 つのクラスからのいくつかのオブジェクトの特徴ベクトルを持っています。私の目標は、この情報を使用してブーストされた分類器をトレーニングすることです。ドキュメントと文字認識の例を見た後、そうするのは簡単だと思いましたが、何らかの理由で分類子をトレーニングするときに次のエラーが発生します。

OpenCV エラー: 関数/機能が実装されていません (ブースト ツリーは 2 クラス分類にのみ使用できます。)

私のコードの関連部分は次のとおりです。

Mat X = Mat::zeros(train_size, feat_size, CV_32F);
Mat Y = Mat::zeros(train_size, 1, CV_32S);

// filling of X with the corresponding features for each training sample
// filling of Y with labels 1 and -1 depending on the class

CvBoostParams params(CvBoost::DISCRETE, 100, 0.95, 1, false, 0);
Mat var_type = Mat(feat_size+1, 1, CV_8U, Scalar::all(CV_VAR_ORDERED));
var_type.ptr<uchar>(feat_size)[1] = CV_VAR_CATEGORICAL;

CvBoost boost;
boost.train(X, CV_ROW_SAMPLE, Y, Mat(), Mat(), var_type, Mat(), params);

ここでの問題は var_type Mat だと思います。私が理解している限り、機能ごとに 1 つのエントリと、応答用の 1 つのエントリを含める必要があります。私の機能はすべて数値測定であるため、最初の要素を CV_VAR_ORDERED に設定し、最後の要素を CV_VAR_CATEGORICAL に設定します。

OpenCV が 2 クラス分類ではない理由を誰かに説明してもらえますか?

別のこと: 予測については、実際の予測ラベルではなく、クラス 1 に属する確率が必要です。加重投票の合計を取得できれば、これは実際には計算が難しくありません。predictメソッドにはフラグreturnSumがありますが、ドキュメントには次のように書かれています: true の場合、クラス ラベルの代わりに投票の合計を返します。それらは本当に投票の合計または重み付けされた投票の合計を意味しますか?

4

0 に答える 0