知识架构
- 概要
- 决策树模型与决策树学习
- 决策特征选择
- 决策树生成与剪枝
- 连续特征与缺失值处理
- CART决策树
9.1 概要
泛化能力:训练出的模型(网络),对于训练集性能表现良好,对于测试集也能表现良好的能力。其好坏表现为模型的过拟合与欠拟合。
离散特征:只能取固定个数的值,可根据具体取值进行结点划分。
连续特征:无限取值,不能根据具体特征取值对结点进行划分。
连续特征离散化:通过设置一定的取值区间,将连续取值转化成离散的区间取值。常用的离散策略是二划分。即,
9.2 决策树模型与决策树学习
决策树是应用最广泛的分类模型之一,数据挖掘十大经典算法中有俩都是决策树算法,决策树算法直观、可解释性好,生成的模型具有可读性,分类速度快。
经典的决策树算法有:ID3,C4.5和CART
构造决策树的一般技术路线:
- 决策树生成:遍历所有可能的特征属性,对树进行分支。
- 剪枝:适当剪除一些不必要的分支,减少过拟合,获得更好的推广能力。
决策树涉及的三大技术:决策特征选择、决策特征分裂点的确定、决策树剪枝
决策树模型定义:分类决策树是由一种描述对数据实例进行分类的树形结构。决策树由结点和有向边组成。
内部结点:对应数据的一个特征
叶结点:对应数据的一个类别。
决策树模型的特点:
- 遵循分而治之的基本策略
- 以树型结构,根据事先定好的判定问题,进行分类决策
- 叶结点对应决策结果
- 内部结点对应属性测试,即回答判定问题
决策树学习:
给定训练数据集:,
表示第i个样本实列的第j个特征,离散取值。
表示第i个实例样本的类别标记。
学习目标:不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树的学习就是决策树模型的构建过程。
决策树生成的技术路线:
- 构建根结点,将所有数据都放在根节点。
- 选择一个最优特征,按照它的离散取值,将上一节点中数据分割成不同子集。
- 对于分割的子集,如果能够基本正确分类(子集中大部分数据都属于同一类),那么构建叶节点。
- 对于不能构建叶结点的子集,继续上述步骤,直到所有子集都能构建叶节点。
存在两种情况不能通过选择特征对数据集进行划分:1.数据集为空2.可用的属性集为空,或所有样本在所有属性上取值均相同。可以通过标记为叶结点,类别设定为其父节点所含样本最多的类别或者设定为该节点所含样本最多的类别。
9.3决策树特征选择
如何选择最优特征来对数据集进行划分就需要在特征选择中使每个分支的节点纯度尽可能高。评价划分后子集的纯度可以依据基于信息熵的判据或依据基于基尼指数的判据。
信息增益
假定样本集合D中第k类样本所占比例为,则样本信息熵定义为:
信息熵值越小,样本的不确定性越低,D的纯度越高。
信息增益:得到样本某个属性a的信息,使得样本集合的不确定性减少的程度。
条件信息熵:给定样本某个取值的前提下,样本集合的不确定性。
假定属性a有V个可能的离散取值,若使用a来对样本集D进行划分,则会产生V个子集,其中第i个子集包含了D中所有在属性a上取值为
的样本,记为
。
根据属性a,对D进行划分,整个集合的信息熵变为:
根据属性a,对D进行划分所获得的信息增益:
信息增益越大,数据集合D划分后,纯度提升越大。
信息增益对取值个数较多的属性有偏好,相应的增益率会大。
信息增益率
信息增益率/增益比:利用数据集D关于属性a的熵对信息增益进行归一化。
数据集D关于属性a的熵:
属性可取值个数多,IV(a)也会增大。
信息增益率会对取值个数较少的属性有偏好。
基尼值
假定样本集合D中第k类样本所占比例为:
则样本集合D的基尼值定义为:
基尼值越小,纯度越高。
属性a的基尼指数是利用属性a对样本集合D划分后的基尼值之和:
不同算法采用的不同评价纯度的方法:
ID3算法是根据信息增益,确定最优特征,构建决策树的。
C4.5算法根据信息增益率确定最优特征构建决策树。(先从候选属性中找出信息增益高于平均水平的属性,在从中选择增益率最高的)
9.4 决策树生成与剪枝
9.4.1决策树生成算法:
ID3算法
输入:训练数据集D,特征集合A,阈值t
输出:决策树T
1.若D中所有实例都属于同一类k,则T为单结点树,将类k作为该结点的类标记,返回T;
2.若特征集合A为空集,则T为单结点树,将D中实例最多的类k作为该结点的类标记,返回T
3.否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Am;
如果Am的信息增益小于阈值t,则T为单结点数,将D中实例最多的类k作为该结点的类标记,返回T
4.否则,对Am的每一可能取值ai,根据Am=ai将D分割成非空子集Di(D的i为右上角标),
每个子集作为一个子节点,由输入结点及子结点构成树T,返回T
5.对第i个子节点,以Di为训练集,A-{Am}为特征集,递归调用ID3算法
C4.5算法
输入:训练数据集D,特征集合A,阈值t
输出:决策树T
1.若D中所有实例都属于同一类k,则T为单结点树,将类k作为该结点的类标记,返回T
2.若特征集合A为空集,则T为单结点树,将D中实例最多的类k作为该结点的类标记,返回T
3.否则,计算A中各特征对D的信息增益和信息增益率,
先找出信息增益高于平均水平的特征,再从中选择信息增益最大的特征Am;
如果Am的信息增益率小于阈值t,则T为单结点数,将D中实例最多的类k作为该结点的类标记,返回T
4.否则,对Am的每一可能取值ai,根据Am=ai将D分割成非空子集Di(D的i为右上角标),
每个子集作为一个子节点,由输入结点及子结点构成树T,返回T
5.对第i个子节点,以Di为训练集,A-{Am}为特征集,递归调用C4.5算法
ID3算法和C4.5算法都是递归产生决策树,直到不能继续下去未知,容易产生过拟合。
- 学习过程过多的考虑如何提高分类正确率,忽略了推广性,构建出过于复杂的决策树。
- 对训练数据很准确,但对未知测试数据的分类性能很差。
解决过拟合的方法——剪枝
9.4.2 决策树剪枝
剪枝可以降低决策树复杂度,在模型复杂度和对训练数据的拟合之间进行平衡。
根据剪枝所处的阶段不同:
- 预剪枝:在生成决策树的过程进行剪枝,剪枝和树构建同时进行。(生成决策树过程中,对每个结点在划分前先进行估计,若对该结点的划分不会带来决策树泛化性能的提升,则不进行该划分。)
- 后剪枝:先生成决策树,再进行修剪。(先从训练集生成一颗完整的决策树,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能的提升,则进行该替换 )
剪枝的核心问题——如何判断决策树泛化性能有提升?
留出法:从带标签的训练数据中划分一部分作为”验证集“,用于评估训练好的决策树的测试性能(在验证集熵评估训练模型的分类精度,判断模型的泛化能力)。
预剪枝算法:
技术路线:
- 在决策树生成算法中,假定选择了某个特征Am对数据进行划分,记划分前后的决策树分别为TB和TA。
- 分别计算使用TB和TA对验证集进行评估的性能,分类正确率记作PB和PA(这里m,B,A都是右下标,下同)。
- 如果PB<PA,表明划分之后决策树泛化性能更好,保留该划分,否则放弃。
后剪枝算法:
技术路线:
- 根据训练集数据,生成一颗完整的决策树。
- 从决策树最底部的叶结点开始,向上回缩。记一组叶结点(对应同一个父结点)回缩前后,决策树在验证集熵的正确率分别为PB和PA,如果PA>PB,满足剪枝条件,将改组叶结点并入其父节点,并将父节点作为新的叶结点。
- 如果PA<PB,表明回缩之后决策树泛化性能更差,放弃这次剪枝。
- 递归执行2-3步,直到不能继续为止。
后处理:
除了用决策树泛化性能的提升大小确定是否剪枝外,还可以根据整体代价是否会减少来确定。
其中前式代表训练误差,后式为决策树复杂度。
基于整体代价的决策树剪枝算法(后处理)
输入:决策树T,代价平衡参数α
输出:修剪之后的决策树Tα
1.计算每个结点的信息熵
2.从叶结点开始向上回缩,记一组叶结点回缩前后,决策树的整体代价分别为C(TB)和C(TA),如果C(TB)>=C(TA),
满足剪枝条件,将改组结点并入其父节点,将父节点作为新的叶结点
3.递归调用1-2步,直到不能继续为止
9.5 缺失值处理与连续特征值
缺失值处理
在实际应用中往往会面对样本不完整的情况,在面对不完整样本(某些属性值缺失)时,如何进行划分属性选择?或者给定划分属性,如果样本在该属性上的值确实,又如何对样本进行划分?
这里需要先为每个样本分配一个权重wi。举例:
记为样本集合D中属性a上没有缺失值的样本子集,
表示
中在属性a上取值为
的样本子集。
wi表示样本xi的权重,表示无缺失值样本所占的比例:
表示无缺失值样本中某个具体属性取值所占的比例:
针对第一个问题,使用所有包含给定属性值的样本集合计算属性的信息增益/增益率/基尼指数。
信息增益:
对第二个问题,如果样本xj在划分属性a中的取值未知,则将样本划分至所有的子结点,并根据子节点所占父节点比例调整权值。
连续特征决策树
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为{a1,a2,…,an}。(这里的1~n为右上角标)
基于划分点,可以将D分为Dt+和Dt-两个子集,其中Dt+包含哪些在属性a上取值大于t的样本,而Dt-包含哪些在属性a上取值不大于t的样本。
根据连续属性a和阈值t,对D进行划分,整个集合的信息熵变为:
根据连续属性a和阈值t,对D进行划分所获得的信息增益:
在特征选择的同时,确定合适的阈值t(使信息增益最大):
9.6 CART决策树
CART决策树:以二叉树形式进行组织的决策树,内部结点取值为‘是’和‘否’,分为回归决策树和分类决策树。
CART的构建由特征选择,决策树生成和决策树剪枝三部分组成,既可用于分类,也可用于回归。
回归树:使用最小平方误差准则进行特征选择。
分类树:使用基尼指数最小准则进行特征选择。
剪枝:后剪枝策略(自底向上),同时生成一系列剪枝结果,通过交叉验证,在独立的验证集熵对所有子树进行测试,确定最优的剪枝结果。其目标就是让决策树整体代价最小,即剪枝后代价不应高于剪枝前。
CART剪枝序列产生算法
输入:CART生成的决策树T0
输出:一系列剪枝后的子树ST0,ST1,...,STn
1.令k=0,ST0=T,Tree(k)=T0,α=+∞
2.自下而上对Tree(k)各内部结点t计算g(t)
3.对所有结点中g(t)值最小的进行剪枝,叶结点t的类别为其中多数样本的类别,得到树T,记录α=g(t),k=k+1,Tree(k)=T,STk=T
4.如果T不是由根结点及两个叶结点构成的树,返回2,否则结束
上述生成一系列剪枝后的子树算法中的g(t)求法如下:
其中Tt为以t为根节点的子树,C(T)为利用树T对训练数据的预测误差。
小结
1.这里才明白之前遇到的所有c类问题中提到的a=c表示的含义。其中c代表样本集的所有类别,a则代表属性的可能取值个数。
2.一些决策树的推广:
单变量决策树:决策树每个结点根据一个特征属性的取值进行分支。决策函数是这些分支的组合,其决策面表现为轴平行的性质,即,由若干个和坐标轴平行的线段组成。
多变量决策树:决策树每个结点更具若干个特征属性的线性组合进行分支,每个结点对应一个线性分类器。决策函数是这些线性分类器的组合,其决策面表现为分段线性。
随机森林:通过随机方法构建多个决策树,利用决策树分类结果进行投票,得到随机森林的分类结果,随机森林的泛化能力更强。
随机方法:生成决策树之前,先采用随机方法确定可用的训练数据和特征属性。
3.本章主要参考了周志华的西瓜书。