5

pythonからopencvのランダムフォレスト分類子を訓練するためのパラメータを正しく渡すことができません。opencv python(cv2)でランダムフォレストが動作しない

私はC++で正しく動作する実装を書いていますが、pythonで同じ結果を得ていません。 http://fossies.org/linux/misc/opencv-2.4.7.tar.gz:a/opencv-2.4.7/samples/python2/letter_recog.py

あなたは辞書内のパラメータを渡す必要があることを示しているようだ:

は、私はここにいくつかのサンプルコードを発見しました。ここで私が使用しているコードは次のとおりです。

rtree_params = dict(max_depth=11, min_sample_count=5, use_surrogates=False, max_categories=15, calc_var_importance=False, n_active_vars=0, max_num_of_trees_in_the_forest=1000, termcrit_type=cv2.TERM_CRITERIA_MAX_ITER) 
classifier = cv2.RTrees() 
classifier.train(train_data, cv2.CV_ROW_SAMPLE, label_data, params=rtree_params); 

私は分類器が正しく訓練されたばかりであることを伝えることができますが、それは私がC++で同じパラメータで訓練を受けた1ほど正確ではありません。私は、値を微調整したときに結果が異なるため、パラメータが認識されていることはかなり確信しています。

ファイルに分類器を出力するとき、にはツリーが1つしかありません。。私はこれが問題だと確信しています。私はOpenCVの実装を見て:

http://www.code.opencv.org/svn/gsoc2012/denoising/trunk/opencv-2.4.2/modules/ml/src/rtrees.cpp

は私のパラメータを考えると、それは1000本の木で出力森をする必要があります。私はmax_num_of_trees_in_the_forest引数をあらゆる種類のクレイジー値に設定しようとしましたが、OpenCVの動作は変更されませんでした。

思考?これは非常に役立ちますが、私は信じている場合

答えて

4

わからない:

n_active_vars=0 

あなたはterm_critパラメータを実験してみたいことがあり、また

nactive_vars=0 

でなければなりません。 たとえば、辞書に:

term_crit=(cv2.TERM_CRITERIA_MAX_ITER,1000,1) 

を追加してみてください。

これは、1000台のツリーがフォレストに追加されたときに終了する基準を設定すると考えています。

+0

その2番目の提案はうまくいくように見えましたが、どう思いましたか?他の分類子がどのように訓練されているのかを見ても分かりましたか? CvRTreeParamsデータ構造は、ここで定義されています http://docs.opencv.org/modules/ml/doc/random_trees.html#cvrtparams-cvrtparamsあなたがC++タイプとの間のマッピングを把握するにはどうすればよい そのPython表現ですか? – user3043337

+0

私はcv2.soファイル内でテキストシンボルを検索し、max_num_of_trees_in_the_forestを見なかったので、これを設定する他の方法についてはC++ソースを掘り下げました。私が知っている限り、マッピングは自動的に生成されるので、徐々にマップされていく方法を経験/練習問題にすぎません。それは私にとっては非常に満足のいくものではないようです。一般的にC++のものよりもPythonバインディングの方がはるかに好きです。 –

関連する問題