结构化随机森林源码分析
2016-07-15 20:21
183 查看
转载:http://blog.csdn.net/wdhxek/article/details/50437556
文章信息与源码来源
<Structured Class-Labels in Random Forests for Semantic Image Labelling> http://www.dsi.unive.it/~srotabul/#publications
Random Tree 类库设计分析
看完作者的源码,对C++的继承与派生,派生,更为深刻的理解。基类指定规则,固定好程序的算法框架或者是逻辑流程,派生类则给出一个具体的细节化的方案,使用什么样的数据类型,具体每一步的执行过程怎么定义;使用模板类给出抽象化的类型,使用virtual函数给出抽象的流程,比如在RT中的split虚函数,作为构树过程中很重要的一环,基类指定了这个函数实现的是对当前节点的数据分流功能,规定函数的输入是当前节点Node,返回值是数据的分流结果,左右数据流的统计信息,当前节点的路径选择函数的参数,但是至于怎样的实现,是在派生类中完成的。
几个具体的RT成员分析:RT在设计过程中更加注重的是构树这个过程以及树本身的物理含义,从数据结构的角度分析:与上一篇文章相似,节点在构树过程中需要保存哪些信息,路径选择函数的参数信息,自己的左右两个孩子节点的链接信息,自己要处理的数据流的头尾信息,如果是leaf节点,自己对应做出的预测是什么?驱动节点生成的结构:程序逻辑上是非leaf节点都要加入队列建立自己的孩子节点。
①建立root节点,使用这棵树的全部训练样本初始化root节点
② 将root 加入到驱动队列vec_0中
③ 检测驱动队列vec_0中有节点存在,逐个为所有的节点选择最优的数据流分割方案,保存最优的路径分割函数的参数,输出分割后的数据流(已经完成了重排序,排序总是一个焊好的功能),如果能并生成自己的左右孩子节点(构建好链接关系),使用分流的数据分别初始化孩子节点,leaf == false;如果当下节点不能生成孩子节点, leaf==true;
④检测vec_0中的所有节点,如果是非leaf节点,将孩子节点全部放入vec_1中,如果是leaf节点,依据该节点的所有数据流,生成节点标签Prediction,但是不加入vec;
⑤ vec_0 vec_1 地位交替,清空已经处理完的那个vec,作为下一层孩子节点加入训练的驱动结构,直到另一个vec也是空,只有leaf==false 的节点才会有子节点,才能把子节点加入到vec中继续对数据进行分流。
RT或者Random Foresrt引入结构化信息
pixel - image patch - feature patch - RF - label patch - label ;
所谓的结构化信息,在这篇文章中指的是上下像素类别的位置信息,原来对于一个点pt(x,y),取出局部patch,计算feature vector ,按照pt对应的类别标签完成训练,训练样本是从Rn -> R ; 机构化的信息,类别不再是real value ,而是一个具有相互制约关系的vector,反应在图像上就是像素与其邻域像素的各自类别的对应关系信息,从feature patch ==> label 变化 feature patch ==》 label patch ;输出的变化带来的问题
① 对于分流评价的指标:information gain 的计算
② 训练过程中随机树的leaf节点的输出怎样计算:从leaf的数据流中找出最好的一个作为标签
③ 使用过程中,一个样本使用RF,每一个RT都会有个标签输出,怎样进行merge model
④ 一个像素点pt 使用Structured RF 后会产生一个label patch , 相邻位置的像素点pt-0也会产生label patch 来影响当前节点的label,怎样确定!
源码分析
虚函数的使用
模板类的构建与使用
面型对象的多态机制,什么时候 以及为什么使用多态
怎样阅读C++的类库?流程!
基于RT实现自己的解决方案,需要考虑哪些问题?
文章信息与源码来源
<Structured Class-Labels in Random Forests for Semantic Image Labelling> http://www.dsi.unive.it/~srotabul/#publications
Random Tree 类库设计分析
看完作者的源码,对C++的继承与派生,派生,更为深刻的理解。基类指定规则,固定好程序的算法框架或者是逻辑流程,派生类则给出一个具体的细节化的方案,使用什么样的数据类型,具体每一步的执行过程怎么定义;使用模板类给出抽象化的类型,使用virtual函数给出抽象的流程,比如在RT中的split虚函数,作为构树过程中很重要的一环,基类指定了这个函数实现的是对当前节点的数据分流功能,规定函数的输入是当前节点Node,返回值是数据的分流结果,左右数据流的统计信息,当前节点的路径选择函数的参数,但是至于怎样的实现,是在派生类中完成的。
几个具体的RT成员分析:RT在设计过程中更加注重的是构树这个过程以及树本身的物理含义,从数据结构的角度分析:与上一篇文章相似,节点在构树过程中需要保存哪些信息,路径选择函数的参数信息,自己的左右两个孩子节点的链接信息,自己要处理的数据流的头尾信息,如果是leaf节点,自己对应做出的预测是什么?驱动节点生成的结构:程序逻辑上是非leaf节点都要加入队列建立自己的孩子节点。
①建立root节点,使用这棵树的全部训练样本初始化root节点
② 将root 加入到驱动队列vec_0中
③ 检测驱动队列vec_0中有节点存在,逐个为所有的节点选择最优的数据流分割方案,保存最优的路径分割函数的参数,输出分割后的数据流(已经完成了重排序,排序总是一个焊好的功能),如果能并生成自己的左右孩子节点(构建好链接关系),使用分流的数据分别初始化孩子节点,leaf == false;如果当下节点不能生成孩子节点, leaf==true;
④检测vec_0中的所有节点,如果是非leaf节点,将孩子节点全部放入vec_1中,如果是leaf节点,依据该节点的所有数据流,生成节点标签Prediction,但是不加入vec;
⑤ vec_0 vec_1 地位交替,清空已经处理完的那个vec,作为下一层孩子节点加入训练的驱动结构,直到另一个vec也是空,只有leaf==false 的节点才会有子节点,才能把子节点加入到vec中继续对数据进行分流。
RT或者Random Foresrt引入结构化信息
pixel - image patch - feature patch - RF - label patch - label ;
所谓的结构化信息,在这篇文章中指的是上下像素类别的位置信息,原来对于一个点pt(x,y),取出局部patch,计算feature vector ,按照pt对应的类别标签完成训练,训练样本是从Rn -> R ; 机构化的信息,类别不再是real value ,而是一个具有相互制约关系的vector,反应在图像上就是像素与其邻域像素的各自类别的对应关系信息,从feature patch ==> label 变化 feature patch ==》 label patch ;输出的变化带来的问题
① 对于分流评价的指标:information gain 的计算
② 训练过程中随机树的leaf节点的输出怎样计算:从leaf的数据流中找出最好的一个作为标签
③ 使用过程中,一个样本使用RF,每一个RT都会有个标签输出,怎样进行merge model
④ 一个像素点pt 使用Structured RF 后会产生一个label patch , 相邻位置的像素点pt-0也会产生label patch 来影响当前节点的label,怎样确定!
源码分析
虚函数的使用
模板类的构建与使用
面型对象的多态机制,什么时候 以及为什么使用多态
怎样阅读C++的类库?流程!
基于RT实现自己的解决方案,需要考虑哪些问题?
相关文章推荐
- HashMap与Hashtable(二)
- Unity3d自带寻路Navmesh三大组件
- [javascript权威指南][阅读笔记]五
- 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )
- 12.Which is the correct description of a pinned buffer in the database buffer cache?
- firefox等浏览器清除a标签点击后的虚线问题
- React Native点击按钮修改页面
- 莫比乌斯反演入门 HDOJ 1695:GCD 、BZOJ 2301: [HAOI2011]Problem b
- nginx负载均衡
- poj3254 Corn Fields (状压dp)
- 随机森林算法的源码分析(一)
- [noip模拟题]合理种植
- Codeforces Round #362 (Div. 2) B 模拟
- 指针数组 数组指针 指针函数 函数指针
- UVA 10916 Factstone Benchmark
- 如何在 Linux 上永久挂载一个 Windows 共享
- Android studio libpng error: Not a PNG file
- 运算符和表达式
- jzoj 1568. 【普及模拟】石子游戏 解题报告
- csu 1110 RMQ with Shifts 线段树