机器学习之决策树_CART算法

决策树基本知识参考,请点击:https://www.cnblogs.com/hugechuanqi/p/10498786.html

3、CART算法(classification and regression tree tree)

  • CART,即分类与回归树,是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假定决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。
  • CART算法分为两个步骤:
    1. 决策树生成:基于训练集生成决策树,生成的决策树要尽量大;
    2. 决策树剪枝:基于验证数据对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

3.1 CART生成算法(回归树生成和分类树生成)

  • CART包括回归树和分类树,回归树和分类树的区别:
    • 回归树用平方误差最小化准则,进行特征选择,递归地构建二叉树。
    • 分类树用基尼指数最小化准则,进行特征选择,递归地构建二叉树。
  • CART算法是一种二分递归分割技术,把当前样本划分为两个子样本,使得生成的每个非叶子节点都有两个分支。因此CART算法生成的决策树是结构简单的二叉树,做决策时只有“是”和“否”两个分支,即使一个特征下有多个分类取值,也只能把数据分为两部分。

(1)CART回归树生成

  • 回归树用平方误差最小化准则,进行特征选择,递归地构建二叉树。
  • 数据集\(D={(x_{1}, y_{2}), (x_{2}, y_{2}), ..., (x_{N}, y_{N})}\),其中\(x = \{x^{1}, x^{2}, ..., x^{l}, ..., x^{M}\}\)为输入变量,例如\(x_{1} = \{x_{1}^{1}, x_{1}^{2}, ..., x_{1}^{l}, ..., x_{1}^{M}\}\)\(Y\)是连续的输入变量。

  • 一个回归树对应着输入特征空间中的一个划分,以及在划分单元的输出值。假定已经将输入特征空间划分为M个单元\(R_{1}, R_{2}, ..., R_{M}\),并且在每个单元\(R_{m}\)上有一个固定的输出值\(c_{m}\),则回归树的模型为:
    \[f(x) = \sum\limits_{m=1}^{M} c_{m} I(x \in R_{m})\]
  • 每个单元最优输出值的确定:当输入特征空间已经划分时,可以用平方误差\(\sum\limits_{x_[i] \in R_{m}} (y_{i} - f(x_{i}))^{2}\)来表示预测误差,然后用最小平方误差的准则求解每个单元上的最优输出值\(\hat{c}_{m}\)。从统计分析的角度,平均值概括了大多数样本。因此单元\(R_{m}\)上的\(c_{m}\)的最优值\(\hat{c}_{m}\)\(R_{m}\)上的所有输入实例\(x_{i}\)对应的输出平均值,即
    \[\hat{c}_{m} = ave(y_{i} | x_{i} \in R_{m})\]

  • 空间划分:选择第\(j\)个变量\(x^{j}\)和它的取值s,作为切分变量和切分点。并定义两个区域:
    \[R_{1}(j,s) = \{x | x^{(j)} \leq s\} \ 和\ R_{2}(j,s) = \{x | x^{(j)} > s\}\]
    然后寻找最优切分变量\(j\)和最优切分点s。具体求解:
    \[\min\limits_{j,s} [\min\limits_{c1} \sum\limits_{x_{i} \in R_{1}(j,s)} (y_{i} - c_{1})^{2} + \min\limits_{c2} \sum\limits_{x_{i} \in R_{2}(j,s)} (y_{i} - c_{2})^{2}]\]
    对固定输入变量\(j\)可以找到最优切分点。
    \[\hat{c}_{1} = ave(y_{i} | x_{i} \in R_{1}(j,s)) \ 和 \hat{c}_{2} = ave(y_{i} | x_{i} \in R_{2}(j,s))\]
    遍历所有的输入变量,找到最优的切分变量\(j\),构成一个对(j,s),依次将输入特征空间划分为两个区域。接下来,对每个区域重复上述划分过程,直到满足停止条件为止,这样就生成一颗回归树。

  • 最小二乘回归树生成算法流程:

(2)CART分类树生成

  • 分类树用基尼指数选择最优特征,通过选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点。
  • 概率分布的基尼指数定义为:
    \[Gini(p) = \sum\limits_{k=1}^{K} p_{k}(1-p_{k}) = 1 - \sum_{k=1}^{K} p_{k}^{2}\]
    其中,假设分类问题中有K个类,样本点属于第K类的概率为\(p_{k}\)
  • 对于二分类问题,属于第一个类的概率为p,则属于第二个类的概率为1-p,其概率分布的基尼指数为:
    \[Gini(p) = 2p(1-p)\]
  • 对于给定的样本集合D,其基尼指数为:
    \[Gini(D) = 1 - \sum\limits_{k=1}^{K} (\frac{|C_{k}|}{|D|})^{2}\]
    其中,\(C_{k}\)是D中属于第k类的样本子集,K是类的个数。
  • 如果在样本集合D根据A是否取某一可能值a被分割成\(D_{1}\)\(D_{2}\)两部分,即\(D_{1} = \{(x,y) \in D | A(x) = a\}\)\(D_{2}=D-D_{1}\),则在特征A的条件下,集合D 的基尼指数定义为:
    \[Gini(D,A) = \frac{|D_{1}|}{|D|} Gini(D_{1}) + \frac{|D_{2}|}{|D|} Gini(D_{2})\]
  • 基尼指数\(Gini(D)\)表示集合D的不确定性,基尼指数\(Gini(D,A)\)表示经\(A=a\)分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,类似于殇。

  • CART分类树的生成算法流程:

3.2 CART剪枝

  • CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变简单,防止过拟合。分两步:
    1. 首先从生成算法产生的决策树\(T_{0}\)底端开始不断剪枝,知道==直到\(T_{0}\)的根结点,形成一个子树序列\(\{T_{0}, T_{1}, ..., T_{n},\}\)
    2. 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

(1)形成一个子树序列

  • 剪枝过程中子树的损失函数:
    \[C_{\alpha}(T) = C(T) + \alpha |T|\]
    其中T为任意子树,\(C_{T}\)是对训练数据的预测误差(如基尼指数),\(|T|\)为子树的叶结点个数,C_{\alpha}(T)为参数\(\alpha\)时的子树T的整体损失,参数\(\alpha\)权衡训练数据的拟合程度与模型的复杂度。

  • \(T_{0}\)中每一个内部结点t,计算
    \[g(t) = \frac{C(t) - C(T_{t})}{|T_{t}| - 1}\]
    g(t)表示剪枝后整体损失函数减少的程度,\(C(t)\)表示剪枝前的损失函数,\(C(T_{t})\)表示剪枝后的损失函数。在\(T_{0}\)中剪去g(t)最小的\(T_{t}\),将得到的子树作为\(T_{1}\)同时将最小的g(t)设为\(\alpha_{1}\)\(T_{1}\)为区间\([\alpha_{1}, \alpha_{2}]\)的最优子树。不断剪枝下去,直至得到根结点。在这个过程中,不断地增加\(\alpha\)的值,产生新的空间。

(2)在剪枝得到的子树序列\(T_{0}, T_{1}, .., T_{n}\)中通过交叉验证选取最优子树\(T_{\alpha}\)

  • 主要是通过验证数据集,测试这些子树序列中各棵子树的平方误差或者基尼指数。取平方误差或者基尼指数最小的决策树为最优决策树\(T_{k}\),对应的\(\alpha_{k}\)也就确定了。

  • CART剪枝算法流程:

参考

  1. 李航《统计学习方法》
  2. CART分类树原理示例:https://blog.csdn.net/aaa_aaa1sdf/article/details/81587359
  3. 数据挖掘十大算法之CART:https://blog.csdn.net/baimafujinji/article/details/53269040

猜你喜欢

转载自www.cnblogs.com/hugechuanqi/p/10549640.html