第四章-决策树
基本思路:
主要用于分类任务,其通过“分而治之”的思想,完成基于一个一个属性的分类,最终确定样例所属类别。
输入:训练集D={(x1,y1),(x2,y2),...,(xm,ym)};
属性集A={a1,a2,...,ad}
过程:函数Generate(D,A)
生成节点node
if D 中样本全属于同一类别 C then
将node标记为C类叶结点;return
end if
if A = 空集 OR D中样本在A上的取值相同then
将node标记为叶结点,其类别标记为D中样本数最多的类;return
end if
从A中选择最优划分属性a*
for a* 的每一个值 an do:
为node生成一个分支,令Dn表示D中在a*上取值为an的样本子集
if Dn 为空 then
将分支节点标记为叶结点,其类别标记为D中样本最多的类,return
else
以TreeGenerate(Dn,A\{an})为分支节点 //递归
end if
end for
输出:以node 为根节点的一颗决策树
共有三种情况使得递归返回:
(1)当前样本包含的样本全部属于同一个类别,不用划分
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
(3)当前节点包含的样本集合为空,不能划分
其中,我们可以发现,有一个关键过程,就是从A中选择最优划分属性,下面来谈谈如何进行最优划分属性选择
当我们进行划分时,总是希望能够在划分之后,各个子集能够尽可能的属于同一类别,即结点的“纯度”越来越高。由此一来,引入“信息熵”的概念。假定当前样本集合D中第k类样本所占的比例为(k=1,2,...,|y|),D的信息熵定义为:
信息熵反应了样本集合纯度,即这一类别下,有多少正例,多少反例,他们的数目是否相近。数目越相近,样本集合纯度越高。
再引入“信息增益”的概念,反应了这一分类下,各个子集中有多少正例,多少反例,他们的数目是否相近。其计算方法为:
信息增益可以直观地反应当前分类是否能够有效地“分而治之”。
实际上,“信息增益”对可取值数目较多的属性有所偏向,即可取值数目较多的类别,能够计算出较大的信息增益。
此时可引入“增益率”概念,来选择最优划分属性。其定义为:
其在原有的信息增益基础上,增加了数目,即可取值的数目越多(V越大),IV(a)的值也会越大,如此即可减少该类别下取值多带来的负面影响。需要注意的是,增益率对可取值数目较少的属性有所偏好。
除此之外,CART决策树使用“基尼指数”来判断数据集纯度,定义如下:
基尼指数越小,数据集D的纯度越高。他反应了从数据集D中随机抽取两个样本,其类别标记不一致的概率。
在生成决策树时,会产生“过拟合”的现象,因此,有“剪枝”操作。分为预剪枝和后剪枝。
预剪枝,是指在决策树生成过程中,对每个节点划分前,先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶子节点。判断方式为:使用验证集,对划分前后的精度进行计算。预剪枝在减小计算开销时,带来了欠拟合的风险。
后剪枝,是在生成完整决策树之后,从叶子节点开始,逐一进行验证集精度比较,在划分后若验证集精度下降,则进行“剪枝”。其欠拟合的风险很小,泛化性能往往优于预剪枝决策树,但是其训练时间开销要大得多。
连续与缺失值
之前讨论的是离散值,在面对类别下取值为连续值时,不能直接根据连续属性的可取值来对结点进行划分。此时,需要借助划分点 t 对样本集D进行划分。如何确定划分点呢?我们取各个相邻取值的中点,作为候选点。
对信息增益公式稍加改造:
这样,我们就能够根据各个点的选取信息增益的大小进行划分点 t 的选择
对于缺失值,我们需解决两个问题:
(1)如何在属性值缺失的情况下进行划分属性选择?
(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
问题一:我们可以通过修改信息增量的定义式,来解决这个问题。
我们通过如下公式,为每个样本附加一个权重
p表示无缺失值样本所占的比例
表示无缺失值样本中,第k类所占的比例
表示无缺失值样本中在属性a上取值
的样本所占的比例
下式为修改后的信息增量定义式,其内涵为:为每一个属性添加一个比例,这样既考虑了所有的样本,又考虑了缺失值的存在。
问题二:
若样本x在划分属性a上的取值已知,则将其划入与其取值对应的子节点,且样本权值在子节点汇总保持为;
若样本x在划分属性a上的取值未知,则将其同时划入所有子节点,且样本权值在与属性值对应的子节点中调整为
;
内涵:让同一个样本以不同的概率划入到不同的子节点中去
多变量决策树
上面讨论的决策树分类任务在图像上表示,都是以坐标轴为分界线,对样例进行分类,而实际过程中,可以设立多项式,训练多变量决策树,最终得到较好的分类效果。
如下,学得多变量决策树
对应的分类边界为:
其方法为:非叶结点对应的不再是某一个属性,而是对属性的线性组合进行测试。形如: