决策树

原创 2016年06月02日 12:02:33

决策树

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树的构造

决策树的构造

  不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

  构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:

  1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。

  2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。

  3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

  构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分成个体类的启发式方法,它决定了拓扑结构及分裂点split_point的选择。

  属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略。这里介绍ID3和C4.5两种常用算法。

DTree如何避免过拟合

  1. 停止增长,当数据的分裂不符合统计学意义

  2. 生成完全树,然后剪枝

    a. 在训练数据上(静态剪枝),置信度评估性能
    b. 在独立的验证数据集上评估性能

ID3决策树的优缺点:

ID3在选择重要特征的时候利用了信息增益的概念,算法的基础理论清晰,使得算法简单,该算法的计算时间是例子个数,特征个数,节点个数之积的线性函数。而且搜索空间是完全的假设空间,目标函数必须在搜索空间中,不存在无解的危险。全盘适用训练数据,而不是像候选剪除法那样逐个考虑训练例子。
ID3消除噪声
可以利用全部训练样例的统计性质进行决策,从而抵抗噪声。
缺点:
信息增益的计算依赖于属性值数目较多的属性,这样不太合理,一种简单的办法就是对属性分解,可以把属性值统化为二值数型。
利用信息增益作为属性选取量存在一个假设,即训练样例集中正反例比例与实际问题领域的正反例比例相同。
ID3对噪声比较敏感。ID3定义训练例子中的错误就是噪声,它由两个问题产生:(1)属性值选取错误(2)类指定错误 当训练集合增加时,ID3决策树也会随着变化,在建树过程中的各属性的互信息也会随着例子的增加改变,从而决策树也会变化,这对逐渐学习不够方便。

ID3
设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:
这里写图片描述
其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量。

  现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:

这里写图片描述
而信息增益即为两者的差值:
gain(A)=info(D)-infoA(D)
例子
ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。下面我们继续用SNS社区中不真实账号检测的例子说明如何使用ID3算法构造决策树。为了简单起见,我们假设训练集合包含10个元素:
这里写图片描述
其中s、m和l分别表示小、中和大。

  设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。

Info(D)=- 7/10*log2(7/10)-3/10*log2(3/10)=0.879
InfoL(D)=3/10*(-0/3*log2(0/3)-0/3*log2(0/3)-3/3*log2(3/3))+4/10*(-1/4*log2(1/4)-3/4*log2(3/4))+3/10*(-1/3log2(1/3)-2/3*log2(2/3))=0.603
GainL(D)=0.879-0.603=0.276
因此日志密度的信息增益是0.276。

  用同样方法得到H和F的信息增益分别为0.033和0.553。

  因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果如下图表示:

这里写图片描述
在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。

  上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。对于特征属性为连续值,可以如此使用ID3算法:

  先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

如果属性用完了怎么办
在决策树构造过程中可能会出现这种情况:所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。

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

决策树算法学习

决策树是一个类似于流程图的树结构;其中,每个内部结点表示在一个属性上的测试,每个分枝代表一个测试输出,而每个树叶结点代表类或类分布。树的最顶层结点是根结点。一棵典型的判定树如下图。这是一个用于预测不同...
  • sealyao
  • sealyao
  • 2011年06月08日 08:23
  • 10041

决策树

决策树决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策...
  • TH_NUM
  • TH_NUM
  • 2016年06月02日 12:02
  • 860

决策树

决策树算法比较   ID3 C4.5 CART(分类) CART(回归) 树类型 多叉树 多叉树 二叉树 二叉树 特征选择 信息增益(熵) 信息...
  • webzjuyujun
  • webzjuyujun
  • 2015年11月05日 19:23
  • 1944

决策树剪枝算法

剪枝作为决策树后期处理的重要步骤,是必不可少的。没有剪枝,就是一个完全生长的决策树,是过拟合的。需要去掉一些不必要的节点以使得决策树模型更具有泛化能力。...
  • yujianmin1990
  • yujianmin1990
  • 2015年11月16日 13:36
  • 12245

决策树—学习心得

1、先来个正式的定义:决策树是一个树结构(可以是二叉树或非二叉树)。其每个飞叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过...
  • zhangyu132
  • zhangyu132
  • 2016年07月15日 15:15
  • 1230

决策树

附转载链接:http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html 算法原理 决策树(Decision Tree)是一...
  • hszzjs
  • hszzjs
  • 2017年10月27日 17:19
  • 254

分类算法之决策树

一、算法 Key points: 决策树是一个分类算法,分类结果是离散值(对应输出结果是连续值的回归算法);有监督的分类算法;是一种贪婪算法,生成的每一步都是局部最优值容易over fit...
  • android_asp
  • android_asp
  • 2013年08月23日 13:08
  • 1680

6种比较排序和决策树

回顾比较排序 相信阅读过前面5篇博文的童鞋们已经发现了“在排序的最终结果中,各元素的次序依赖于它们之间的比较”。于是乎,这类排序算法被统称为”比较排序“。 比较排序是通过一个单一且抽象的比...
  • gdut2015go
  • gdut2015go
  • 2015年06月06日 19:05
  • 1440

决策树的数学原理

说到决策树,大家肯定不陌生,由于其结构简单,学习成本低,且可解释性强,有着广泛的应用。 因此各类书籍、技术博客都有介绍,且深入浅出、图文并茂、生动形象。   鉴于已经有很多带图的博客介绍决策树,这里就...
  • u011531384
  • u011531384
  • 2016年04月11日 11:55
  • 5939

C4.5 决策树

从网上看到的,写的真好,很细很全,留着 2012-09-13 17:20:32|  分类: 默认分类|字号 订阅 原文地址:C4.5决策树作者:yf...
  • zxdxyz
  • zxdxyz
  • 2012年12月03日 22:06
  • 9528
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:决策树
举报原因:
原因补充:

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