决策树
笔记摘要
- 决策树可以认为是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<+∞