决策树和opencv实现,随机森林,随机蕨

原创 2015年11月19日 00:05:45

决策树是怎么来的呢?Morgan and Sonquist ,提出的基于树的方法,叫做:automatic interaction detector AID ,(为了解决资料数据上下文的多变量非加性效应?)算了还是给原句吧,AID for handling multi-variate non-additive effects in the context of survey data。
决策树的几个特点:
1.处理异质数据。
2.对噪声数据鲁棒。
3.对离群点鲁棒。
4.是容易解释的,即使是对非统计专业的用户。
决策树是随机森林、boosting、bagging等的基础。
以下论点或摘自统计学习方法(李航),或自己理解。决策树是一种描述对实例进行分类的树形结构,决策树由结点(node)和有向边(direct edge)组成,结点有两种类型:内部节点(internal node)和叶节点(leaf node)。内部节点表示一个特征或属性,叶节点表示一个类别。
图示的话就摘一下大家通用的吧
这里写图片描述
可以看作在超平面的划分如下:
这里写图片描述
图片是这位仁兄的,谢谢你啦http://database.51cto.com/art/201407/444788.htm
这里还要重点介绍一下熵和信息增益、信息增益率的信息:
熵:概率论里边,熵是表示随机变量不确定性的度量。
假设X是一个取有限个值的随机变量,概率分布为:
这里写图片描述
则熵定义为:
这里写图片描述
条件熵:表示在已知随机变量X的条件下,随机变量Y的不确定性。
条件熵定义为:
这里写图片描述
还有互信息:互信息为Entropy(Y)-Conditional Entropy(Y|X)
决策树学习中的信息增益和训练数据集中类与特征的互信息是等价的。

正式开始决策树ID3的学习:
决策树的建立是通过信息增益准则选择特征:对训练数据集D,计算其每个特征的信息增益,选择信息增益大的那个特征。
在这里只能说统计学习方法确实适合学习,好一部分都是摘自它的,强烈推荐。
算了,直接给个例子吧。
这里写图片描述
怎么确立这个例子的决策树呢?
先对类别计算熵(这个熵也叫经验熵,也就是说知道这个水果是什么类别的,是经验):
这里写图片描述
然后呢,计算不同属性的条件熵(也叫经验条件熵),即:
Conditional Entropy(水果|颜色红)=这里写图片描述)=1,

Conditional Entropy(水果|颜色绿)=这里写图片描述=3/2,
Conditional Entropy(水果|颜色黄)=这里写图片描述=0。
Conditional Entropy(水果|颜色桔黄)=这里写图片描述=0。

Conditional Entropy(水果|颜色)=1/4×1+1/2×3/2+1/8×0+1/8×0=1
信息增益Gain(颜色)=9/4-1=5/4

同理求得Conditional Entropy(水果|形状)= 0.6207
Gain(形状)=9/4-0.6207=1.6239
Conditional Entropy(水果|轻重)=0.6887
Gain(轻重)=9/4-0.6887=1.5613
所以我们就选择形状作为第一个决策属性啦。
然后对形状为球,椭球,弯月的数据集分别计算信息增益,

这里写图片描述
椭球
这里写图片描述
这里写图片描述
弯月
这里写图片描述
然后分类:
最终结果,很好懂吧,只能说老师给的这个例子很好记,很帅:
这里写图片描述

决策树ID3的算法(摘自统计学习方法):
输入:训练数据集D,特征A,阈值ε;
输出:决策树T;
1.若D中所有实例属于同一类别C_k,则T为单结点树,并将类C_k作为该结点的类标记,返回T;
2.若A=∅,则T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T;(这个步骤我理解的意思是,如果分到最后没有属性可供继续计算作为结点,而且还有好几类,那就把当前剩余的数据集中实例最多的类作为当前类,极限假定只给了水果类别而没有属性,98个苹果,1个香蕉,一个桔子,那就把苹果作为这100个水果的类别)
3.否则,按照上边计算信息增益的方法计算A中各特征对D的信息增益,选择信息增益最大的特征A_g;
4.如果A_g的信息增益小于阈值ε,则置T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T(跟第3步差不多);
5.否则,对A_g的每一个可能的值a_i,依A_g=a_i将D分割为若干非空子集D_i,将D_i 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
6.对第i个子结点,以D_i为训练集,以A-{A_g}为特征集递归的调用1-5步,得到子树T_i,返回T_i。

以上还没完,还有缺点,缺点呢:决策树生成算法递归的产生决策树,直到不能继续为止,这样的树对训练数据很准确,但是过头了,也就是过拟合了,对测试数据误差到大了,决策树太复杂了,解决方法就是简化决策树,进行剪枝。
决策树的剪枝,这里先记下树的剪枝算法,至于理论推导,以后再更新吧(太晚了,准备睡觉。。。):
输入:生成算法产生的整个树T,参数a;
输出:修剪后的子树T_a;
1.计算每个节点的经验熵;
2.递归的从树的叶节点向上回缩,
设一组叶节点回缩到其父节点之前与之后的整体树分别为T_b和T_c,其对应的损失函数值分别为C_a(T_b)与C_a(T_c),如果C_a(T_c)<=C_a(T_b),则进行剪枝,即将父节点变为新的叶节点。
3.返回2,直到不能继续为止,得到损失函数最小的子树T_a。
注意:C_a(T_c)<=C_a(T_b)只需考虑到两个树的损失函数的差,其计算可以在局部进行,所以剪枝算法可以有一种动态规划的算法实现,opencv有决策树和随机森林的源码,但是是CART的,源码在安装opencv后XXX\sources\modules\ml\src里的rtrees.cpp和tree.cpp和XXX\sources\modules\ml\include\opencv2\ml里的ml.hpp里,只是里边变量太多,得慢慢来,所以先放着,慢慢更新吧。
下一篇介绍一下C4.5和随机森林吧,随机蕨,CART等吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

初探随机蕨(Random Ferns)

最近在做人脸对齐的时候,看到两篇famous的文章《Face Alignment at 3000 FPS via Regressing Local Features》以及《Face Alignment...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

随机蕨(random ferns)简介

之前看到的TLD代码中里机器学习的部分就是用的这个方法。不过TLD作者在论文中实现使用的是random forest,不过归到底,random forest和random ferns都是一种东西。 ...

随机蕨分类器

初探随机蕨(Random Ferns)

[论文阅读]随机蕨:FAST Key Points Recognition Using Random Ferns

论文阅读,记录一下自己阅读论文的收获,如有谬误,希望能得到指正! -------------------------------------------------------------------...

决策树(八)--随机森林及OpenCV源码分析

原文: http://blog.csdn.net/zhaocj/article/details/51580092 一、原理 随机森林(Random Forest)的思想最早是由Ho于1995年首次提出...

随机决策森林——OpenCV类CvRTrees使用实例

本文介绍:OpenCV机器学习库MLL中随机森林Random Trees的使用 参考文献: 1.Breiman, Leo (2001). "Random Forests". Machine ...

OpenCV中随机森林的实现与字符识别例子

之前一篇文章简单介绍了随机森林,并且给出来了一些matlab的随机森林的资源...

随机森林算法原理及OpenCV应用

随机森林算法是机器学习、计算机视觉等领域内应用仍为广泛的一个算法、它不仅可以用来做分类(包括二分类和多分类),也可用来做回归预测,也可以作为一种数据降维的手段。 在随机森林中,将生成很多的决策树,...
  • dcrmg
  • dcrmg
  • 2016年11月04日 23:43
  • 1283

使用OpenCV 随机森林与GBDT

随机森林顾名思义,是用随机的方式建立一个森林。简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的。对于每棵树,它们使用的训练集是从总的训...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:决策树和opencv实现,随机森林,随机蕨
举报原因:
原因补充:

(最多只允许输入30个字)