五、CART 树

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

    • 它同样由特征选取、树的生成、剪枝组成。
    • 它既可用于分类,也可用于回归。
  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 树 - 图3 为连续变量,训练数据集 五、CART 树 - 图4

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

    五、CART 树 - 图9

    其中 五、CART 树 - 图10 为示性函数。

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

    五、CART 树 - 图11

    根据损失函数最小,则可以求解出每个单元上的最优输出值 五、CART 树 - 图12 为 : 五、CART 树 - 图13 上所有输入样本 五、CART 树 - 图14 对应的输出 五、CART 树 - 图15 的平均值。

    即:五、CART 树 - 图16 ,其中 五、CART 树 - 图17 表示单元 五、CART 树 - 图18 中的样本数量。

  3. 定义 五、CART 树 - 图19 上样本的方差为 五、CART 树 - 图20,则有:五、CART 树 - 图21 。则CART 回归树的训练集损失函数重写为:五、CART 树 - 图22 ,其中 五、CART 树 - 图23 为训练样本总数。

    定义样本被划分到 五、CART 树 - 图24 中的概率为 五、CART 树 - 图25,则 五、CART 树 - 图26 。由于 五、CART 树 - 图27 是个常数,因此损失函数重写为:

    五、CART 树 - 图28

    其物理意义为:经过输入空间的单元划分之后,CART 回归树的方差,通过这个方差来刻画CART 回归树的纯度。

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

    设输入为 五、CART 树 - 图29 维: 五、CART 树 - 图30

    • 选择第 五、CART 树 - 图31五、CART 树 - 图32 和它的取值 五、CART 树 - 图33 作为切分变量和切分点。定义两个区域:

    五、CART 树 - 图34

    • 然后寻求最优切分变量 五、CART 树 - 图35 和最优切分点 五、CART 树 - 图36 。即求解:

      五、CART 树 - 图37

      其意义为:

      • 首先假设已知切分变量 五、CART 树 - 图38 ,则遍历最优切分点 五、CART 树 - 图39,则到:

        五、CART 树 - 图40

        其中 五、CART 树 - 图41五、CART 树 - 图42 分别代表区域 五、CART 树 - 图43五、CART 树 - 图44 中的样本数量。

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

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

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

    • 输入:

      • 训练数据集 五、CART 树 - 图45
      • 停止条件
    • 输出: CART回归树 五、CART 树 - 图46

    • 步骤:

      • 选择最优切分维度 五、CART 树 - 图47 和切分点 五、CART 树 - 图48

        即求解:

      五、CART 树 - 图49

      • 用选定的 五、CART 树 - 图50 划分区域并决定响应的输出值:

        五、CART 树 - 图51

        其中 五、CART 树 - 图52五、CART 树 - 图53 分别代表区域 五、CART 树 - 图54五、CART 树 - 图55 中的样本数量。

      • 对子区域 五、CART 树 - 图56 递归地切分,直到满足停止条件。

      • 最终将输入空间划分为 五、CART 树 - 图57 个区域 五、CART 树 - 图58,生成决策树:五、CART 树 - 图59

5.1.2 CART 分类树

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

  2. 假设有 五、CART 树 - 图60 个分类,样本属于第 五、CART 树 - 图61 类的概率为 五、CART 树 - 图62 。则概率分布的基尼指数为:

    五、CART 树 - 图63

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

    样本被选错概率 = 样本被选中的概率 五、CART 树 - 图64 * 样本被分错的概率 五、CART 树 - 图65

  3. 对于给定的样本集合 五、CART 树 - 图66,设属于类 五、CART 树 - 图67 的样本子集为 五、CART 树 - 图68,则样本集的基尼指数为:

    五、CART 树 - 图69

    其中 五、CART 树 - 图70 为样本总数, 五、CART 树 - 图71 为子集 五、CART 树 - 图72 的样本数量。

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

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

    • 对于样本集 五、CART 树 - 图74五、CART 树 - 图75 越小,说明集合中的样本越纯净。

      entropy_and_gini

  5. 若样本集 五、CART 树 - 图77 根据特征 五、CART 树 - 图78 是否小于 五、CART 树 - 图79 而被分为两个子集: 五、CART 树 - 图80五、CART 树 - 图81,其中:

    五、CART 树 - 图82

    则在特征 五、CART 树 - 图83 的条件下,集合 五、CART 树 - 图84 的基尼指数为:

    五、CART 树 - 图85

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

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

    设输出 五、CART 树 - 图89 为分类的类别,是离散变量。训练数据集 五、CART 树 - 图90

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

    五、CART 树 - 图95

    其中 五、CART 树 - 图96 为示性函数。

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

    五、CART 树 - 图97

    根据损失函数最小,则可以求解出每个单元上的最优输出值 五、CART 树 - 图98 为 : 五、CART 树 - 图99 上所有输入样本 五、CART 树 - 图100 对应的输出 五、CART 树 - 图101 的众数。

    即:五、CART 树 - 图102

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

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

    即求解:五、CART 树 - 图107

