决策树

  1. 决策树是一种基本的分类与回归方法。这里主要讨论决策树用于分类。

  2. 决策树模型是描述对样本进行分类的树形结构。树由结点和有向边组成:

    • 内部结点表示一个特征或者属性。
    • 叶子结点表示一个分类。
    • 有向边代表了一个划分规则。
  3. 决策树从根结点到子结点的的有向边代表了一条路径。决策树的路径是互斥并且是完备的。

  4. 用决策树分类时,对样本的某个特征进行测试,根据测试结果将样本分配到树的子结点上。此时每个子结点对应该特征的一个取值。

    递归地对样本测试,直到该样本被划分叶结点。最后将样本分配为叶结点所属的类。

  5. 决策树的优点:可读性强,分类速度快。

  6. 决策树学习通常包括3个步骤:

    • 特征选择。
    • 决策树生成。
    • 决策树剪枝。

一、 原理

1.1 基本概念

  1. 决策树模型可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

  2. 决策树将特征空间划分为互不相交的单元,在每个单元定义一个类的概率分布,这就构成了一个条件概率分布。

    • 决策树的每一条路径对应于划分中的一个基本单元。

    • 设某个单元 内部有 个样本点,则它定义了一个条件概率分布

      • 单元上的条件概率偏向哪个类,则该单元划归到该类的概率较大。即单元的类别为:

      • 决策树所代表的条件概率分布由各个单元给定条件下类的条件概率分布组成。

  3. 决策树的学习目标是:根据给定的训练数据集构造一个决策树模型,使得它能够对样本进行正确的分类。

  4. 决策树最优化的策略是:损失函数最小化。决策树的损失函数通常是正则化的极大似然函数。

  5. 选择最优决策树的问题是个 NP 完全问题。一般采用启发式方法近似求解这个最优化问题,这时的解为次最优的。

  6. 决策树学习的算法通常递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类。

    这一过程对应着特征空间的划分,也对应着决策树的构建。

1.2 生成

  1. 决策树生成算法:

    • 构建根结点:将所有训练数据放在根结点。

    • 选择一个最优特征,根据这个特征将训练数据分割成子集,使得各个子集有一个在当前条件下最好的分类。

      • 若这些子集已能够被基本正确分类,则将该子集构成叶结点。
      • 若某个子集不能够被基本正确分类,则对该子集选择新的最优的特征,继续对该子集进行分割,构建相应的结点。
    • 如此递归下去,直至所有训练数据子集都被基本正确分类,或者没有合适的特征为止。

  2. 上述生成的决策树可能对训练数据有很好的分类能力,但是对于未知的测试数据却未必有很好要的分类能力,即可能发生过拟合的现象。

    • 解决的方法是:对生成的决策树进行剪枝,从而使得决策树具有更好的泛化能力。
    • 剪枝是去掉过于细分的叶结点,使得该叶结点中的子集回退到父结点或更高层次的结点并让其成为叶结点。
  3. 决策树的生成对应着模型的局部最优,决策树的剪枝则考虑全局最优。

  4. 如果学习任意大小的决策树,则可以将决策树算法视作非参数算法。但是实践中经常有大小限制(如限制树的高度、限制树的叶结点数量),从而使得决策树成为有参数模型。

二、 特征选择

  1. 特征选择的关键是:选取对训练数据有较强分类能力的特征。若一个特征的分类结果与随机分类的结果没有什么差别,则称这个特征是没有分类能力的。

  2. 通常特征选择的指标是:信息增益或者信息增益比。这两个指标刻画了特征的分类能力。

  3. 对于分布 ,熵为

    定义数据集 的经验熵为:

    其中:

    • 样本的类别分别为

    • 类别 的样本的数量为 ,所有样本的总数为

      因此有:

    • 是概率 的估计。

    • 就是熵 的估计。它刻画了数据集 中样本的类别分布情况。

  4. 对于特征 ,定义数据集 上的经验熵为:

    其中:

    • 特征 的取值范围为

    • 属性 的样本的数量为

      因此有:

    • 是概率 的估计。

    • 刻画了数据集 中的样本在属性 上的取值分布情况。

  5. 对于特征 ,其条件熵为:

    定义数据集 关于特征 的经验条件熵为:

    其中:

    • 属性 且类别为 的样本的数量为 ,所有样本的总数为

      因此有:

    • 是条件熵 的估计。它刻画了数据集 中,属性 中的那些样本中的类别的分布情况。

    • 是条件熵 的估计。

2.1 信息增益

  1. 特征 对训练数据集 的信息增益 定义为:集合 的经验熵 与关于特征 经验条件熵 之差。即:

    由于熵 也称作互信息,因此信息增益也等于训练数据集中类与特征的互信息。

  2. 决策树学习可以应用信息增益来选择特征。给定训练集 和特征

    • 经验熵 刻画了对数据集 进行分类的不确定性。
    • 经验条件熵 刻画了在特征 给定条件下,对数据集 分类的不确定性。
    • 信息增益 刻画了由于特征 的确定,从而使得对数据集 的分类的不确定性减少的程度。
  3. 不同的特征往往具有不同的信息增益。

    • 信息增益大的特征具有更强的分类能力 。
    • 如果一个特征的信息增益为0,则表示该特征没有什么分类能力。

2.2 信息增益比

  1. 以信息增益作为划分训练集的特征选取方案,存在偏向于选取值较多的特征的问题。

    公式 中:

    • 当极限情况下 ,特征 在每个样本上的取值都不同,即

      • 此时特征 将每一个样本都划分到不同的子结点。即:

      • 由于 ,因此有:

        即: 取值为 0 或者 1 。因此有:

      • 最终使得

    • 条件熵的最小值为 0,这意味着该情况下的信息增益达到了最大值。

      然而很显然这个特征 显然不是最佳选择,因为它并不具有任何分类能力。

  2. 可以通过定义信息增益比来解决该问题。

    特征 对训练集 的信息增益比 定义为:信息增益 与关于特征 的熵 之比:

    表征了特征 对训练集 的拆分能力。

    因为 只考虑样本在特征 上的取值,而不考虑样本的标记 ,所以这种拆分并不是对样本的分类。

  3. 信息增益比本质上是对信息增益乘以一个加权系数:

    • 当特征 的取值集合较大时,加权系数较小,表示抑制该特征。
    • 当特征 的取值集合较小时,加权系数较大,表示鼓励该特征。

三、生成算法

  1. 决策树有两种常用的生成算法:

    • ID3 生成算法。
    • C4.5 生成算法。
  2. ID3 生成算法和 C4.5 生成算法只有树的生成算法,生成的树容易产生过拟合:对训练集拟合得很好,但是预测测试集效果较差。

3.1 ID3 生成算法

  1. ID3 生成算法核心是在决策树的每个结点上应用信息增益准则选择特征,递归地构建决策树。

    • 从根结点开始,计算结点所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征划分出子结点。

    • 再对子结点递归地调用以上方法,构建决策树。

    • 直到所有特征的信息增益均很小或者没有特征可以选择为止,最后得到一个决策树 。

      如果不设置特征信息增益的下限,则可能会使得每个叶子都只有一个样本点,从而划分得太细。

  2. ID3 生成算法:

    • 输入:

      • 训练数据集
      • 特征集合
      • 特征信息增益阈值
    • 输出:决策树

    • 算法步骤:

      • 中所有样本均属于同一类 ,则 为单结点树,并将 作为该结点的类标记,算法终止。

      • ,则 为单结点树,将 中样本数最大的类 作为该结点的类标记,算法终止。

      • 否则计算 ,选择信息增益最大的特征

        • ,则置 为单结点树,将 中样本数最大的类 作为该结点的类标记,算法终止 。

        • ,则对 特征的每个可能取值 ,根据 划分为若干个非空子集

          中样本数最大的类作为该子集的标记,构建子结点。

      • 对第 个子结点, 以 为训练集, 以 为特征集,递归地调用前面的步骤来构建子树。

