机器学习————决策树(二)

这篇文章介绍CART算法。分类与回归树(classification and regression tree,CART)模型是应用广泛的决策树的学习方法,CART作为决策树的一种放啊放同样由特征选择、树的生成和剪枝构成,既可以用于分类问题也可以用于回归问题。

CART算法特征选择阶段的选择标准是计算基尼指数,基尼指数作为上一篇介绍的信息增益和增益率之后的第三个评判标准,同样被广泛地使用,这里单独介绍CART算法是因为在生成树和剪枝的过程中与之前介绍的方法略有差异,大家可以感受一下。

CART假设的决策树是二叉树,内部的结点特征的取值为“是”或者“否”,左分支为“是”,右分支为“否”,递归地二分每个分支。

算法由以下两步构成:

  • 决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量的大。
  • 决策树的剪枝:用验证集对已生成的决策树进行剪枝并选择最优子树,剪枝的评判标准是使损失函数最小。

CART生成决策树

这里只介绍CART生成分类树,分类树使用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

基尼指数

在数据集D中,有K个分类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义为:

对于给定的样本集合D,基尼指数为:

其中Ck为D中类别为k的样本子集,K为数据集D中的类别个数。

数据集D中的特征A根据是否取值a被分成两个区域D1和D2,即:

在特征A的条件下,基尼指数的定义为:

基尼指数可以看作是代表数据集D的不确定性,Gini(D,A)表示D数据集再经过特征A的划分之后的不确定性,基尼指数越大,样本集合的不确定性也就越大,与熵相似。

CART生成分类树算法

算法的输入:训练数据集D

算法的输出:CART决策树

  1. 从根节点开始,递归地对每一个结点做如下操作,构建二叉决策树。
  2. 设结点的训练数据集为D,求出每个特征对样本数据集的基尼指数,此时对于每个特征A,根据A是否取值a划分成D1和D2两个区域,计算特征A=a的基尼指数。
  3. 在所有的特征A和所有可能的最优切分点a中,选择出基尼指数最小的特征及当前的切分点作为最优特征和最优切分点,在此基础上生成两个分支子节点,根据特征的取值将数据集分配到两个子节点中。
  4. 对两个子节点递归地循环步骤2和步骤3,直至满足停止条件。
  5. 得到最终的CART决策树。

这里引李航老师《统计学习方法》中的一个实例:

机器学习————决策树(二)_第1张图片

CART剪枝算法

CART的剪枝算法一共分为两步,首先要在一棵“完全生长”的决策树的低端不断地去掉一些子树,得到新的子树序列,直到遍历到根节点,然后通过交叉验证的方法,在验证集上进行测试,最终选出最优子树。下面展开这两步:

1.剪枝,生成一个子树序列

剪枝时的评判标准是下面的损失函数:

其中C(T)表示对于训练数据的预测误差,可以理解为拟合程度,|T|是当前树的叶节点个数,a是一个参数用来权衡决策树的复杂程度和拟合程度。Ca(T)表示参数为a时,树T的整体损失。

容易证明当参数a固定时,存在唯一一棵最优子树Ta使得损失函数最小,同时随着a的增大,Ta偏小;a减小,Ta偏大。

下面考虑一种较为极端的情况:

现有决策树T,其中的一个子节点t,以t为单节点的子树的损失函数为:Ca(t)=C(t)+a|t|.

以t为根节点的子树Tt的损失函数为:Ca(Tt)=C(Tt)+a|Tt|.

可以证明一定存在一个参数a使得Ca(t)=Ca(Tt),即:

同时t的节点个数少于Tt子树,因此选择保留以t为单节点的子树,故进行剪枝。

为此对于决策树T中每一个内部节点,计算:

它表示剪枝后整体的损失函数减少的程度。在T中减去使g(t)最小的子树Tt,得到T1,同时将得到T1的参数设为a1,那么T1就是[a1,a2)区间上的最优子树,继续遍历,由于减去的子树越来约多,留下的Tn复杂度越来越小,每棵子树都对应了一个参数a,所以参数a一定是随之增大直到[an,an+1)。

2.在子树序列中交叉验证得到最优子树Tt

这一步跟之前相似,不进行赘述。

 

 

 

 

 

你可能感兴趣的:(机器学习)