决策树
笔记摘要
- 决策树可以认为是if-then规则的集合,也可以认为是定义在特征空间上的条件概率分布
- 根据损失函数最小化的原则建立决策树模型
- 决策树的路径或其对应的if-then规则集合具有一个重要性质:互斥且完备
- 决策树的学习算法包含特征选择、决策树的生成与决策树的剪枝
- 决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择
熵
H(p)=H(X)=−i=1∑npilogpi
条件熵
- 随机变量
(X,Y)的联合概率分布为
P(X=xi,Y=yj)=pij,i=1,2,…,n;j=1,2,…,m
- 条件熵
H(Y∣X)表示在已知随机变量
X的条件下随机变量
Y的不确定性
H(Y∣X)=i=1∑npiH(Y∣X=xi)
其中
pi=P(X=xi),i=1,2,…,n
经验熵, 经验条件熵
- 当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵
信息增益
-
特征
A对训练数据集
D的信息增益
g(D∣A),定义为集合
D的经验熵
H(D)与特征
A给定的条件下
D的经验条件熵
H(D∣A)之差
g(D,A)=H(D)−H(D∣A)
-
熵与条件熵的差称为互信息
-
决策树中的信息增益等价于训练数据集中的类与特征的互信息
-
考虑ID这种特征, 本身是唯一的。按照ID做划分, 得到的经验条件熵为0, 会得到最大的信息增益。所以, 按照信息增益的准则来选择特征, 可能会倾向于取值比较多的特征
信息增益比
- 使用信息增益比可以对上面倾向取值较多的特征的问题进行校正
gR(D,A)=HA(D)g(D,A)HA(D)=−i=1∑nDDilog2DDi
ID3算法
输入:训练数据集
D, 特征集
A,阈值
ϵ
输出:决策树
T
- 如果
D中所有实例属于同一类
Ck,则
T为单节点树,并将类
Ck作为该节点的类标记,返回
T
- 如果
A是空集,则
T为单节点树,并将实例数最多的类作为该节点类标记,返回
T
- 计算
g, 选择信息增益最大的特征
Ag
- 如果
Ag的信息增益小于
ϵ,则置
T为单节点树,
D中实例数最大的类
Ck作为类标记,返回
T
- 否则,依
Ag=ai将D划分若干非空子集
Di,
Di中实例数最大的类
Ck作为类标记,构建子结点,由结点及其子结点 构成树
T,返回
T
-
Di训练集,
A−Ag为特征集,递归调用前面步骤,得到
Ti,返回
Ti
C4.5的生成算法
输入:训练数据集
D, 特征集
A,阈值
ϵ
输出:决策树
T
- 如果
D属于同一类
Ck,
T为单节点树,类
Ck作为该节点的类标记,返回
T
- 如果
A是空集, 置
T为单节点树,实例数最多的作为该节点类标记,返回
T
- 计算
g, 选择信息增益比最大的特征
Ag
- 如果
Ag的信息增益比小于
ϵ,
T为单节点树,
D中实例数最大的类
Ck作为类标记,返回
T
- 否则,依
Ag=ai将D划分若干非空子集
Di,
Di中实例数最大的类
Ck作为类标记,构建子结点,由结点及其子结点 构成树
T,返回
T
-
Di训练集,
A−Ag为特征集,递归调用前面步骤,得到
Ti,返回
Ti
树的剪枝
- 决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现的
- 树
T的叶结点个数为
∣T∣,
t是树
T的叶结点,该结点有
Nt个样本点,其中
k类的样本点有
Ntk个,
Ht(T)为叶结点
t上的经验熵,
α⩾0为参数,决策树学习的损失函数可以定义为
Cα(T)=i=1∑∣T∣NtHt(T)+α∣T∣
其中
Ht(T)=−k∑NtNtklogNtNtk
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
这时有
Cα(T)=C(T)+α∣T∣
其中
C(T)表示模型对训练数据的误差,
∣T∣表示模型复杂度,参数
α⩾0控制两者之间的影响
剪枝算法
输入:生成算法生成的整个树
T,参数
α
输出:修剪后的子树
Tα
- 计算每个结点的经验熵
- 递归地从树的叶结点向上回缩
假设一组叶结点回缩到其父结点之前与之后的整体树分别是
TB和
TA,其对应的损失函数分别是
Cα(TA)和
Cα(TB),如果
Cα(TA)⩽Cα(TB)则进行剪枝,即将父结点变为新的叶结点
- 返回2,直至不能继续为止,得到损失函数最小的子树
Tα
CART
- 决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼系数最小化准则,并进行特征选择,生成二叉树
最小二乘回归树生成算法
- 在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上地输出值,构建二叉决策树
输入:训练数据集
D
输出:回归树
f(x)
步骤:
- 遍历变量
j,对固定的切分变量
j扫描切分点
s,得到满足下面式子的
(j,s)
j,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
- 用选定的
(j,s), 划分区域并决定相应的输出值
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}c^m=N1xi∈Rm(j,s)∑yj,x∈Rm,m=1,2
- 对两个子区域调用(1)(2)步骤, 直至满足停止条件
- 将输入空间划分为
M个区域
R1,R2,…,RM,生成决策树:
f(x)=m=1∑Mc^mI(x∈Rm)
CART分类树的生成
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
- 如果样本集合
D根据特征
A是否取某一可能值
a被分割成
D1和
D2两部分,则在特征
A的条件下,集合
D的基尼指数定义为
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
输入:训练数据集
D,停止计算的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:
- 设结点地训练数据集为
D,计算现有特征对该数据集的基尼指数。此时,对每一个特征
A,对其可能取得每个值
a,根据样本点对
A=a的测试为“是”或“否”将
D分成
D1和
D2两部分,计算
A=a时的基尼指数
- 在所有可能的特征
A以及它们所有可能的切分点
a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依照最优特征和最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 对两个子结点递归地调用1、2,直至满足停止条件
- 生成CART决策树
- 算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于指定阈值,或者没有更多特征
习题解答
-
5.1 根据表 5.1 所给的训练数据集,利用信息增益比(C4.5 算法)生成决策树
- 编写程序计算信息增益比,并利用C4.5算法生成决策树,得到结果如下
特征(年龄)的信息增益比为: 0.052
特征(有工作)的信息增益比为: 0.352
特征(有自己的房子)的信息增益比为: 0.433
特征(信贷情况)的信息增益比为: 0.232
特征(年龄)的信息增益比为: 0.164
特征(有工作)的信息增益比为: 1.000
特征(有自己的房子)的信息增益比为: 0.340
- 决策树
{‘label:’: None, ‘feature’: 2, ‘tree’: {‘否’: {‘label:’: None, ‘feature’: 1, ‘tree’: {‘否’: {‘label:’: ‘否’, ‘feature’: None, ‘tree’: {}}, ‘是’: {‘label:’: ‘是’, ‘feature’: None, ‘tree’: {}}}}, ‘是’: {‘label:’: ‘是’, ‘feature’: None, ‘tree’: {}}}}
- 结果与ID3算法完全相同
-
5.2 已知如表 5.2 所示的训练数据,试用平方误差损失准则生成一个二叉回归树
-
5.3 证明 CART 剪枝算法中,当
α确定时,存在唯一的最小子树
Tα使损失函数
Cα(T)最小
- 利用反证法,假设存在两个最小子树使损失函数最小
设这两棵最小子树 为
T1 和
T2 ,其剪枝位置分别是
t1 和
t2 ,两者都能使得损失函数最小,即两者拥有相等的
Cα(T)
又有:
Cα(t1)<Cα(Tt1)Cα(t2)<Cα(Tt2)
即剪枝
t1,
t2 ,总能使得整体损失函数减小,因此对于子树
T1,
T2 ,总存在进一步的剪枝,使得损失函数进一步减小(在
T1 中剪枝
t2,在
T2 中剪枝
t1 ),因此
T1,
T2 不是最优的子树。
即不可能存在两棵及以上的最优子树
-
5.4 证明 CART 剪枝算法中求出的子树序列
{T0,T1,⋅⋅⋅,Tn}分别是区间
α∈[αi,αi+1)的最优子树
Tα ,这里
i=0,1,⋅⋅⋅,n,0=α0<α1<⋅⋅⋅<αn<+∞