3.2 C4.5 生成算法

  1. C4.5 生成算法与 ID3 算法相似,但是 C4.5 算法在生成过程中用信息增益比来选择特征。

四、剪枝算法

  1. 决策树生成算法生成的树往往对于训练数据拟合很准确,但是对于未知的测试数据分类却没有那么准确。即出现过拟合现象。

    过拟合产生得原因是决策树太复杂。解决的办法是:对决策树剪枝,即对生成的决策树进行简化。

  2. 决策树的剪枝是从已生成的树上裁掉一些子树或者叶结点,并将根结点或者其父结点作为新的叶结点。

    剪枝的依据是:极小化决策树的整体损失函数或者代价函数。

  3. 决策树生成算法是学习局部的模型,决策树剪枝是学习整体的模型。即:生成算法仅考虑局部最优,而剪枝算法考虑全局最优。

4.1 原理

  1. 设树 的叶结点个数为 。设 为树的叶结点,该叶结点有 个样本点,其中属于 类的样本点有 个,

    这意味着:

    为叶结点 上的经验熵,令 为参数,则决策树 的损失函数定义为:

    其中:

    • 叶结点个数越多,表示决策树越复杂,则损失函数越大。
    • 叶结点经验熵越大,表示叶结点的样本类别分布很分散,则损失函数越大。
    • 叶结点经验熵还需要加权,权重为叶结点大小。即:越大的叶结点,其分类错误的影响越大。
  2. ,则:

    其中 为正则化项, 表示预测误差。

  3. 意味着 ,即每个结点 内的样本都是纯的,即单一的分类。

    决策树划分得越细致,则 的叶子结点越多。当叶结点的数量等于样本集的数量时,树 的每个叶子结点只有一个样本点。此时每个叶结点内的样本都是纯的,从而

    这样的决策树其实是没有什么实用价值的,所以必须使用正则化项来约束决策树的复杂程度。

  4. 参数 控制预测误差与模型复杂度之间的关系。

    • 较大的 会选择较简单的模型 。
    • 较小的 会选择较复杂的模型。
    • 只考虑对训练集的拟合,不考虑模型复杂度。
  5. 决策树剪枝的准则是:考虑当 确定时, 最小化。这等价于正则化的极大似然估计。

4.2 算法

  1. 决策树的剪枝算法:

    • 输入:

      • 生成算法产生的决策树
      • 参数
    • 输出: 修剪后的决策树

    • 算法步骤:

      • 对树 每个结点 ,计算其经验熵

      • 递归地从树的叶结点向上回退:

        设一组叶结点回退到父结点之前与之后的整棵树分别为 ,对应的损失函数值分别为 。若 , 则进行剪枝,将父结点变成新的叶结点。

      • 递归回退直到不能继续为止,得到损失函数最小的子树

五、CART 树

  1. CART:classfification and regression tree :学习在给定输入随机变量 条件下,输出随机变量 的条件概率分布的模型。

    • 它同样由特征选取、树的生成、剪枝组成。
    • 它既可用于分类,也可用于回归。
  2. CART 假设决策树是二叉树:

    • 内部结点特征的取值为 。其中:左侧分支取 ,右侧分支取
    • 它递归地二分每个特征,将输入空间划分为有限个单元。
  3. CART 树与ID3 决策树和 C4.5 决策树的重要区别:

    • CART 树是二叉树,而后两者是N 叉树。

      由于是二叉树,因此 CART 树的拆分不依赖于特征的取值数量。因此CART 树也就不像ID3 那样倾向于取值数量较多的特征。

    • CART 树的特征可以是离散的,也可以是连续的。

      而后两者的特征是离散的。如果是连续的特征,则需要执行分桶来进行离散化。

      CART 树处理连续特征时,也可以理解为二分桶的离散化。

  4. CART算法分两步:

    • 决策树生成:用训练数据生成尽可能大的决策树。
    • 决策树剪枝:用验证数据基于损失函数最小化的标准对生成的决策树剪枝。

5.1 CART 生成算法

  1. CART生成算法有两个生成准则:

    • CART 回归树:用平方误差最小化准则。
    • CART 分类树:用基尼指数最小化准则。

