OpenCV码源笔记——RandomTrees (一)
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 (一)的更多相关文章
- OpenCV码源笔记——RandomTrees (二)(Forest)
源码细节: ● 训练函数 bool CvRTrees::train( const CvMat* _train_data, int _tflag, cons ...
- OpenCV码源笔记——Decision Tree决策树
来自OpenCV2.3.1 sample/c/mushroom.cpp 1.首先读入agaricus-lepiota.data的训练样本. 样本中第一项是e或p代表有毒或无毒的标志位:其他是特征,可以 ...
- ROCKETMQ源码分析笔记1:tools
rocketmq源码解析笔记 大家好,先安利一下自己,本人男,35岁,已婚.目前就职于小资生活(北京),职位是开发总监. 姓名DaneBrown 好了.我保证本文绝不会太监!转载时请附上以上安利信息. ...
- CI框架源码阅读笔记5 基准测试 BenchMark.php
上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
- CI框架源码阅读笔记2 一切的入口 index.php
上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...
- 源码阅读笔记 - 1 MSVC2015中的std::sort
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...
- Three.js源码阅读笔记-5
Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( or ...
随机推荐
- 通过数据绑定模板得到对应的Item控件
这类控件都继承于Selector,其中主要有ComboBox.listview.listbox.datagrid. 由于个人对WPF的了解所有可能有遗漏,希望各位能够指出一起进步. 在遍历上面控件时主 ...
- java之jar命令详解
1. JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件——准确的说, ...
- ASP.NET从数据库中取出数据,有数据的复选框为选中
在KS系统中在更新菜单的时候,当查出菜单的时候要查出菜单下面已经有了哪些界面了我用了一下的方法弄的.代码如下: 界面代码: <%@ Page Language="C#" Au ...
- Oracle中的for语句
for语句是一个可预置循环次数的循环控制语句,他是一个循环计数器,通常是一个整形变量,通过这个循环计数器来控制循环执行的次数 语法如下: for variable_counter_name in [e ...
- Arrays.asList方法总结
import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...
- spring多数据源配置
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此.多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源.例如在一个spring和hibernate的框架的 ...
- telnet命令判断端口是否通不通
以上得出结论80端口不通 如果连接成功,想要退出telnet的话,ctrl+],然后输入quit 查看iptables vi /etc/sysconfig/iptables #编辑防火墙配置文件 ...
- 初识Qt Creator
(1).Qt Creator是一个跨平台的.完整的Qt集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具,下载地址http://download.qt.io/archive/qt/: ( ...
- cocos2dx中常见的类及类继承关系
场景:CCScene,继承自CCNode,几乎完全等于CCNode类 CCNode继承自CCObject,CCObject是真正意义上的父类,CCObject又继承自CCCopying类,CCCopy ...
- C# 越来越复杂了
自从三年前来到现在的公司以后,基本上不怎么使用.NET进行开发了.但最近因为公司有个CRM的项目,所以只有重新检起.NET进行开发. 因为近3年没有搞.NET的开发了,因此也不敢乱整个框架,在看了一周 ...