OpenCVで機械学習手法であるRandomTreesを使っています。今までは分類問題(trueかfalseかを分けるような問題)に使用していましたが、回帰問題(regression, 例えばfalse(0)から true(1)の間を連続値として返すような問題)に使う必要が生じました。結局、学習するときに連続量の指定をしてモデルを作り、そのモデルを使ってやれば連続量として返してくれるようです。
Mommaさんのページの例題のbuild_rtrees_classifier関数の中の
//最後の1つ(出力でもあるresponsesの形式)を質的データに指定
cvSetReal1D( var_type, data->cols, CV_VAR_CATEGORICAL );
を
cvSetReal1D( var_type, data->cols, CV_VAR_ORDERED);
として学習し、ここで出来たモデルを使ってpredictするだけでよいようです。
ですので、まとめると、
train()で学習するときにCV_VAR_ORDERED(連続量)を選ぶと回帰問題になる。CV_VAR_CATEGORICAL(2値)を選ぶと分類問題となる。このモデルを読み込んでpredict()するとそれぞれ回帰問題・分類問題に対する戻り値が得られる。戻り値は学習データにつけていたカテゴリが1,0だったとすると、ASCIIコードでは1(49)と0(48)なので、分類問題のときにはdoubleで48.0と49.0になり、回帰問題のときにはdoubleの48.0~49.0の連続値となる。
0 件のコメント:
コメントを投稿