决策树算法

学习打卡内容:

  • 理解决策树以及决策树的几种算法
    • 总结决策树模型结构
    • 理解决策树递归思想
    • 学习信息增益
    • 学习信息增益率
    • 学习ID3算法优缺点
    • 学习C4.5算法优缺点
    • 理解C4.5算法在ID3算法上有什么提升
    • 学习C4.5算法在连续值上的处理
    • 学习决策树如何生成
  • 代码实现决策树
    • 划分数据集代码
    • 选择最好的数据集划分方式代码
    • 创建树的函数代码

 

决策树:

      决策树(decision tree)是一种基本的分类与回归方法,在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快

  • 决策树定义:

    (分类)决策树模型是一种描述对实例进行分类的树形结构,由节点和有向边组成。节点有两种类型:内部结点和叶节点。内部结点表示一个特征或属性,叶节点表示一个类。在分类过程中,先从根节点开始,对实例的某个特征进行测试,根据测试结果将其分配到子节点,该子节点对应其特征的取值,如此递归下去,直到达到叶节点,也就是找到其分类。

  • 决策树的理解:

      我们可以将决策树看成if-then规则的集合,方便理解,决策树的内部结点(对应某个属性)对应着规则的条件,而叶节点的类对应着规则的结论。决策树的路径有一个重要性质:互斥且完备。即,每一个实例都被一条路径或一条规则所覆盖,且只被一条路径或规则覆盖。

  • 决策树学习(递归生成):      

       决策树学习本质上是从训练数据集中归纳出一组分类规则,我们选择的条件概率模型应该不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。决策树学习的损失函数通常是正则化的极大似然函数,决策树学习的策略是以损失函数为目标函数的最小化。从所有可能的决策树中选取最优决策树是NP完全问题,现实中常采用启发式方法,近似求解这一最优化问题,这样得到的决策树是次最优(sub-optimal)的。

       决策树递归生成过程:先构建根节点,将所有训练数据放入,然后选择一个最优特征,按照最优特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些自己分到所对应的叶节点中去;否则对这些子集选取新的最优特征,继续对其进行分割构建相应的节点,如此递归的进行下去,直到所有的训练数据子集被基本正确分类或者没有合适的特征为止,此时所有子集都被分到叶节点上,都有了自己的分类,这就生成了决策树。

  • 决策树剪枝: 

       再生成了决策树之后,可能发生过拟合现象,我们需要对已经生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。具体来说,就是去掉过于细分的叶节点,使其回退到父节点,甚至更高的节点,然后将父节点或者更高的节点改为新的叶节点

       可以看出,决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程.由于决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型.决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择.决策树的生成只考患局部最优,相对地,决策树的剪枝则考虑全局最优.
       决策树学习常用的算法有ID3、C4.5与CART,下面结合这些算法分别叙述决策树学习的特征选择、决策树的生成和剪枝过程.

 

ID3算法:

  • 背景概要

  1976年-1986年,J.R.Quinlan给出ID3算法原型并进行了总结,确定了决策树学习的理论。这可以看做是决策树算法的起点。1993,Quinlan将ID3算法改进成C4.5算法,称为机器学习的十大算法之一。ID3算法的另一个分支是CART(Classification adn Regression Tree, 分类回归决策树),用于预测。这样,决策树理论完全覆盖了机器学习中的分类和回归两个领域。

 

    如前面一篇博文所示(熵的理解),我们已经知道了信息熵的概念:表示随机变量不确定性的度量。那么接下来就要介绍信息增益(information gain)的概念:表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

  • 信息增益:特征A队训练数据集D的信息增益g(D,A),定义为集合D的(经验)熵H(D)与特征A给定条件下D的(经验)条件熵H(D | A)之差,即

                                          g(D,A)= H(D)- H(D | A)

ID3算法就是以信息增益为度量来选取最优节点并递归构建决策树的算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止.最后得到一个决策树. ID3 相当于用极大似然法进行概率模型的选择.

 

  • ID3算法优缺点:

优点是十分简单易行,缺点是:

    1.ID3没有考虑连续特征

    2.ID3采用信息增益大的特征优先建立决策树的节点。在相同条件下,取值比较多的特征比取值少的特征信息增益大。

    3.ID3算法对于缺失值的情况没有做考虑

    4.ID3算法只有树的生成,所以该算法生成的树容易产生过拟合

 

为减少信息增益对可取值数目较多的属性的偏好,C4.5算法应运而生~

C4.5算法:

          C4.5算法与ID3的不同就是C4.5算法是用增益率(gain ratio) 而不是信息增益来选择最优划分属性的。

          增益率度量是用前面的信息增益Gain(S,A)和分裂信息度量SplitInformation(S,A)来共同定义的,如下所示:

                                  

       其中S1到Sc是c个值的属性A分割S而形成的c个样例子集。注意分裂信息实际上就是S关于属性A的各值的熵。这与我们前面对熵的使用不同,在那里我们只考虑S关于学习到的树要预测的目标属性的值的熵。

       请注意,分裂信息项阻碍选择值为均匀分布的属性。例如,考虑一个含有n个样例的集合被属性A彻底分割(译注:分成n组,即一个样例一组)。这时分裂信息的值为log2n。相反,一个布尔属性B分割同样的n个实例,如果恰好平分两半,那么分裂信息是1。如果属性A和B产生同样的信息增益,那么根据增益比率度量,明显B会得分更高。

       使用增益比率代替增益来选择属性产生的一个实际问题是,当某个Si接近S(|Si|»|S|)时分母可能为0或非常小。如果某个属性对于S的所有样例有几乎同样的值,这时要么导致增益比率未定义,要么是增益比率非常大。为了避免选择这种属性,我们可以采用这样一些启发式规则,比如先计算每个属性的增益,然后仅对那些增益高过平均值的属性应用增益比率测试(Quinlan 1986)。

      需要注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

      接下来是C4.5算法的另一个特性:对连续值的处理。

      最简单的策略是采用二分法对连续属性进行处理,这正是C4.5采用的机制。

       具体操作:

       给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大排序,然后基于划分点t了可以将数据集划为两部分,取值不大于t和大于t的样本。t的取值可以为: 

                                      Ta = \left \{ {\frac{a^{i}+a^{i1}}{2}}\mid 1<=i<=n-1 \right \}

即把区间[a^{i},a^{i+1})的中位点,也就是相近两个数据的均值作为候选划分点,然后我们就可以像离散属性值一样来考察这些划分点,,然后就是根据信息增益公式计算最大增益,进而选取最优划分t值。

信息增益的公式则变为:

                      Gain(D,a) =Gain(D,a,t)=Ent(D)-\sum \frac{D^{\lambda }_{t}}{D}Ent(D^{\lambda }_{t})

tip:与离散属性不同,若当前节点划分属性为连续属性,该属性还可作为其后代节点的划分属性。

C4.5算法的改进:

  1. 在树构造过程中进行剪枝,在构造决策树的时候,那些挂着几个元素的节点,不考虑最好,不然容易导致过拟合。
  2. 能够对非离散数据进行处理。
  3. 能够对不完整数据进行处理

 

之前我们已经实现过ID3算法,下面给出C4.5算法的实现以及绘制决策树的代码链接:

https://github.com/Starscoder/Machine_LearningHomework/blob/master/decisionTree/myDecisonTree.ipynb

 

 

参考资料:

《统计学习方法》——李航

《机器学习》——周志华

https://blog.csdn.net/fanbotao1209/article/details/44776039

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值