#

机器学习(五)


决策树

笔记摘要

  • 决策树可以认为是if-then规则的集合,也可以认为是定义在特征空间上的条件概率分布
  • 根据损失函数最小化的原则建立决策树模型
  • 决策树的路径或其对应的if-then规则集合具有一个重要性质:互斥且完备
  • 决策树的学习算法包含特征选择、决策树的生成与决策树的剪枝
  • 决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择

H(p)=H(X)=i=1npilogpiH(p)=H(X)=-\sum_{i=1}^{n}p_i\log p_i

  • 熵只与XX的分布有关,与XX取值无关

  • 定义0log0=00\log0=0,熵是非负的

  • 表示随机变量不确定性的度量

条件熵

  • 随机变量(X,Y)(X,Y)的联合概率分布为

P(X=xi,Y=yj)=pij,i=1,2,,n;j=1,2,,mP(X=x_i,Y=y_j)=p_{ij}, i=1,2,\dots ,n;j=1,2,\dots ,m

  • 条件熵H(YX)H(Y|X)表示在已知随机变量XX的条件下随机变量YY的不确定性

H(YX)=i=1npiH(YX=xi)H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i)

其中pi=P(X=xi),i=1,2,,np_i=P(X=x_i),i=1,2,\dots ,n

经验熵, 经验条件熵

  • 当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵

信息增益

  • 特征AA对训练数据集DD的信息增益g(DA)g(D|A),定义为集合DD的经验熵H(D)H(D)与特征AA给定的条件下DD的经验条件熵H(DA)H(D|A)之差

g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)

  • 熵与条件熵的差称为互信息

  • 决策树中的信息增益等价于训练数据集中的类与特征的互信息

  • 考虑ID这种特征, 本身是唯一的。按照ID做划分, 得到的经验条件熵为0, 会得到最大的信息增益。所以, 按照信息增益的准则来选择特征, 可能会倾向于取值比较多的特征

信息增益比

  • 使用信息增益比可以对上面倾向取值较多的特征的问题进行校正

gR(D,A)=g(D,A)HA(D)HA(D)=i=1nDiDlog2DiDg_R(D,A)=\frac{g(D,A)}{H_A(D)}\\ H_A(D)=-\sum_{i=1}^n\frac{D_i}{D}log_2\frac{D_i}{D}

ID3算法

输入:训练数据集DD, 特征集AA,阈值ϵ\epsilon
输出:决策树TT

  1. 如果DD中所有实例属于同一类CkC_k,则TT为单节点树,并将类CkC_k作为该节点的类标记,返回TT
  2. 如果AA是空集,则TT为单节点树,并将实例数最多的类作为该节点类标记,返回TT
  3. 计算gg, 选择信息增益最大的特征AgA_g
  4. 如果AgA_g的信息增益小于ϵ\epsilon,则置TT为单节点树,DD中实例数最大的类CkC_k作为类标记,返回TT
  5. 否则,依Ag=aiA_g=a_i将D划分若干非空子集DiD_iDiD_i中实例数最大的类CkC_k作为类标记,构建子结点,由结点及其子结点 构成树TT,返回TT
  6. DiD_i训练集,AAgA-A_g为特征集,递归调用前面步骤,得到TiT_i,返回TiT_i

C4.5的生成算法

  • 改用信息增益比来选择特征

输入:训练数据集DD, 特征集AA,阈值ϵ\epsilon
输出:决策树TT

  1. 如果DD属于同一类CkC_kTT为单节点树,类CkC_k作为该节点的类标记,返回TT
  2. 如果AA是空集, 置TT为单节点树,实例数最多的作为该节点类标记,返回TT
  3. 计算gg, 选择信息增益比最大的特征AgA_g
  4. 如果AgA_g信息增益比小于ϵ\epsilonTT为单节点树,DD中实例数最大的类CkC_k作为类标记,返回TT
  5. 否则,依Ag=aiA_g=a_i将D划分若干非空子集DiD_iDiD_i中实例数最大的类CkC_k作为类标记,构建子结点,由结点及其子结点 构成树TT,返回TT
  6. DiD_i训练集,AAgA-A_g为特征集,递归调用前面步骤,得到TiT_i,返回TiT_i
  • ID3和C4.5在生成上,差异只在准则的差异

树的剪枝

  • 决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现的
  • TT的叶结点个数为T|T|tt是树TT的叶结点,该结点有NtN_t个样本点,其中kk类的样本点有NtkN_{tk}个,Ht(T)H_t(T)为叶结点tt上的经验熵, α0\alpha\geqslant 0为参数,决策树学习的损失函数可以定义为

Cα(T)=i=1TNtHt(T)+αTC_\alpha(T)=\sum_{i=1}^{|T|}N_tH_t(T)+\alpha|T|

其中

Ht(T)=kNtkNtlogNtkNtH_t(T)=-\sum_k\frac{N_{tk}}{N_t}\log \frac{N_{tk}}{N_t}

C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtkNtC(T)=\sum_{t=1}^{|T|}N_tH_t(T)\color{black}=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t}

这时有

Cα(T)=C(T)+αTC_\alpha(T)=C(T)+\alpha|T|

其中C(T)C(T)表示模型对训练数据的误差,T|T|表示模型复杂度,参数α0\alpha \geqslant 0控制两者之间的影响