5.1.2.3 生成算法
  1. CART 分类树的生成算法:

    • 输入:

      • 训练数据集 五、CART 树 - 图108
      • 停止计算条件
    • 输出: CART 决策树

    • 步骤:

      • 选择最优切分维度 五、CART 树 - 图109 和切分点 五、CART 树 - 图110

        即求解:五、CART 树 - 图111

        它表示:遍历所有可能的维度 五、CART 树 - 图112 和该维度所有可能的取值 五、CART 树 - 图113 ,取使得基尼系数最小的那个维度 五、CART 树 - 图114 和切分点 五、CART 树 - 图115

      • 用选定的 五、CART 树 - 图116 划分区域并决定响应的输出值:

        五、CART 树 - 图117

        其中 五、CART 树 - 图118五、CART 树 - 图119 分别代表区域 五、CART 树 - 图120五、CART 树 - 图121 中的样本数量。

      • 对子区域 五、CART 树 - 图122 递归地切分,直到满足停止条件。

      • 最终将输入空间划分为 五、CART 树 - 图123 个区域 五、CART 树 - 图124,生成决策树:五、CART 树 - 图125

5.1.3 其它讨论

  1. CART 分类树和CART 回归树通常的停止条件为:

    • 结点中样本个数小于预定值,这表示树已经太复杂。
    • 样本集的损失函数或者基尼指数小于预定值,表示结点已经非常纯净。
    • 没有更多的特征可供切分。
  2. 前面讨论的CART 分类树和CART 回归树都假设特征均为连续值。

    • 实际上CART 树的特征可以为离散值,此时切分区域定义为:

      五、CART 树 - 图126

    • 连续的特征也可以通过分桶来进行离散化,然后当作离散特征来处理。

5.2 CART 剪枝

  1. CART 树的剪枝是从完全生长的CART 树底端减去一些子树,使得CART 树变小(即模型变简单),从而使得它对未知数据有更好的预测能力。

5.2.1 原理

  1. 定义CART五、CART 树 - 图127 的损失函数为(五、CART 树 - 图128):五、CART 树 - 图129 。其中:

    • 五、CART 树 - 图130 为参数是 五、CART 树 - 图131 时树 五、CART 树 - 图132 的整体损失。
    • 五、CART 树 - 图133 为树 五、CART 树 - 图134 对训练数据的预测误差。
    • 五、CART 树 - 图135 为子树的叶结点个数。
  2. 对固定的 五、CART 树 - 图136 ,存在使 五、CART 树 - 图137 最小的子树,令其为 五、CART 树 - 图138 。可以证明 五、CART 树 - 图139 是唯一的。

    • 五、CART 树 - 图140 大时,五、CART 树 - 图141 偏小,即叶结点偏少。
    • 五、CART 树 - 图142 小时,五、CART 树 - 图143 偏大,即叶结点偏多。
    • 五、CART 树 - 图144 时,未剪枝的生成树就是最优的,此时不需要剪枝。
    • 五、CART 树 - 图145 时,根结点组成的一个单结点树就是最优的。此时剪枝到极致:只剩下一个结点。
  3. 令从生成树 五、CART 树 - 图146 开始剪枝。对 五、CART 树 - 图147 任意非叶结点 五、CART 树 - 图148 ,考虑:需不需要对 五、CART 树 - 图149 进行剪枝?

    • 五、CART 树 - 图150 为单结点树:因为此时只有一个叶结点,即为 五、CART 树 - 图151 本身,所以损失函数为:五、CART 树 - 图152
    • 五、CART 树 - 图153 为根的子树 五、CART 树 - 图154:此时的损失函数为: 五、CART 树 - 图155
  4. 可以证明:

    • 五、CART 树 - 图156 及充分小时,有 五、CART 树 - 图157。即此时倾向于选择比较复杂的 五、CART 树 - 图158,因为正则化项的系数 五、CART 树 - 图159 太小。
    • 五、CART 树 - 图160 增大到某个值时,有 五、CART 树 - 图161
    • 五、CART 树 - 图162 再增大时,有 五、CART 树 - 图163 。即此时倾向于选择比较简单的 五、CART 树 - 图164,因为正则化项的系数 五、CART 树 - 图165 太大。
  5. 五、CART 树 - 图166 ,此时 五、CART 树 - 图167五、CART 树 - 图168 有相同的损失函数值,但是 五、CART 树 - 图169 的结点更少。

    因此 五、CART 树 - 图170五、CART 树 - 图171 更可取,于是对 五、CART 树 - 图172 进行剪枝。

  6. 五、CART 树 - 图173 内部的每一个内部结点 五、CART 树 - 图174 ,计算 五、CART 树 - 图175

    它表示剪枝后整体损失函数增加的程度(可以为正,可以为负)。则有:

    五、CART 树 - 图176

    因为 五、CART 树 - 图177 是个内部结点,所以 五、CART 树 - 图178,因此有:

    • 五、CART 树 - 图179 时,五、CART 树 - 图180 ,表示剪枝后,损失函数增加。
    • 五、CART 树 - 图181 时,五、CART 树 - 图182 ,表示剪枝后,损失函数不变。
    • 五、CART 树 - 图183 时,五、CART 树 - 图184 ,表示剪枝后,损失函数减少。
  7. 五、CART 树 - 图185 内部的每一个内部结点 五、CART 树 - 图186 ,计算最小的 五、CART 树 - 图187

    五、CART 树 - 图188

    五、CART 树 - 图189 对应的内部结点为 五、CART 树 - 图190,在 五、CART 树 - 图191 内减去 五、CART 树 - 图192 ,得到的子树作为 五、CART 树 - 图193

    五、CART 树 - 图194 ,对于 五、CART 树 - 图195,有:五、CART 树 - 图196

    对于 五、CART 树 - 图197,有:

    • 对于 五、CART 树 - 图198 剪枝,得到的子树的损失函数一定是减少的。

      它也是所有内部结点剪枝结果中,减少的最多的。因此 五、CART 树 - 图199五、CART 树 - 图200 内的最优子树。

    • 对任意一个非 五、CART 树 - 图201 内部结点的剪枝,得到的子树的损失函数有可能是增加的,也可能是减少的。

      如果损失函数是减少的,它也没有 五、CART 树 - 图202 减少的多。

  8. 如此剪枝下去,直到根结点被剪枝。

    • 此过程中不断产生 五、CART 树 - 图203 的值,产生新区间 五、CART 树 - 图204
    • 此过程中不断产生 最优子树 五、CART 树 - 图205
    • 其中 五、CART 树 - 图206 是由 五、CART 树 - 图207 产生的、五、CART 树 - 图208 内的最优子树; 五、CART 树 - 图209 是由 五、CART 树 - 图210 产生的、五、CART 树 - 图211 内的最优子树;…
  9. 上述剪枝的思想就是用递归的方法对树进行剪枝:计算出一个序列 五、CART 树 - 图212,同时剪枝得到一系列最优子树序列 五、CART 树 - 图213 五、CART 树 - 图214五、CART 树 - 图215 时的最优子树。

  10. 上述剪枝的结果只是对于训练集的损失函数较小。

    • 需要用交叉验证的方法在验证集上对子树序列进行测试,挑选中出最优子树。

      交叉验证的本质就是为了挑选超参数 五、CART 树 - 图216

    • 验证过程:用独立的验证数据集来测试子树序列 五、CART 树 - 图217 中各子树的平方误差或者基尼指数。

      由于 五、CART 树 - 图218 对应于一个参数序列 五、CART 树 - 图219,因此当最优子树 五、CART 树 - 图220 确定时,对应的区间 五、CART 树 - 图221 也确定了。

5.2.2 算法

  1. CART剪枝由两步组成:

    • 从生成算法产生的决策树 五、CART 树 - 图222 底端开始不断的剪枝:

      • 每剪枝一次生成一个决策树 五、CART 树 - 图223

      • 这一过程直到 五、CART 树 - 图224 的根结点,形成一个子树序列 五、CART 树 - 图225

    • 用交叉验证的方法在独立的验证集上对子树序列进行测试,挑选中出最优子树。
  2. CART剪枝算法:

    • 输入:CART算法生成的决策树 五、CART 树 - 图226

    • 输出: 最优决策树 五、CART 树 - 图227

    • 算法步骤:

      • 初始化: 五、CART 树 - 图228

      • 自下而上的对各内部结点 五、CART 树 - 图229 计算 :五、CART 树 - 图230

      • 自下而上地访问内部结点 五、CART 树 - 图231 : 若有五、CART 树 - 图232 ,则进行剪枝,并确定叶结点 五、CART 树 - 图233 的输出,得到树 五、CART 树 - 图234

        • 如果为分类树,则叶结点 五、CART 树 - 图235 的输出采取多数表决法:结点 五、CART 树 - 图236 内所有样本的标记的众数。
        • 如果为回归树,则叶结点 五、CART 树 - 图237 的输出为平均法:结点 五、CART 树 - 图238 内所有样本的标记的均值。
      • 五、CART 树 - 图239

      • 五、CART 树 - 图240 不是由根结点单独构成的树,则继续前面的步骤。

      • 采用交叉验证法在子树序列 五、CART 树 - 图241 中选取最优子树 五、CART 树 - 图242

  3. CART剪枝算法的优点是:不显式需要指定正则化系数 五、CART 树 - 图243

    • CART 剪枝算法自动生成了一系列良好的超参数 五、CART 树 - 图244 ,然后利用验证集进行超参数选择。

    • 虽然传统剪枝算法也可以用验证集来进行超参数选择,但是CART 剪枝算法的效率更高。

      因为CART 剪枝算法只需要搜索超参数 五、CART 树 - 图245 的有限数量的区间即可,而传统剪枝算法需要搜索整个数域 五、CART 树 - 图246