决策树

决策树在看西瓜书的时候已记录过,此次看《统计学习方法》的决策树部分,除了当作复习,也有若干新的思考。因此本篇可视为https://www.jianshu.com/p/8b56ea5a1607
的一个补充。

1、决策树与条件概率分布

决策树除了可以看作一个规则的集合以外,还可以表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上,将特征空间划分为互不相交的单元或区域,并在每个单元或区域定义一个类的概率分布就构成了一个条件概率分布。

假设为表示特征的随机变量,为表示类的随机变量,则这个条件概率分布可表示为。取值于给定划分下单元的集合,取值于类的集合。各叶结点上的条件概率往往偏向于某个类,即属于某个类的概率较大,决策树分类将该结点的实例强行分到条件概率大的那一类去。

2、决策树学习

决策树本质上是从训练数据集中归纳出一组分类规则。与训练数据集不矛盾的决策树可能有多个也可能一个都没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。另一个角度看,决策树学习是由训练数据集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个。我们选择的条件概率模型应不仅对训练数据很好的拟合,而且对未知数据有很好的预测。

从所有可能的决策树中选择最优的决策树是NP-Hard的,因此现实中通常采用启发式算法。这样得到的决策树是次最优的(sub-optimal)的

决策树学习算法通常递归地选择最优特征,并根据该特征对训练数据集进行分割,这一过程对应特征空间的划分与决策树的构建。生成决策树后为了解决过拟合问题通常要由下向上进行决策树剪枝。

可以看到,决策树学习算法包含特征选择、决策树生成与决策树剪枝过程。决策树的生成只考虑局部最优,决策树剪枝则考虑全局最优。

3、信息增益

这部分《统计学习方法》比西瓜书讲得要细致。信息增益是信息论的内容,这里也只是较为浅显的理解。但对于决策树而言这样的理解已经足够了。

随机变量不确定性的度量。设是一个取有限个值的离散随机变量,其概率分布为:

则随机变量的熵定义为:

可以看到,熵只依赖于的概率分布而与其具体取值无关。因此也可以将的熵记为:

条件熵表示已知随机变量X的条件下随机变量Y的不确定性。其定义为X给定的条件下Y的条件概率分布对X的数学期望

这里。

一般的,熵与条件熵之差称为互信息:

互信息是一个随机变量(X)包含另一个随机变量(Y)的信息量的度量。也可以看作给定X知识下Y的不确定性的缩减量

决策树学习中的信息增益等价于训练数据集中的类与特征的互信息

这里表示特征或属性,表示训练数据集。表示对数据分类的不确定性,表示在特征给定条件下对数据集进行分类的不确定性。所以两者之差,即信息增益,表示由于特征使得对数据集分类的不确定性减少的程度。

因此基于信息增益的决策树算法就很自然了,每次选择信息增益最大的结点划分方式直至信息增益小于某个阈值或结点中样本类别相同为止。

采用信息增益作为划分结点的指标有一个问题——算法会偏向于选择取值较多的特征。为解决这个问题,我们可以采用信息增益比

其中是训练数据集关于特征的熵。显然的取值越多,其不确定性倾向于越大,从而熵倾向于越大,这样就相当于在信息增益基础上增加了一个关于特征取值多少的罚项。

4、决策树生成——ID3&C4.5&CART

ID3算法:

输入:训练数据集,特征集,阈值

(1)若D中所有实例属于同一类,择为单节点树,将类作为该结点类标记,返回。

(2)若,则为单结点树,并将中实例数最大的类作为该结点标记,返回。

(3)否则计算各特征对D的信息增益,选择信息增益最大的特征。

(4)如果的信息增益小于阈值,则置为单结点树,并将中实例数最大的类作为该结点的类标记,返回。

(5)否则,对的每一可能值,依将分割为若干非空子集,将中实例数最大的类作为标记,构建子结点,由结点及子结点构成树,返回。

(6)对第个子结点,以为训练集,以为特征集,递归地调用步骤(1)~(5)得到子树,返回。

