OpenCV码源笔记——RandomTrees (一)
来源:互联网 发布:全景视频播放器 源码 编辑:程序博客网 时间:2024/05/16 08:14
OpenCV2.3中Random Trees(R.T.)的继承结构:
API:
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
- OpenCV码源笔记——RandomTrees (一)
- OpenCV码源笔记——RandomTrees (一) .
- OpenCV码源笔记——RandomTrees (二)(Forest)
- OpenCV码源笔记——RandomTrees (二)(Forest) .
- openCV学习笔记一 —— 初识openCV
- OpenCV与AIPCV库——学习笔记(一)
- OpenCV学习笔记(一)——软件配置详述
- opencv3学习笔记(一)——opencv入门
- OpenCV笔记(一)——数据结构与基本绘图
- OpenCV学习笔记(一)——OpenCV数据结构Mat详解
- (一)OpenCV学习笔记——Linux下编译运行opencv程序
- OpenCV学习笔记(一)——Linux下的OpenCV配置
- OpenCV学习笔记(一)—OpenCV的基本数据类型和矩阵
- opencv笔记(一)
- OpenCV学习笔记一
- OpenCv笔记一:Mat
- OpenCV笔记(一)
- Opencv学习笔记【一】
- 环境变量字符集和数据库字符集不一样导致的错误,EXP-00091: Exporting questionable statistics 问题处理方法
- 遇见未知的自己……
- 为什么IC需要自己的去耦电容
- 移植QT到CORTEX-A8上的记录
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
- OpenCV码源笔记——RandomTrees (一)
- Android开发问题整理
- shell统计目录下大小为0的文件个数
- WebLogic10.3与Hibernate3.0冲突解决方法
- C++中的临时变量
- MFC 关闭时调用的函数
- Java把换行符空格置位符换成空字符
- c#的DateTime.Now函数详解
- 供开发者使用的插件打包工具完成!