本文 大部分参考 李航博士的《统计学习方法》 并加入少量个人部分理解,用于个人巩固提高,并非原创。
决策树(decision tree)是一种基本的分类与回归方法。
5.1 决策树学习
决策树学习,学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。从另外的角度看,决策树学习是由训练数据集估计条件概率模型。
损失函数
决策树学习的损失函数通常是 正则化的极大似然函数,决策树学习的策略是以损失函数为目标函数的最小化,而现实中,选取最优决策树是NP完全问题,通常采用 启发式方法 近似求解,得到 次最优决策树。
决策树算法,通常是 递归地选择最优特征进行数据分割、构建决策树 以及 为了提升泛化能力进行决策树剪枝,即 特征选择、决策树的生成 和 决策树的剪枝。
5.2 特征选择
特征选择在于选取对训练数据具有分类能力的特征,可以提高决策树学习的效率。
通常特征选择的准则是 信息增益(ID3 算法) 和 信息增益比(C4.5 算法)。
5.2.1 信息增益
在信息论与概率统计中,熵
是表示随机变量不确定性的度量。设
是一个取有限个值的离散随机变量,其概率分布为
则随机变量 的熵定义为
若 ,则定义 。 通常上式中的对数以2为底或以 为底(自然对数),这时熵的单位分别称为比特 或 纳特。
因为熵只依赖
的分布,而与
的取值无关,所以也可将
的熵记作
熵越大,随机变量的不确定性就越大。
设有随机变量
,其联合概率分布为
条件熵 表示在已知随机变量 的条件下随机变量 的不确定性。
随机变量 给定的条件下随机变量 的条件熵 ,定义为 给定条件下 的条件概率分布的熵对 的数学期望
这里,
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为 经验熵 和 经验条件熵
信息增益:
表示得知特征
的信息而使得类
的信息的不确定性 减少 的程度。
特征
对于训练集数据
的信息增益
,定义为集合
的经验熵
与特征
给定条件下
的经验条件熵
之差,即
一般地,熵 与条件熵 之差称为 互信息 。决策树学习中的信息增益 等价于 训练数据集中类与特征的互信息。
根据信息增益准则的特征选择方法是:对训练数据集(或子集) ,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
算法:(信息增益的算法)
输入:训练集
和特征
;
输出:特征
对训练数据集
的信息增益
。
(1)计算数据集
的信息熵
(2)计算特征 对数据集 的经验条件熵
公式的含义是 对于给定的特征 所划分的每个区间 ,计算他们的经验熵的数学期望。
根据特征 的取值将 划分为 个子集 , 为 的样本个数,记子集 中所属类 的样本的集合为 。
(3)计算信息增益
信息增益比:
以信息增益作为划分数据集的特征,存在偏向于取值最多的特征的问题,使用 信息增益比 可以对这一问题进行校正。
特征
对训练数据集
的信息增益比
定义为其信息增益
与训练数据集
关于特征
的值的熵
之比,即
其中, , 是特征 取值的个数。
5.3 决策树的生成
5.3.1 ID3 算法
ID3 算法的核心是在决策树各个结点上应用 信息增益 准则选择特征,递归地构建决策树。
具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有可以选择为止。
算法:ID3 算法
输入:训练数据集
,特征集
,阈值
;
输出:决策树
(1)若
中所有实例属于同一类
,则
为单结点树,并将类
作为该结点的类标志,返回
;
(2)若
,则
为单结点树,并将
红实例数最大的类
作为该结点的类标记,返回
;
(3)否则,计算A中各特征对
的信息增益,选择信息增益最大的特征
;
(4)若
的信息增益小于阈值
,则置
为单结点树,并将
中实例数最大的类
作为该结点的类标记,返回
;
(5)否则,对
的每一种可能值
,依
将
分割为若干非空子集
,将
中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树
,返回
;
(6)对第
个子结点,以
为训练集,以
为特征集,递归地调用步(1)—步(5),得到子树
,返回
。
算法:C4.5 算法
除 C4.5 在生成的过程中,用 信息增益比 来选择特征外,其余步骤均与 ID3 算法相同。
5.4 决策树的剪枝
为了防止决策树模型因模型过于复杂而出现过拟合的情况,需要对策树模型进行剪枝操作。
决策树的剪枝往往通过 极小化 决策树整体的 损失函数 或 代价函数 来实现。
设树
的叶结点个数为
,
是树
的叶结点,该叶结点有
个样本点,其中
类的样本点有
个,
,
为叶结点
上的经验熵,
为参数,则决策树学习的损失函数可以定义为
其中经验熵为
损失函数前一项
为 各结点的熵值加权和 分类越好值越小相当于经验误差,后一项
叶结点数越多越复杂,其值也就越大,相当于罚项,结构风险最小化。
在损失函数中,将右端第一项记作
这时有
表示模型对训练数据的预测误差, 表示模型复杂度。
剪枝,就是当
确定时,选择损失函数最小的模型,即损失函数最小的决策树。
损失函数的极小化等价于正则化的极大似然估计,所以损失函数最小化原则进行剪枝就是用正则化的极大似然估计进行模型选择。
算法(树的剪枝算法)
输入:生成算法产生的整个树
,参数
;
输出:修剪后的子树
(1)计算每个结点的熵
(2)递归地从树的叶结点向上回缩
设一组叶结点回缩到其父节点之前和之后的整体树分别为
和
,其对应的损失函数值分别为
h和
,如果
则进行剪枝,即将其父节点变为新的叶结点。
(3)返回(2)直到不能继续为止,得到损失函数最小的子树 。
只考虑两个树的损失函数的差,其计算可以在局部进行,可以由一种动态规划的算法实现。
5.5 算法 (分类与回归树)
CART 是在给定随机变量
条件下输出随机变量
的条件概率分别的学习方法。
CART 假设决策树是 二叉树 ,内部结点特征的取值为 “是” 或 “否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布。
CART 算法由以下两步组成:
(1)决策树的生成:基于训练数据,生成的决策树尽可能大。
(2)决策树剪枝:选取损失函数最小作为剪枝的标准。
5.5.1 CART 生成
1. 回归树的生成(基于 平均误差 最小化)
假设
和
分别为输入和输出变量,并且
是连续变量,给定训练数据集
那么如何生成回归树?类似地,选择一个划分标准,在这里是回归预测,因此对于连续数值预测准确度的评判考虑 最小平方误差,因为在非叶子结点时,是没有预测值的,这时候计算最小平方误差可以用划分区域内所有点的均值计算误差,这一点下面有讲。
一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为
个单元
,并且在每个单元
上有一个固定的输出值
,于是回归树模型可表示为
当输入空间的划分确定时,可以用 平方误差 来表示回归树对训练数据的误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元 上的 的最优值 是 上的所有输入实例 对应的输出 的均值,即
然后,用 启发式 的方法,选择第
个变量
和它取的值
,作为切分变量和切分点,并定义两个区域:
然后寻找最优切分变量 和切分点 ,具体地,求解
对固定输入变量 可以找到最优切分点 。
遍历所有输入变量,找到最优的切分变量 ,构成一个对 。依次将输入空间划分为两个区域,接着,对每个区域重复上述划分,直到满足停止条件为止。得到的回归树也叫 最小二乘回归树 。
算法:(最小二乘回归树生成算法)
输入:训练数据集
;
输出:回归树
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域的输出值没构建二叉决策树:
(1)选择最优切分变量
与切分点
,
遍历变量 ,对固定的切分变量 扫描切分点
,使得上式达到最小值的对 。
(2)用选定的对 划分区域并决定相应的输出值:
(3)继续对两个子区域调用步骤(1),(2),直到满足停止条件。
(4)将输入空间划分为 个区域 ,生成决策树:
2. 分类树的生成(基于 基尼指数 最小化)
基尼指数:
分类问题中,假设有
个类,样本点属于第
个类的概率为
,则概率分布的基尼指数定义为
对于二分类问题,若样本点属于第1个类的概率是 ,则概率分布的基尼指数为
对于给定的样本集合 ,其基尼指数为
这里, 是 中属于第 类的样本子集, 是类的个数。
如果样本集合
根据特征
是否取某一个可能值
被分割为
和
两部分,即
则在特征 的条件下,集合 的基尼指数定义为
基尼指数 表示集合 的不确定性,基尼指数 表示经 分割后集合 的不确定性,和熵类似,基尼指数越大,样本集合的不确定性就越大。
算法:CART 生成算法(基于 基尼指数)
输入:训练数据集
,停止计算的条件
输出:CART 决策树
(1)设结点的训练数据集为
,计算现有特征对该训练集的基尼指数。此时,对每一个特征
,对其可能取的每个值
,根据样本点对
的测试为 “是” 或 “否” 将
分割为
和
两部分,利用
计算
的基尼指数。
(2)在所有可能的特征
以及它们所有可能的切分点
中,选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归调用(1),(2),直到满足停止条件。
(4)生成 CART 决策树。
5.5.2 CART 剪枝
CART 决策树剪枝由两步组成:首先从生成算法产生的决策树 底端开始不断剪枝,直到 的根结点,形成一个子树序列 ;然后通过 交叉验证法 在独立的验证数据集上对子树序列进行测试,从中选择最优的子树。
1. 剪枝,形成一个子树序列
在剪枝过程中,计算子树的损失函数:
对固定的 ,一定存在使损失函数最小的子树 ,容易验证这样的最优子树是唯一的。当 大的时候,最优子树偏小;当 小的时候,最优子树偏大。
可以用递归的方法对树进行剪枝,将 从小增大, ,产生一系列的区间 ,剪枝得到的子树序列对应着 的最优子树序列 ,序列中的子树是嵌套的。
具体地,从整体树
开始剪枝。对
的任意内部结点
,以
为单结点树的损失函数是
以 为根结点的子树 的损失函数是
当 及 充分小时,有不等式
当 增大时,在某一 有
当 再增大时, ,只要 , 与 有相同的损失函数值,而 的结点少,因此 比 更可取,对 进行剪枝。
为此,对
中每一内部结点
,计算
它表示剪枝后整体损失函数下降的程度。在 中剪去 最小的 ,将得到的子树作为 ,同时将最小的 设为 , 为区间 的最优子树。
如此剪枝下去,直到得到根结点。在这一过程中,不断地增加 的值,产生新的区间。
2. 在剪枝得到的子树序列 中通过交叉验证选取最优子树
具体地,利用独立的验证数据集,测试子树序列 中各棵子树的 平方误差 或 基尼指数 。平方误差或基尼指数最小的决策树被认为是最优的决策最优子树。在子树序列中,每棵 都对应于一个参数 。所以,当最优子树 确定时,对应的 也确定了,即得到最优决策树 。
算法:(CART 剪枝算法)
输入:CART 算法生成的决策树
;
输出:最优决策树
(1) 设
(2)设
(3)自下向上地对各内部结点
计算
以及
这里, 表示以 为根结点的子树, 是对训练数据的预测误差, 是 的叶结点个数。
(4)对 的内部结点 点进行剪枝,并对叶结点 以多数表决法决定其类,得到树
(5)设
(6)如果 不是由根结点及两个叶结点构成的树,则回到步骤(3);否则令
(7)采用交叉验证法在子树序列 中选取最优子树