1.基本流程##
一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应决策结果,其他每个节点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到字节点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一个泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循"分而治之"策略。
决策树学习基本算法
输入:
训练集 D = {(x1,y1),(x2,y2),....(xm,ym)}
属性集A = {a1,a2,...ad}
过程:
函数TreeGenerate(D,A)
生成结点Node;
if D中样本全属于同一级别C then
将node标记为C类叶结点; ---递归返回,情形(1)
return;
end if
if 属性集合A为空 或者 D中样本在A上取值相同 then
将node标记为叶结点,其类别标记为D中样本数最多的类; ---递归返回,情形(2)
return;
end if
从A中选择最优划分属性a; ---在第二部分讨论如何获得最优划分属性
for a 的每一个值 a' do
为node生成一个分支;
另Dv表示D中在a上取值为a’的样本子集;
if Dv为空 then
将分支结点标记为叶结点,其类别标记为D中样本最多的类; ---递归返回,情形(3)
return;
else
以TreeGenerate(D,A-a)为分支结点; ---从A中去掉属性a
end if
end for
输出: 以node为根结点的一棵决策树
决策树的生成是一个递归过程,在决策树基本算法中,有三种情形会导致递归返回:(1)当前节点包含的样本全部属于同一类别,无需 划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法 划分;(3)当前节点包含的样本集合为空,不能 划分;
在第(2)种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点中所含样本最多的类别,利用的当前结点的后验分布;
在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别,把父结点的样本分布作为当前结点的先验分布;
2.划分选择##
1.信息增益
信息熵是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占的比例为pk,则D的信息熵定义如下,
\(Ent(D)=-\sum_{k=1}^{|y|}p_{k} * log_{2}(p_{k})\) (公式1)
假定离散属性a有V个可能的取值,{a1,a2,...aV},使用属性a对样本集合D进行划分,会产生V个分支结点,其中第v个分支结点包含了D中所有再属性a上取值为av的样本,记为Dv,属性a对样本集合D进行划分所得的"信息增益"为,
\(Gain(D,a) = Ent(D) - \sum_{v=1}^{V}\frac{|D_{v}|}{|D|} * Ent(D^{v})\) (公式2)
一般而言,信息增益越大越大,说明使用属性a进行划分所获得的"纯度提升"越大,因此,我们可以用信息增益来进行决策树的划分属性选择,如下所示,
\(a* = argmax G(D,a),a\in A\) (公式3)
ID3 决策树算法以信息增益为准则来选择划分属性。
2.信息增益率
实际上,信息增益准则对于可取值数目较多的属性有所偏好,为了减少这种偏好可能带来的不利影响,C4.5决策树算法没有直接使用信息增益,而是使用"增益率"来选择最有划分属性。
\(GainRatio(D,a) = \frac{Gain(D,a)}{IV(a)}\)
其中,\(IV(a) = -\sum_{v=1}^{V}\frac{|D^{v}|}{|D|} * log_{2}\frac{|D^{v}|}{|D|}\)
信息增益率对可取值数目较少的属性有所偏好,因此C4.5算法使用了启发式方法,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择信息增益率高的属性。
3,.基尼指数
CART决策树使用"基尼指数"来选择划分属性。
数据集合D的纯度可用基尼值来度量,
\(Gini(D) = \sum_{k=1}^{|y|}\sum_{k^{'}\ne k}p_{k}p_{k^{'}} = 1 - \sum_{k=1}^{|y|}p^{2}_{k}\)
Gini(D)返回应了从数据集D中随机抽取两个样本,其类别标记不一致的概率,Gini(D)越小,则数据集合D的纯度越高。
属性a的基尼指数定义为,
\(GiniIndex(D,a) = \sum_{v=1}^{V}\frac{|D^{v}|}{|D|} * Gini(D^{v})\)
3.减枝处理##
决策树减枝的基本策略有"预减枝"和"后减枝"。
预减枝是指再决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
后减枝则是先从训练集上生成一棵完整的决策树,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则减该子树替换为叶结点。
1.预减枝
优点: 预减枝使得决策树的很多分支没有"展开",这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。
缺陷: 有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却又可能导致性能显著提高;预减枝基于"贪心"本质禁止了这些分支展开,给预减枝决策树带来了欠拟合的风险。
2.后减枝
优点: 后减枝决策树通常比预减枝决策树保留了更多的分支,一般情形下,后减枝决策树的欠拟合风险很小,泛化性能往往优于预减枝决策树。
缺陷: 后减枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未减枝决策树和预减枝决策树都要大得多。
4.连续与缺失值##
1.连续值处理
C4.5 决策树采用二分法对连续属性进行处理。
2.缺失值处理
两个问题:
(1) 如何在属性值缺失的情况下进行划分属性选择?
(2) 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
问题(1),可以根据样本集合D中在属性a上没有缺失值的样本子集来判断属性a的优劣;
问题(2),若样本在划分属性上的取值已知,则将样本划入与其取值对应的子结点;若样本在划分属性上的取值未知,则将样本同时划入所有子结点;