剪枝算法

输入:生成算法生成的整个树TT,参数α\alpha

输出:修剪后的子树TαT_\alpha

  1. 计算每个结点的经验熵
  2. 递归地从树的叶结点向上回缩
    假设一组叶结点回缩到其父结点之前与之后的整体树分别是TBT_BTAT_A,其对应的损失函数分别是Cα(TA)C_\alpha(T_A)Cα(TB)C_\alpha(T_B),如果Cα(TA)Cα(TB)C_\alpha(T_A)\leqslant C_\alpha(T_B)则进行剪枝,即将父结点变为新的叶结点
  3. 返回2,直至不能继续为止,得到损失函数最小的子树TαT_\alpha
  • 决策树的剪枝算法可以由一种动态规划的算法实现

CART

  • 决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼系数最小化准则,并进行特征选择,生成二叉树

最小二乘回归树生成算法

  • 在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上地输出值,构建二叉决策树

输入:训练数据集DD
输出:回归树f(x)f(x)
步骤:

  1. 遍历变量jj,对固定的切分变量jj扫描切分点ss,得到满足下面式子的(j,s)(j,s)

minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]\min\limits_{j,s}\left[\min\limits_{c_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min\limits_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2\right]

  1. 用选定的(j,s)(j,s), 划分区域并决定相应的输出值

R1(j,s)={xx(j)s},R2(j,s)={xx(j)>s}c^m=1NxiRm(j,s)yj,xRm,m=1,2R_1(j,s)=\{x|x^{(j)}\leq s\}, R_2(j,s)=\{x|x^{(j)}> s\} \\ \hat{c}_m= \frac{1}{N}\sum\limits_{x_i\in R_m(j,s)} y_j, x\in R_m, m=1,2

  1. 对两个子区域调用(1)(2)步骤, 直至满足停止条件
  2. 将输入空间划分为MM个区域R1,R2,,RMR_1, R_2,\dots,R_M,生成决策树:

f(x)=m=1Mc^mI(xRm)f(x)=\sum_{m=1}^M\hat{c}_mI(x\in R_m)

  • 课后题有详细例子

CART分类树的生成

  • 分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点

  • 概率分布的基尼指数定义

Gini(p)=k=1Kpk(1pk)=1k=1Kpk2Gini(p) = \sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2

  • 如果样本集合DD根据特征AA是否取某一可能值aa被分割成D1D_1D2D_2两部分,则在特征AA的条件下,集合DD的基尼指数定义为

Gini(D,A)=D1DGini(D1)+D2DGini(D2)Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)

输入:训练数据集DD,停止计算的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:

  1. 设结点地训练数据集为DD,计算现有特征对该数据集的基尼指数。此时,对每一个特征AA,对其可能取得每个值aa,根据样本点对A=aA=a的测试为“是”或“否”将DD分成D1D_1D2D_2两部分,计算A=aA=a时的基尼指数
  2. 在所有可能的特征AA以及它们所有可能的切分点aa中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依照最优特征和最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用1、2,直至满足停止条件
  4. 生成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αT_α使损失函数 Cα(T)C_α(T)最小

    • 利用反证法,假设存在两个最小子树使损失函数最小
      设这两棵最小子树 为T1T_1​ 和 T2T_2​ ,其剪枝位置分别是 t1t_1​ 和 t2t_2​ ,两者都能使得损失函数最小,即两者拥有相等的 Cα(T)C_\alpha(T)​
      又有:

Cα(t1)<Cα(Tt1)Cα(t2)<Cα(Tt2)C_\alpha(t_1)<C_\alpha(T_{t1})\\ C_\alpha(t_2)<C_\alpha(T_{t2})

即剪枝t1t_1,t2t_2 ,总能使得整体损失函数减小,因此对于子树 T1T_1, T2T_2 ,总存在进一步的剪枝,使得损失函数进一步减小(在 T1T_1 中剪枝 t2t_2,在 T2T_2 中剪枝 t1t_1 ),因此 T1T_1, T2T_2 不是最优的子树。
即不可能存在两棵及以上的最优子树

  • 5.4 证明 CART 剪枝算法中求出的子树序列{T0,T1,,Tn}\{T_0,T_1,⋅⋅⋅,T_n\}分别是区间 α[αi,αi+1)α∈[α_i,α_{i+1})的最优子树TαT_\alpha ,这里i=0,1,,n,0=α0<α1<<αn<+i=0,1,⋅⋅⋅,n,0=\alpha_0<\alpha_1<\cdot\cdot\cdot<\alpha_n<+\infty

文章作者: 王胜鹏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王胜鹏 !
评论
 上一篇
机器学习(六) 机器学习(六)
逻辑斯谛回归与最大熵模型 logistic regression是统计学习中的经典分类方法。最大熵是概率模型学习的一个准则,推广到分类问题得到最大熵模型(maxium entropy model) 这两种模型都属于对数线性模型 逻辑斯谛
2021-10-30
下一篇 
机器学习(四) 机器学习(四)
朴素贝叶斯法 笔记摘要 条件概率分布P(X=x∣Y=ck)P(X=x|Y=c_k)P(X=x∣Y=ck​)有指数级数量的参数,其实际估计是不可行的 指数级数量的参数 K∏j=1nSjK\prod_{j=1}^nS_jK∏j=1
2021-10-30
  目录