我似乎無法正確傳遞參數來訓練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++相同的參數訓練的準確。我很確定參數得到了承認,因爲當我調整這些值時我得到了不同的結果。
我也注意到,當我輸出的分類到一個文件,它只有一棵樹。我很確定這是問題所在。我看着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的行爲。
想法?
第二個建議似乎可行,但你是怎麼弄明白的?這只是一個有教育的猜測,看看其他一些分類器是如何訓練的? 的CvRTreeParams數據結構定義如下: http://docs.opencv.org/modules/ml/doc/random_trees.html#cvrtparams-cvrtparams 你如何找出C++類型之間的映射其蟒蛇表示? – user3043337
我在cv2.so文件中搜索了文本符號,沒有看到max_num_of_trees_in_the_forest,所以然後通過C++源代碼來尋找其他設置方法。就我所知,映射是自動生成的,所以它只是逐步學習如何映射的經驗/實踐問題。對我來說這似乎不太令人滿意 - 儘管我一般更喜歡使用Python綁定而不是C++。 –