统计机器学习-决策树

决策树是一种基本的分类与回归方法。ID3和C4.5决策树可以用于分类,CART(分类与回归树)既可以用于分类,也可以用于回归。决策树的学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。这里主要介绍分类决策树。附上机器学习实战的书中决策树代码。

定义

分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成。结点由两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。

由决策树的根结点到叶结点的每一条路径构建一条规则:路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径对应的规则互斥且完备,每一个实例都只被一条路径所覆盖。

决策树还能表示给定特征条件下类的条件概率分布。

决策树的学习

决策树学习,假设给定训练数据集

其中,为输入实例(特征向量),为特征个数,为类标记,,为样本容量,学习的目的是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。

决策树学习的算法通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程,这一过程对应着对特征空间的划分,也对应着决策树的构建。在构建完成后,决策树对训练数据有了很好的划分,但是一般不具备很好的泛化能力,容易出现过拟合,于是可以通过剪枝算法剪去一些子树来提高泛化能力。剪枝的结果不是唯一的,需要选择一个最优的决策树最为最终的模型。这一最优化问题是NP完全问题,通常采用启发式算法求解,得到的决策树是次最优的。

NP完全问题=NPC问题,这种问题存在的现象就是生成问题的一个解比验证一个给定解花费的时间多得多。

特征选择

特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。

信息增益

首先定义熵和条件熵

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

则随机变量的熵定义为

当随机变量越确定时,熵越小。例如0,1分布,的熵随概率的曲线:

hp

当时,最不确定0还是1,此时熵最大。

条件熵

设随机变量,其联合概率分布为

条件熵表示在一直随机变量的条件下随机变量的不确定性。随机变量给定的条件下随机变量的条件熵,定义为给定条件下的条件概率分布的熵对的期望

当熵和条件熵中的概率有数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵,此时,如果有0概率,令。

信息增益定义

特征对训练数据集的信息增益,定义为集合的经验熵与特征给定条件下的经验条件熵之差,即

表示通过特征划分,数据集分类不确定性减少的程度。

信息增益的算法

输入:训练数据集和特征;

输出:特征对训练数据集的信息增益。

(1)计算数据集的经验熵

其中是训练集中属于类的样本个数,是训练集样本总数

(2)计算特征对数据集的经验条件熵

其中是训练集根据特征的第个取值划分得到的子集,,是子集中属于类的样本的集合

(3)计算信息增益

信息增益比

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。

信息增益比定义

特征对训练数据集的信息增益比定义为其信息增益与训练数据集关于特征的值的熵之比,即

其中,,是特征取值的个数。熵是针对数据集的分类的,这里是针对数据集的特征的。

决策树的生成

ID3的生成算法

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

输出:决策树。

(1)若中所有实例属于同一类,则为单结点树,并将类作为该结点的类标记,返回;

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

(3)否则,按信息增益算法计算中各特征对的信息增益,选择信息增益最大的特征;

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

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

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

C4.5的生成算法

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

输出:决策树。

(1)若中所有实例属于同一类,则为单结点树,并将类作为该结点的类标记,返回;

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

(3)否则,按公式(2)计算中各特征对的信息增益比,选择信息增益比最大的特征;

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

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

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

两个算法的区别仅在于ID3使用信息增益最大为标准选择划分特征,而C4.5使用信息增益比最大为标准选择划分特征。

决策树的剪枝

生成算法产生的决策树对训练数据有很好的划分,但是容易出现过拟合,这时候就需要对生成的决策树进行剪枝,提高模型的泛化能力。

剪枝通过极小化决策树整体的损失函数或代价函数来实现。设树的叶结点个数为,是树的叶结点,该叶结点有个样本点,其中类的样本点有个,,为叶结点上的经验熵,为参数,则决策树学习的损失函数可以定义为

其中经验熵为

在损失函数,将公式(3)中右端第一项记做

这时有

上式中表示模型对训练数据的预测误差,表示模型复杂度。参数控制两者之间的影响,较大的促使选择简单的模型,较小的促使选择复杂的模型,表示不考虑模型复杂度。该损失函数的极小化等价于正则化的极大似然估计。

树的剪枝算法

输入:生成算法产生的整个树,参数;

输出:修剪后的子树。

(1)计算每个结点的经验熵

