takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

MLクラスの学習時におけるsample_idx使用時の注意点

OpenCV機械学習クラス(CvStatModelを継承した、CvSVMやCvDTree、CvBoostなど)は、学習時(train()関数)において、入力データのうちどれを実際に学習に使うかを指定することができる。

例えば二分木であれば

bool CvDTree::train(const CvMat* _train_data, int _tflag,
                     const CvMat* _responses, const CvMat* _var_idx=0,
                     const CvMat* _sample_idx=0, const CvMat* _var_type=0,
                     const CvMat* _missing_mask=0,
                     CvDTreeParams params=CvDTreeParams() );

という関数で、この_sample_idxが、そのマスクにあたる。
この_sample_idxはCV_8UC1型もしくはCV_32SC1型で、使い方は学習する要素を指定する_var_idxと同じ。詳しくは以下を参照
http://d.hatena.ne.jp/takmin/20090403/1238735401

で、ここで注意が必要。学習データにすべての要素を使いたい場合は、_sample_idxにCV_32SC1型を使用するか、もしくは0を指定すること。CV_8UC1型にして全ての要素を1にするとエラーが出ます。

こいつのおかげで何時間もはまりました。