C4.5算法:

C4.5算法和ID3算法唯一的差异就是把结点划分准则由信息增益改进为信息增益比。

CART(Classification And Regression Tree,分类与回归树)算法:

CART假设决策树是二叉树,内部结点取值特征为“是”和“否”,左分支是取值为“是”的分支,右分支为取值为“否”的分支。

在特征选择方面,对于回归树,采用平方误差最小准则,对分类树采用基尼系数最小化准则。

(a)最小二乘回归树:

(1)选择最优切分变量和切分点,求解:

这里和表示由切分变量和切分点产生的两个划分区域,和则表示在和区域上的样本输出值的均值。

也就是说,遍历,对固定的,扫描切分点,找到使得上式最小的。

(2)用选定的划分区域并决定相应的输出值:

(3)继续对两个子区域调用步骤(1)(2)直至满足停止条件。

(b)分类树CART算法:

(1)设结点的训练数据集为,计算现有特征对该数据集的基尼系数,此时对每一个特征及其可能取的每个取值,根据样本点对的测试为是或否将分割成和两个部分,利用下式计算时的基尼系数:

基尼系数表示集合的不确定性,表示经过分割后集合的不确定性。基尼指数越大不确定性越大。

(2)在所有可能特征以及它们所有可能的切分点中选择基尼指数最小的特征及对应切分点作为最优特征与最优切分点,将此结点分成两个子结点。

(3)对两个子结点递归地调用(1)(2)直至满足停止条件(结点中样本个数小于阈值或基尼系数小于阈值或没有更多特征)。

5、决策树剪枝

决策树剪枝往往通过极小化决策树整体的损失函数来实现,设树的叶结点个数为,是树的叶结点,改叶结点有个样本点,其中第类样本点有个,,为叶结点上的熵,为参数,则决策树学习的损失函数可定义为:

其中熵为:

将第一项记作:

则损失函数为:

其中表示模型对训练数据的预测误差,表示模型复杂度,在这里作为正则项来防止模型过拟合。

树的剪枝算法:

(1)计算每个结点的熵。

(2)递归地从树的叶结点向上回缩。设一组叶结点回缩到父节点前后的整树分别为和,其对应损失函数分别为和,若:

则进行剪枝,将父节点变成新的叶子结点。

(3)重复(2)直至不能继续为止,得到损失函数最小的子树。

CART剪枝:

CART剪枝算法由两步组成:

  • 从生成的决策树底端开始不断剪枝,直到的根结点,形成一个子树序列。
  • 通过交叉验证法在独立的验证集上对子树序列进行测试,从中选出最优子树。

如何形成子树序列呢?Breiman等人证明:可以用递归的方式对数进行剪枝,将从小增大,产生一系列的区间;剪枝得到的子树序列对应着各区间的最优子树序列。

这个结论其实不难理解,当我们缓慢增加的时候,可能得到的最优子树并不会发生变化,也就是说当在某个区间内取值时,我们得到的最优子树都是相同的,而当超过某个阈值,则剪枝后得到的子树更优,此时最优子树才发生改变。于是很自然的思路就是找到这些区间的端点来进行分析。

具体地,从整体树开始剪枝,对的内部结点,以为单结点树的损失函数为:

以为根结点的子树的损失函数为:

当及充分小时,有不等式:

当增大时,在某一有:

此时解出的为:

为此,对中每一个内部结点,计算:

它表示剪枝后整体损失函数减少的程度。在中减去最小的,将得到的子树作为,同时将最小的作为。为区间的最优子树。

总结下来算法流程如下:

(1)设,。

(2)设。

(3)自下而上地对各内部结点计算,以及:

(4)对的内部结点进行剪枝,并对叶结点以多数表决法确定其类别,得到树。

(5)设。

(6)如果树不是由根结点及两个叶结点构成的树则返回(2)否则令。

(7)采取交叉验证法在子树序列中选取最优子树。

你可能感兴趣的:(决策树)