决策树

来源:互联网 发布:python 日期时间差 编辑:程序博客网 时间:2024/06/05 15:48

最近在学习周志华的《机器学习》一书,一直想着以写BLOG的方式记录一下学习感悟,并趁此机会与大家一起分享交流。今天学习的主要内容是决策树。


基本思想

决策树是一种常见的机器学习方法。其学习目的是从给定训练数据集学得一个模型用以对新的数据集进行分类。一般的,一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。根结点包含全部训练样本,叶结点对应决策结果,根结点和每个内部结点对应于一个属性测试,每个结点包含的样本集根据属性测试结果被划分到子结点中。从根结点到每个叶结点的路径对应了一个具体的判定测试序列。

决策树的生成是一个递归过程。在决策树的基本算法中,有三种情形会导致递归返回:
(1)当前结点包含的样本全都属于同一类;
(2)当前属性集为空,或是所有样本在所有属性集上的取值相同;
(3)当前包含的样本集合为空,无法进行划分。  

在(2)情形下,我们把当前结点标记为叶结点,并将其类别设定该结点所含样本最多的类别;在(3)情形下,同样把当前结点标记为叶结点,但将其类别设定为父结点中所含样本最多的类别。(2)的情形利用了当前结点的后验分布,而(3)的情形直接沿用了父结点的样本分布作为当前结点的先验分布。

划分属性选择

决策树生长过程中面临最优属性选择问题。一般来说,随着划分的不断进行,我们希望决策树的分支结点包含的样本尽可能多的属于同一类别,也就是结点的“纯度”越来越高。衡量结点纯度的方法有三种:

  • 信息增益 : 先给出“信息熵”的定义,信息熵是度量样本纯度最常用的一种指标,信息熵越小样本纯度越高。假设当前样本集合D中第k类样本所占比例为:
    pk(k=1,2,...,|γ|),

    则D的信息熵计算方法为:
    Ent(D)=k=1|γ|pklog2pk.
    假设属性a有V个分支结点,第v个分支结点的样本数为Dv,我们把信息增益定义为:
    Gain(D,a)=Ent(D)v=1V|Dv||D|Ent(Dv).
    信息增益越大,说明以属性a作为划分结点得到的子样本纯度越高。ID3算法就是基于信息增益选择划分属性的一个代表。
  • 增益率: 信息增益准则对可取值数目较多的属性有所偏好,当属性取值较多,而每种取值下的样本量较少时,信息增益虽然很高但我们不会按照该属性进行划分(举个例子,某个属性有10个分支,每个分支仅含1个样本,这些分支结点的纯度已达到最大,但是这样的划分并不具有泛化能力,无法对新样本进行有效预测)。为了减少信息增益的偏好带来的不利影响,提出改用“增益率”来选择最优属性划分。
    Gain_ratio(D,a)=Gain(D,a)IV(a),
    其中,
    IV(a)=v=1V|Dv||D|log2|Dv||D|
    称为属性a的固有值。属性a的可取值越多(V越大),则IV(a)越大。因此,增益率准则对可取值较少的属性有偏好。C4.5算法先从划分属性中选择信息增益高于平均水平的属性,再从中选择增益率最大的。
  • 基尼系数: 数据集的纯度还可用基尼指数来度量,基尼指数越小数据集的纯度越高,数据D的基尼指数定义为:
    Gini(D)=1k=1|γ|p2k
    属性a的基尼指数定义为:
    Gini_index(D,a)=v=1V|Dv||D|Gini(Dv).
    该式中以样本大小作为权重项,基尼指数越小,样本纯度越高。CART算法就是基于基尼指数最小来选择划分属性。

剪枝方法

剪枝是决策树学习算法对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,对结点划分时会选择相同的属性,从而导致决策树的分支过多,决策树非常复杂,且可能由于将训练样本学得“太好了”,以至于把训练集自身的一些随机特性当做一般性质导致过拟合。过拟合的决策树在对新样本预测时的结果可能会非常差。因此,我们需要采用剪枝的方法来降低过拟合的风险。

决策树的剪枝方法有“预剪枝”和“后剪枝”。预剪枝指在决策树生成过程种,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能的提升,那么久停止划分;后剪枝指先由训练集生成一颗完整的数,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能够带来泛化性能的提升,则将该子树替换为叶结点。

  • 预剪枝:在树生成过程中进行剪枝。根据划分前后验证集在结点上的精度大小变化决定继续划分还是停止。若增大则继续划分,若减小则停止划分。
    优点:决策树的很多分支都没有“展开”,可以有效降低过拟合的风险,减少了决策树生成的时间成本。
    缺点:可能导致决策树过早停止生长,使得决策树还未完全学习到数据集的规律,带来“欠拟合”的风险。

  • 后剪枝:先从训练集生成一颗完整的决策树,对生成后的决策树进行自底向上的剪枝。
    优点:比预剪枝保留了更多的分支,后剪枝决策树的欠拟合风险小,泛化能力往往优于预剪枝决策树。
    缺点:由于没有先决条件限制决策树的生长,决策树生成的时间成本较大。

补充内容

  1. 当测试属性不再是离散变量而是连续变量时,我们可以通过将连续变量离散化,仍然以信息增益或基尼系数来选择最优划分点。
  2. 当样本出现某些属性缺失时,可以先用非缺失样本计算在该属性上的信息增益,并乘以非属性缺失样本占总样本的权重,作为真正的信息增益来选择划分属性。对于一个在该属性上缺失的样本,我们令其以不同的权重划入不同的子结点中,而该权重就是每个子结点所含样本占总样本的比例。
  3. 当学习任务的分类边界比较复杂时,属性测试的时间成本会非常高。采用“多变量决策树”可以实现斜划分,此类决策树的非叶节点不再针对某一个属性,而是对属性的线性组合进行测试。此时我们不再为每个非叶结点寻找一个最优划分属性,而是建立一个合适的线性分类器来达到划分的目的。

参考资料
《机器学习》 周志华

原创粉丝点击