(2)递归的从树的叶结点向上回缩。设一组叶结点回缩到父结点之前与之后的整体树分别为与,其对应的损失函数值分别是与,如果

则进行剪枝,即将父结点变为新的叶结点。

(3)返回(2),直至不能继续位置,得到损失函数最小的子树。

剪枝算法可以通过动态规划的算法实现。

CART算法

CART是分类与回归树的简写,即既可以实现分类,也可以实现回归的树。CART是二叉树,内部结点有两个分支,左边是“是”,右边是“否”,对特征进行递归的二分。

CART算法由以下两步组成:

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART生成

回归树生成

假设和分别为输入和输出变量,并且是连续变量,给定训练数据集

考虑如何生成回归树。

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元的输出值。假设已将输入空间划分为个单元,并且在每个单元有一个固定的输出值,于是回归树模型可表示为

当输入空间的划分确定时,可以用平方误差来表示回归树对训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元上的的最优值是上的所有输入实例对应的输出的均值,即

问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第个变量和它的取值,作为切分变量和切分点并定义两个区域:

然后寻找最优切分变量和最优切分点。具体的,求解

对固定输入变量可以找到最优切分点。

遍历所有输入变量,找到最优的切分变量,构成一个对,以此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件(例如结点中的样本个数小于预定阈值)为止。这样就生成一颗回归树,这样的回归树通常称为最小二乘回归树。

最小二乘回归树生成算法

输入:训练数据集;

输出:回归树。

在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

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

遍历变量,对固定的切分变量扫描切分点,选择使公式(7)达到最小的值的对

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

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

(4)将输入空间划分为个区域,生成决策树:

分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

基尼指数的定义

分类问题中,假设有个类,样本点属于第类的概率为,则概率分布的基尼指数定义为

对于给定样本集,其基尼指数为

这里,是中属于第类的样本子集。

如果样本集合根据特征是否取某一可能值被分割成和两部分,则在特征的条件下,集合的基尼指数定义为

基尼指数表示集合的不确定性,基尼指数越大,不确定性越高,和熵有相似的性质。基尼指数表示按特征划分后的不确定性。

CART生成算法

输入:训练数据集,停止计算的条件;

输出:CART决策树。

根据训练数据集,从根结点开始,递归的对每个结点进行以下操作,构建二叉决策树:

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

计算时的基尼指数。

(2)在所有可能的特征以及它们所有可能的切分点中,选择基尼指数最小的特征及其对应的切分作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据依特征分配到两个子结点中去。

(3)对两个子结点递归的调用(1),(2),直至满足停止条件。

(4)生成CART决策树。

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART 剪枝

在剪枝过程中,计算子树的损失函数:

其中,为任意子树,为对训练数据的预测误差(分类树中),为子树的叶结点个数,为参数,较大的促使选择简单的模型,较小的促使选择复杂的模型。

对固定的,一定存在使损失函数最小的子树,于是我们把从小增大,使其从复杂到简单逐步进行剪枝,剪枝得到的子树序列对应着区间,的最优子树序列,序列中的子树是嵌套的。

具体的,从整体树开始剪枝。对的任意内部结点,以为单结点树的损失函数是

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

当及充分小时,有不等式

单结点树损失更大一点,因为充分小时,复杂的树损失更小。当增大时,在某一有

单结点树和子树损失相同。当再增大时,不等式反向,单结点树损失更小。

所以只要,与有相同的损失函数值,而的结点少,因此比更可取,对进行剪枝。

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

减去最小的,得到的子树作为,所处的区间为(整体树的区间是)。

如此剪枝下去,直至得到根结点。在这一过程中,不断的增加的值,产生新的区间。并且每个区间的子树是在上个区间的子树上剪枝得到的,因为当更大时,对于之前值更小的结点,,即之前剪去的结点其子树的损失要比单结点更大,所以嵌套的剪枝是合理的。

剪枝完成后,子树序列对应的序列也就确定了,利用验证数据集在子树序列中计算损失,选择损失最小的决策树。

CART剪枝算法

输入:CART算法生成的决策树;

输出:最优决策树。

(1)设,。

(2)设。

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

这里,表示以为根结点的子树,是对训练数据的预测误差,是的叶结点个数。

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

(5)设,,。

(6)如果不是由根结点及两个叶结点构成的树,则回到步骤(3),否则令。

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

你可能感兴趣的:(统计机器学习-决策树)