决策树(decision tree),亦称判定树,是一类常见的机器学习方法。
个人理解:由上图可看出,决策树就是通过将特征按层级划分,在上一层判断结果的基础上对下一层的特征值进行判定,如此循环往复,从而通过一系列判断结果产生决策。
一般地,一颗决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。
学习目的:产生一颗泛化能力强(处理未见示例能力强)的决策树。
决策树基本流程遵循简单而直观的“分而治之”(divide-and-conquer)策略。
根据下图伪代码可知,决策树的生成是一个递归过程。
导致递归返回的三种情况: |
对策 |
1.当前结点包含的样本全属于同一类别,无需划分; |
|
2.当前属性集为空,或是所有样本在所有属性上取值相同,无法划分; |
把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别(利用当前结点的后验分布) |
3.当前结点包含的样本集合为空,不能划分。 |
同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别(父结点的样本分布作为当前结点的先验分布) |
选择最优划分属性:一般来说,随着不断划分,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。
信息增益(information gain)
熵:度量不确定性的大小,衡量信息的缺失 |
信息熵(information entropy):度量样本集合纯度的常用指标。
假设当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|У|),则D的信息熵定义为:
Ent(D)的值越小,则D的纯度越高。
假定:
离散属性a,取值V个:{a1,a2,…,aV}
使用a对样本集D进行划分,产生v个分支结点
:第v个分支结点包含D中所有在属性a上的取值为av的样本
属性a对样本集D进行划分所获得的“信息增益”(information gain)为:
一般而言,信息增益越大,使用属性a进行划分所获得的“纯度提升”越大(即按此属性进行划分的不确定性越大)。
信息增益准则对可取值数目较多的属性有所偏好。
拓展:ID3决策树(ID: Iterative Dichotomiser迭代二分器)学习算法就是以信息增益为准则选择划分属性 |
例 |
数据集如下
计算信息增益如下:
|
增益率(gain ratio)
公式定义:
其中:
称为属性a的“固有值”(intrinsic value)。属性a可能的取值数目越多(V越大),IV(a)可能的值越大。
增益率准则对可取值数目较少的属性有所偏好。
拓展:C4.5算法并不是选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。 |
基尼指数(Gini index)
Gini(D)反映了从数据集D随机抽取两个样本,其类别标记不一致的概率。Gini(D)越小,数据集D纯度越高。
属性a的基尼指数定义为:
在候选集合A中,选择使划分后基尼指数最小的属性作为最优划分属性,即。
基尼系数、信息熵都是用来度量样本的纯度(混合度),基尼系数更多从样本的统计特性的角度来衡量,信息熵则更多从信息论的角度来衡量。
拓展:CART(Classification and Regression Tree)是一种著名的决策树学习算法,可用于分类或回归任务。CART算法使用基尼系数选择划分属性。 |
【补充】构建树的一般步骤:
树停止条件分为两类:
由于决策树使用“分而治之”的策略,因此其特别容易 “过拟合”。剪枝(pruning)是决策树对付过拟合的主要手段。
剪枝:决策树为尽可能正确分类训练样本,会不断重复划分结点导致其分支过多而造成过拟合,因此需要主动剪掉一些分支。
预剪枝(prepruning):生成决策树过程中,对每个结点划分前先对其进行估计,若当前结点的划分不能提升泛化性能,则停止划分并将其标记为叶结点;
后剪枝(postpruning):先训练出一颗完整的树,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能提升泛化性能,则将该子树替换为叶结点。
数据集如下表,
|
预剪枝 |
假设产生如下图4.5所示决策树,先对其泛化性能进行评估。根据训练集可知,若不进行划分,则只有根结点①,此时训练集中好瓜与坏瓜各占50%,因此假设将根结点①标记为“好瓜”(也可标记为坏瓜),在数据集中可以看出验证集上有三条数据被标记为好瓜,因此其验证集精度为37×100% 。 若将结点①划分,则产生图4.6的预剪枝决策树,根据训练集,结点②对应的脐部凹陷情况下好瓜标记占3/4,因此结点②标记为“好瓜”,同理,结点③、④分别标记为“好瓜”、“坏瓜”。而验证集中分类符合标记的数据数
量为5条,则验证精度为57×100% ,很明显,划分后验证精度大于划分前验证精度,因此对于结点①的预剪枝决策为“划分”。同理可得结点②③④的预剪枝决策。 如图4.6所示只有一层划分的决策树也称作“决策树桩”(decision stump)。 预剪枝降低了过拟合的风险,还显著减少了训练时间开销和测量时间开销。但其基于“贪心”本质带来了欠拟合的风险。 |
后剪枝 |
先从训练集生成一颗完整的决策树,假设生成上图4.5的树。根据数据集易知,该树验证集精度为42.9%(3/7)。 先考察最末层结点,如图中结点⑥。将结点⑥替换为叶结点(即将其分支去掉/剪除),根据其训练样本,结点⑥应标记为“好瓜”,计算其验证集精度为57.1%,则后剪枝决策为剪枝。同理,对剩余结点进行验证集精度检测,做出后剪枝决策。 后剪枝通常比预剪枝保留了更多的分支。一般情况下,后剪枝决策树的欠拟合风险很小,其泛化性能往往优于预剪枝决策树。但后剪枝训练时间开销大得多。 |
连续值处理(回归树):
理念——设定属性阈值,将树分割;最简单的策略——二分法(bi-partition)。
假定:
样本集D 连续属性a 划分点t
{a1,a2,…,an}为a在D上出现的不同取值,从大到小排序
基于t将D分为子集Dt- 、Dt+ ,Dt- 包含a*<=t,Dt+ 包含a*>t
对相邻属性取值ai和ai+1来说,t在[ai, ai+1)内取任意值产生的划分结果相同。则对连续属性a,包含n-1个元素的候选划分点集合(区间中位点作为候选划分点):
选取最优划分点进行样本集合的划分:
其中Gain(D,a,t) 是样本集基于划分点t二分后的信息增益,选择使其最大化的划分点即可。
例 |
数据集如下图: 计算密度的信息增益如下:
|
注:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。 |
缺失值处理:
现实任务中经常遇见不完整样本,即样本的某些属性值缺失。由此引出两个问题:
对于以上两个问题,给出以下解决方案(C4.5算法):
给定:
训练集D 属性a D 表示D 中在属性a 上没有缺失值的样本子集
a 有V 个可取值{a1,a2,…,aV},Dv 表示D 在a 上取值为av 的样本子集
Dk 表示D 中属于第k 类的样本子集(k =1,2,…,|У|)
假定为每个样本x赋予一个权重wx,并定义:
对属性a,ρ 表示无缺失值样本所占的比例,pk 表示无缺失值样本中第k类所占的比例,rv 表示无缺失值样本中在属性a上取值av 的样本所占的比例。显然,。
基于上述定义,将信息熵推广为:
由信息熵公式,有:
若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值在子结点中保持为wx。若样本x在属性划分a上的取值未知,则将所有x同时划入所有子结点,且样本权值在与属性值av对应的子结点中调整为;直观地看,就是让同一个样本以不同的概率划入到不同的子结点中去。
4.5多变量决策树:
决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel)——分类边界由若干个与坐标轴平行的分段组成。如下图所示:
多变量决策树(multivariate decision tree)可实现“斜划分”甚至更复杂的划分。
斜划分的决策树也叫“斜决策树”(oblique decision tree)。
在斜决策树中,非叶结点不再仅针对某个属性,而是对属性的线性组合进行测试:每个非叶结点都是一个形如 的线性分类器,w是属性a的权重,w和t可在该结点所含的样本集合属性集上学得。
多变量决策树试图建立一个合适的线性分类器,如下图所示:
【1】《机器学习》周志华
【2】“万门大学”课程——“机器学习原理与应用入门”