5.1.1 CART 回归树

5.1.1.1 划分单元和划分点
  1. 一棵CART 回归树对应着输入空间的一个划分,以及在划分单元上的输出值。

    设输出 为连续变量,训练数据集

    设已经将输入空间划分为 个单元 ,且在每个单元 上有一个固定的输出值 。则CART 回归树模型可以表示为:

    其中 为示性函数。

  2. 如果已知输入空间的单元划分,基于平方误差最小的准则,则CART 回归树在训练数据集上的损失函数为:

    根据损失函数最小,则可以求解出每个单元上的最优输出值 为 : 上所有输入样本 对应的输出 的平均值。

    即: ,其中 表示单元 中的样本数量。

  3. 问题是输入空间的单元划分是未知的。如何对输入空间进行划分?

    设输入为 维:

    • 选择第 和它的取值 作为切分变量和切分点。定义两个区域:
    • 然后寻求最优切分变量 和最优切分点 。即求解:

      其意义为:

      • 首先假设已知切分变量 ,则遍历最优切分点 ,则到:

        其中 分别代表区域 中的样本数量。

      • 然后遍历所有的特征维度,对每个维度找到最优切分点。从这些(切分维度,最优切分点) 中找到使得损失函数最小的那个。

  4. 依次将输入空间划分为两个区域,然后重复对子区域划分,直到满足停止条件为止。这样的回归树称为最小二乘回归树。

5.1.1.2 生成算法
  1. CART 回归树生成算法:

    • 输入:

      • 训练数据集
      • 停止条件
    • 输出: CART回归树

    • 步骤:

      • 选择最优切分维度 和切分点

        即求解:

      • 用选定的 划分区域并决定响应的输出值:

        其中 分别代表区域 中的样本数量。

      • 对子区域 递归地切分,直到满足停止条件。

      • 最终将输入空间划分为 个区域 ,生成决策树:

5.1.2 CART 分类树

5.1.2.1 基尼系数
  1. CART 分类树采用基尼指数选择最优特征。

  2. 假设有 个分类,样本属于第 类的概率为 。则概率分布的基尼指数为:

    基尼指数表示:样本集合中,随机选中一个样本,该样本被分错的概率。基尼指数越小,表示越不容易分错。

    样本被选错概率 = 样本被选中的概率 * 样本被分错的概率

  3. 对于给定的样本集合 ,设属于类 的样本子集为 ,则样本集的基尼指数为:

    其中 为样本总数, 为子集 的样本数量。

  4. 对于最简单的二项分布,设 ,则其基尼系数与熵的图形见下图。

    • 可以看到基尼系数与熵一样,也是度量不确定性的度量。

    • 对于样本集 越小,说明集合中的样本越纯净。

      entropy_and_gini

  5. 若样本集 根据特征 是否小于 而被分为两个子集: ,其中:

    则在特征 的条件下,集合 的基尼指数为:

    其中 为样本总数, 分别子集 的样本数量。它就是每个子集的基尼系数的加权和,权重是每个子集的大小(以子集占整体集合大小的百分比来表示)。

5.1.2.2 划分单元和划分点
  1. 一棵CART 分类树对应着输入空间的一个划分,以及在划分单元上的输出值。

    设输出 为分类的类别,是离散变量。训练数据集

    设已经将输入空间划分为 个单元 ,且在每个单元 上有一个固定的输出值 。则CART 分类树模型可以表示为:

    其中 为示性函数。

  2. 如果已知输入空间的单元划分,基于分类误差最小的准则,则CART 分类树在训练数据集上的损失函数为:

    根据损失函数最小,则可以求解出每个单元上的最优输出值 为 : 上所有输入样本 对应的输出 的众数。

    即:

  3. 问题是输入空间的单元划分是未知的。如何对输入空间进行划分?

    类似CART 回归树,CART 分类树遍历所有可能的维度 和该维度所有可能的取值 ,取使得基尼系数最小的那个维度 和切分点

    即求解: