第四章 决策树

来源:互联网 发布:矩阵霸主音响套装 编辑:程序博客网 时间:2024/06/07 09:24

1、基本流程

西瓜问题的决策过程:
这里写图片描述
根结点包含样本全集。
叶结点对应决策结果。(类别标记为样例中最多的类别)
其他结点对应属性测试,每个结点包含的样本集合根据属性测试的结果被划分到不同的子结点。

2、划分选择

即如何选择最优划分属性,使得决策树的分支结点所包含的样本尽可能属于同一类别。

(1)信息增益

信息熵(information entropy):度量样本集合纯度的指标。
假设样本集合D中第k类样本所占比例为pk(k=1,2,...,|y|),则D的信息熵定义为:

Ent(D)=k=1|y|pklog2pk

Ent(D)越小,D的纯度越高

信息增益(information gain)
假定离散属性a有V个可能的取值{a1,a2,...,aV}。用a对样本D进行划分会产生V个分支结点,其中第i个分支结点包含了D中所有属性a上取值为ai的样本,即为Di
根据信息熵公式计算Di的信息熵Ent(Di)
根据样本数,给第i个分支结点赋予权重|Di|/|D|
计算出用属性a对样本集D划分所获得的信息增益为:

Gain(D,a)=Ent(D)i=1V|Di||D|Ent(Di)

信息增益越大,使用属性a来划分所获得的纯度提升越大。
ID3决策树就是以信息增益为准则来选择划分属性。

(2)信息增益率

由于信息增益准则对可取值数目较多的属性有偏好,为了避免可能带来的不利影响,C4.5决策树采用“增益率gain ratio”来选择最优划分属性。

Gain_ratio(D,a)=Gain(D,a)IV(a)

其中:
IV(a)=i=1V|Di||D|log2|Di||D|

属性a的可能取值数V越大,IV(a)越大。
信息增益率准则偏好取值数目少的属性。

选择划分属性的方法:1)从候选划分属性中选出信息增益高于平均水平的属性。2)再从中选择增益率最高的。

(3)基尼指数

数据集D的纯度可用基尼值来度量:

Gini(D)=k=1|y|kkpkpk=1k=1|y|p2k

Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。Gini(D)越小,数据集D的纯度越高。
属性a的基尼指数为:
Gini_index(D,a)=i=1V|Di||D|Gini(Di)

选择使得划分后基尼指数最小的属性即可。

CART决策树采用基尼指数作为准则。注意:CART是二叉树,所以对与有多个取值的属性。
离散的:可以将取值集合划分为2^n-1种可能的两个子集
连续的:以排序后相邻值的中点作为划分点
依次计算基尼指数,选择基尼指数最小的作为最佳划分点。
CART决策树采用后剪枝。

3、剪枝处理(pruning)

剪枝是决策树学习算法应对“过拟合”的主要手段。
基本策略有:
预剪枝:在决策树生成过程中,对每个结点在划分前预先估计,如果当前结点的划分不能提升决策树的泛化性能,则停止划分并标记为叶结点。
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上的对非叶结点进行考察。如果该结点对应的子树替换为叶结点能提升决策树的泛化性能,则替换为叶结点。
以西瓜数据集为例:
训练集测试集划分未剪枝的决策树

(1)预剪枝(prepruning)

预剪枝要对划分前后的泛化性能进行估计。
这里写图片描述
step1: 在结点①,基于信息增益准则,选择“脐部”为划分属性。测试集精度:划分前=3/7;划分后=5/7。可以划分。
step2:在结点②,基于信息增益准则,选择“色泽”为划分属性。测试集精度:划分前=5/7;划分后=4/7(编号5被分错)。不可划分。
step3:在结点③,划分属性为“根蒂”,测试集精度不变。不可划分。
step4:在结点④,所有样本已经是同一类别,不再划分。
优点:降低过拟合的风险;减少了训练和测试的时间开销。
缺点:贪心本质(有些分支的划分当前不能提升泛化性能,后序可能会有提高),有欠拟合的风险。

(2)后剪枝(post-pruning)

这里写图片描述
自底向上考察,如果用叶结点替换子树,泛化性能是否有提升。
优点:欠拟合风险小,泛化性能往往优于预剪枝。
缺点:自底向上考察所有非叶结点,时间开销大。

一般后剪枝比较常用。

4、连续与缺失值

(1)连续值处理

二分法(bi-partition)
C4.5决策树中采用此机制。
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,按增序排列{a1,a2,...,an}。基于划分点t将D分为子集D+t(a>t)Dt(at)
如何选取划分点t?
考察包含n-1个元素的候选划分点集合Ta={ai+ai+12|1in1}
分别计算信息增益,选取后的最大信息增益的划分点。

Gain(D,a)=maxtTaGain(D,a,t)=maxtTaEnt(D)λ{,+}|Dλt||D|Ent(Dλt)

(2)缺失值处理

需要解决两个问题:
1)属性缺失,如何进行划分属性选择?
数据集D,在属性a上没有缺失值的样本子集D˜D˜i表示D˜中在属性a上取值为ai的子集,D˜k表示在D˜中属于第k类(k=1,2,…,|y|)的子集,则有D˜=|y|k=1D˜k
D˜=Vi=1D˜i。假设每个样本赋予权重wx,并定义

ρ=xD˜wxxDwx

p˜k=xD˜kwxxD˜wx(1k|y|)

r˜i==xD˜iwxxD˜wx(1iV)

其中,ρ表示无缺失值样本所占比例,p˜k表示无缺失值样本中第k类所占比例,r˜i表示无缺失值样本中属性a取值为i的样本所占比例。|y|k=1p˜k=1Vi=1r˜i=1
信息增益计算公式:
Gain(D,a)=ρGain(D˜,a)=ρ(Ent(D˜)i=1VEnt(D˜i))

其中,
Ent(D˜)=k=1|y|p˜klog2p˜k

2)给定划分属性,若样本属性值缺失,如何对样本进行划分?
若样本属性值已知,则将x划入对应值的子结点,保持样本权重wx
若属性值未知,则将x同时划入所有子结点,在对应值ai分支的样本权重调整为wr˜ix

5、多变量决策树

非叶结点不再仅对某个属性,而是对属性的线性组合进行测试。

即,区分传统的单变量决策树,多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器