標籤:
OpenCV2.3中Random Trees(R.T.)的繼承結構:
API:
| CvRTParams |
定義R.T.訓練用參數,CvDTreeParams的擴充子類,但並不用到CvDTreeParams(單一決策樹)所需的所有參數。比如說,R.T.通常不需要剪枝,因此剪枝參數就不被用到。 max_depth 單棵樹所可能達到的最大深度 min_sample_count 樹節點持續分裂的最小樣本數量,也就是說,小於這個數節點就不持續分裂,變成葉子了 regression_accuracy 迴歸樹的終止條件,如果所有節點的精度都達到要求就停止 use_surrogates 是否使用代理分裂。通常都是false,在有缺損資料或計算變數重要性的場合為true,比如,變數是色彩,而圖片中有一部分地區因為光照是全黑的 max_categories 將所有可能取值聚類到有限類,以保證計算速度。樹會以次優分裂(suboptimal split)的形式生長。只對2種取值以上的樹有意義 priors 優先順序設定,設定某些你尤其關心的類或值,使訓練過程更關注它們的分類或迴歸精度。通常不設定 calc_var_importance 設定是否需要擷取變數的重要值,一般設定true nactive_vars 樹的每個節點隨機播放變數的數量,根據這些變數尋找最佳分裂。如果設定0值,則自動取變數總和的平方根 max_num_of_trees_in_the_forest R.T.中可能存在的樹的最大數量 forest_accuracy 準確率(作為終止條件) termcrit_type 終止條件設定
-- CV_TERMCRIT_ITER 以樹的數目為終止條件,max_num_of_trees_in_the_forest生效
-- CV_TERMCRIT_EPS 以準確率為終止條件,forest_accuracy生效
-- CV_TERMCRIT_ITER | CV_TERMCRIT_EPS 兩者同時作為終止條件 |
| CvRTrees::train |
訓練R.T. return bool 訓練是否成功 train_data 訓練資料:樣本(一個樣本由固定數量的多個變數定義),以Mat的形式儲存,以列或行排列,必須是CV_32FC1格式 tflag trainData的排列結構
-- CV_ROW_SAMPLE 行排列
-- CV_COL_SAMPLE 列排列 responses 訓練資料:樣本的值(輸出),以一維Mat的形式儲存,對應trainData,必須是CV_32FC1或CV_32SC1格式。對於分類問題,responses是類標籤;對於迴歸問題,responses是需要逼近的函數取值 var_idx 定義感興趣的變數,變數中的某些,傳null表示全部 sample_idx 定義感興趣的樣本,樣本中的某些,傳null表示全部 var_type 定義responses的類型
-- CV_VAR_CATEGORICAL 分類標籤
-- CV_VAR_ORDERED(CV_VAR_NUMERICAL)數值,用於迴歸問題 missing_mask 定義缺失資料,和train_data一樣大的8位Mat params CvRTParams定義的訓練參數 |
| CvRTrees::train |
訓練R.T.(簡短版的train函數) return bool 訓練是否成功 data 訓練資料:CvMLData格式,可從外部.csv格式的檔案讀入,內部以Mat形式儲存,也是類似的value / responses / missing mask。 params CvRTParams定義的訓練參數 |
| CvRTrees:predict |
對一組輸入樣本進行預測(分類或迴歸) return double 預測結果 sample 輸入樣本,格式同CvRTrees::train的train_data missing_mask 定義缺失資料 |
Example:
- #include <cv.h>
- #include <stdio.h>
- #include <highgui.h>
- #include <ml.h>
- #include <map>
-
- void print_result(floattrain_err,floattest_err,
- constCvMat*_var_imp)
- {
- printf( "train error %f\n", train_err );
- printf( "test error %f\n\n",test_err );
-
- if (_var_imp)
- {
- cv::Matvar_imp(_var_imp),sorted_idx;
- cv::sortIdx(var_imp,sorted_idx,CV_SORT_EVERY_ROW +
- CV_SORT_DESCENDING);
-
- printf( "variable importance:\n" );
- int i, n = (int)var_imp.total();
- int type =var_imp.type();
- CV_Assert(type ==CV_32F ||type ==CV_64F);
-
- for( i = 0; i < n; i++)
- {
- intk =sorted_idx.at<int>(i);
- printf( "%d\t%f\n", k, type == CV_32F ?
- var_imp.at<float>(k) :
- var_imp.at<double>(k));
- }
- }
- printf("\n");
- }
-
- int main()
- {
- const char*filename ="data.xml";
- int response_idx = 0;
-
- CvMLData data;
- data.read_csv(filename );// read data
- data.set_response_idx(response_idx );// set response index
- data.change_var_type(response_idx,
- CV_VAR_CATEGORICAL );// set response type
- // split train and test data
- CvTrainTestSplitspl( 0.5f );
- data.set_train_test_split( &spl );
- data.set_miss_ch("?");// set missing value
-
- CvRTrees rtrees;
- rtrees.train( &data,CvRTParams( 10, 2, 0,false,
- 16, 0, true, 0, 100, 0,CV_TERMCRIT_ITER ));
- print_result( rtrees.calc_error( &data,CV_TRAIN_ERROR),
- rtrees.calc_error( &data,CV_TEST_ERROR ),
- rtrees.get_var_importance() );
-
- return 0;
- }
References:
[1] OpenCV 2.3 Online Documentation: http://opencv.itseez.com/modules/ml/doc/random_trees.html
[2] Random Forests, Leo Breiman and Adele Cutler: http://www.stat.berkeley.edu/users/breiman/RandomForests/cc_home.htm
[3] T. Hastie, R. Tibshirani, J. H. Friedman. The Elements of Statistical Learning. ISBN-13 978-0387952840, 2003, Springer.
轉自:http://lincccc.blogbus.com/logs/157846624.html
from: http://blog.csdn.net/yangtrees/article/details/7488727
OpenCV碼源筆記——RandomTrees (一)