OpenCV碼源筆記——RandomTrees (一)

來源:互聯網
上載者:User

標籤:

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:

  1. #include <cv.h>
  2. #include <stdio.h>
  3. #include <highgui.h>
  4. #include <ml.h>
  5. #include <map>
  6.  
  7. void print_result(floattrain_err,floattest_err,
  8.                   constCvMat*_var_imp)
  9. {
  10.     printf( "train error    %f\n", train_err );
  11.     printf( "test error    %f\n\n",test_err );
  12.  
  13.     if (_var_imp)
  14.     {
  15.         cv::Matvar_imp(_var_imp),sorted_idx;
  16.         cv::sortIdx(var_imp,sorted_idx,CV_SORT_EVERY_ROW +
  17.             CV_SORT_DESCENDING);
  18.  
  19.         printf( "variable importance:\n" );
  20.         int i, n = (int)var_imp.total();
  21.         int type =var_imp.type();
  22.         CV_Assert(type ==CV_32F ||type ==CV_64F);
  23.  
  24.         for( i = 0; i < n; i++)
  25.         {
  26.             intk =sorted_idx.at<int>(i);
  27.             printf( "%d\t%f\n", k, type == CV_32F ?
  28.                 var_imp.at<float>(k) :
  29.                 var_imp.at<double>(k));
  30.         }
  31.     }
  32.     printf("\n");
  33. }
  34.  
  35. int main()
  36. {
  37.     const char*filename ="data.xml";
  38.     int response_idx = 0;
  39.  
  40.     CvMLData data;
  41.     data.read_csv(filename );// read data
  42.     data.set_response_idx(response_idx );// set response index
  43.     data.change_var_type(response_idx,
  44.         CV_VAR_CATEGORICAL );// set response type
  45.     // split train and test data
  46.     CvTrainTestSplitspl( 0.5f );
  47.     data.set_train_test_split( &spl );
  48.     data.set_miss_ch("?");// set missing value
  49.  
  50.     CvRTrees rtrees;
  51.     rtrees.train( &data,CvRTParams( 10, 2, 0,false,
  52.         16, 0, true, 0, 100, 0,CV_TERMCRIT_ITER ));
  53.     print_result( rtrees.calc_error( &data,CV_TRAIN_ERROR),
  54.         rtrees.calc_error( &data,CV_TEST_ERROR ),
  55.         rtrees.get_var_importance() );
  56.  
  57.     return 0;
  58. }

 

 

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 (一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.