《统计学习方法》(第五章)—— 决策树

本文围绕决策树模型展开,介绍了其定义、与if - then规则和条件概率分布的关系,以及学习本质。阐述了特征选择的准则,如信息增益和信息增益比。还详细讲解了决策树的生成算法(ID3、C4.5)、剪枝方法,以及CART算法(回归树和分类树)的生成与剪枝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

决策树模型和学习

决策树模型

  • 定义:分类决策树模型是一种描述对实例分类的树型结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶节点表示一个类

决策树于if-then规则

  • 可以将决策树看成一个if-then规则的集合。将决策树转换成if-then规则的过程是这样,每个内部结点代表一种规则,然后根据规则进行划分,最后到叶节点后,根据决策规则进行类别判别。

决策树与条件概率分布

  • 决策树也可以表示给定特征条件下类别的条件概率分布。这一条件概率分布对应空间上的一个划分,最终叶子结点是个条件概率P(Y∣X)P(Y|X)P(YX)

决策树学习

  • 给定D={(x1,y1),(x2,y2),...,(xN,yN)}D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}D={(x1,y1),(x2,y2),...,(xN,yN)}其中xi=(xi(1),xi(2),...,xi(n))T,yi∈{1,2,...,K}x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T,y_i \in\{1,2,...,K\}xi=(xi(1),xi(2),...,xi(n))T,yi{1,2,...,K}表示其类别
    决策树学习本质上是对训练数据中归纳出一种规则。与训练数据不相矛盾且具有很好的泛化能力,其学习也是定义一个损失函数,然后优化最小损失函数,但其是个NP完全问题,通常用启发式算法进行解决,递归的选择最优特征再生成决策树,最后再进行全局剪枝。

特征选择

特征选择问题

  • 选取比较好的特征具有很好的分类能力,通常特征选择的准则是信息增益或信息增益比

信息增益

  • 熵表示随机变量的不确定性的度量
       P(X=xi)=pi,i=1,2,...,nP(X=x_i)=p_i,i=1,2,...,nP(X=xi)=pi,i=1,2,...,n
      H(X)=−∑i=1npilog⁡pi,H(X)=-\sum\limits_{i=1}^np_i\log\limits{p_i},H(X)=i=1npilogpi,定义:0log⁡0=00\log\limits{0}=00log0=0
      满足不等式0≤H(p)≤log⁡n0\le H(p)\le\log\limits{n}0H(p)logn
      (X,Y)联合分布概率,P(X=xi,Y=yj)=pij,i=1,2,...,,n;j=1,2,...,m(X,Y)联合分布概率,P(X=x_i,Y=y_j)=p_{ij},i=1,2,...,,n;j=1,2,...,m(X,Y)P(X=xi,Y=yj)=pij,i=1,2,...,,n;j=1,2,...,m
      条件熵H(Y∣X)=∑i=1npiH(Y∣X=xi),pi=P(X=xi),i=1,2,...,nH(Y|X)=\sum\limits_{i=1}^np_iH(Y|X=x_i),p_i=P(X=x_i),i=1,2,...,nH(YX)=i=1npiH(YX=xi),pi=P(X=xi),i=1,2,...,n
      信息增益定义:特征AAA对训练数据集DDD的信息增益g(D,A),g(D,A),g(D,A),定义为集合DDD的经验熵H(D)H(D)H(D)与特征AAA给定条件下DDD的经验条件熵H(D∣A)之差H(D|A)之差H(DA)
          g(D,A)=H(D)−H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)H(DA)也叫作互信息,越大表示特征A对数据区分度越好
  • 算法:
      输入:训练数据D4和特征D4和特征D4A$
      输出:特征AAA对训练数据集DDD的信息增益g(D,A)g(D,A)g(D,A)
      (1).(1).(1).计算数据集D的经验熵H(D)H(D)H(D)
          H(D)=−∑k=1K∣Ck∣∣D∣log⁡2∣Ck∣∣D∣H(D)=-\sum\limits_{k=1}^K\frac{|C_k|}{|D|}\log\limits_2\frac{|C_k|}{|D|}H(D)=k=1KDCk2logDCk
      (2).(2).(2).计算特征AAA对数据集DDD的经验条件熵H(D∣A)H(D|A)H(DA)
          H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=−∑i=1n∣Di∣∣D∣log⁡2∣Dik∣∣D∣H(D|A)=\sum\limits_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\log\limits_2\frac{|D_{ik}|}{|D|}H(DA)=i=1nDDiH(Di)=i=1nDDi2logDDik
      (2).(2).(2).计算信息增益
          g(D,A)=H(D)−H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)H(DA)

信息增益比

  信息增益划分数据存在一个问题,偏向于取值多的特征,因此引入信息增益比进行矫正。
  定义:特征AAA对训练数据集DDD的信息增益比gR(D,A),g_R(D,A),gR(D,A),定义信息增益g(D,A),g(D,A),g(D,A),与训练数据集DDD关于A值的熵HA(D)H_A(D)HA(D)之比
      gR(D,A)=g(D,A)HA(D)g_R(D,A)=\frac{g(D,A)}{H_A(D)}gR(D,A)=HA(D)g(D,A)
  其中HA(D)=−∑i=1n∣Di∣∣D∣log⁡2∣Di∣∣D∣H_A(D)=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\log\limits_2\frac{|D_i|}{|D|}HA(D)=i=1nDDi2logDDi

决策树的生成

ID3算法

  • 算法:
      输入:训练数据集DDD,特征集AAA阈值ε\varepsilonε
      输出:决策树TTT
      (1).(1).(1).DDD中所有实例属于同一类CK,C_K,CK,TTT为单节点树,并将类CkC_kCk作为该节点的类标记,返回TTT
      (2).(2).(2).A=∅A=\emptyA=,则TTT为单节点树,并将DDD中实例最大的类别CkC_kCk作为该节点的类标记,返回TTT
      (3).(3).(3).否则,计算AAA中各种特征对DDD的信息增益,选择信息增益最大的特征AgA_gAg
      (4).(4).(4).如果AgA_gAg的信息增益小于阈值ε\varepsilonε,则置TTT为单叶子节点,并将DDD中实例数最大的类别CkC_kCk作为该节点的类标记,返回TTT
      (5).(5).(5).否则,对AgA_gAg中每个可能值Ag=aiA_g=a_iAg=aiDDD分割为若干非空子集DiD_iDi,将DiD_iDi中实例数最大的作为标记,由此节点构建子树TTT
      (6)(6)(6)对第iii个子节点,以DiD_iDi为训练集,以A−{Ag}A-\{A_g\}A{Ag}为特征集,递归调用(1)−(5)(1)-(5)(1)(5)得到子树TiT_iTi,返回TiT_iTi

C4.5的生成算法

  • 算法:
      输入:训练数据集DDD,特征集AAA阈值ε\varepsilonε
      输出:决策树TTT
      (1).(1).(1).DDD中所有实例属于同一类CK,C_K,CK,TTT为单节点树,并将类CkC_kCk作为该节点的类标记,返回TTT
      (2).(2).(2).A=∅A=\emptyA=,则TTT为单节点树,并将DDD中实例最大的类别CkC_kCk作为该节点的类标记,返回TTT
      (3).(3).(3).否则,计算AAA中各种特征对DDD的信息增益比,选择信息增益比最大的特征AgA_gAg
      (4).(4).(4).如果AgA_gAg的信息增益小于阈值ε\varepsilonε,则置TTT为单叶子节点,并将DDD中实例数最大的类别CkC_kCk作为该节点的类标记,返回TTT
      (5).(5).(5).否则,对AgA_gAg中每个可能值Ag=aiA_g=a_iAg=aiDDD分割为若干非空子集DiD_iDi,将DiD_iDi中实例数最大的作为标记,由此节点构建子树TTT
      (6)(6)(6)对第iii个子节点,以DiD_iDi为训练集,以A−{Ag}A-\{A_g\}A{Ag}为特征集,递归调用(1)−(5)(1)-(5)(1)(5)得到子树TiT_iTi,返回TiT_iTi

决策树剪枝

  决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现,设数TTT的叶节点个数∣T∣|T|T,ttt是数TTT的叶节点,该叶节点有NtN_tNt个样本点,其中kkk类的样本点有NtkN_{tk}Ntk个,k=1,2,...,K,H(T)k=1,2,...,K,H(T)k=1,2,...,K,H(T)为叶节点ttt上的经验熵,α≥0\alpha\ge0α0为参数,则决策树学习的损失函数可以定义为:
      Ca(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_a(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)+\alpha|T|Ca(T)=t=1TNtHt(T)+αT
  其经验熵为
      Ht(T)=−∑kNtkNtlog⁡NtkNtH_t(T)=-\sum\limits_k\frac{N_{tk}}{N_t}\log\limits\frac{N_{tk}}{N_t}Ht(T)=kNtNtklogNtNtk
  在损失函数中,将上上式右边第一项记作
      C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklog⁡NtkNtC(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)=-\sum\limits_{t=1}^{|T|}\sum\limits_{k=1}^KN_{tk}\log\limits\frac{N_{tk}}{N_t}C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk
  这时有
      Ca(T)=C(T)+α∣T∣C_a(T)=C(T)+\alpha|T|Ca(T)=C(T)+αT

  • 算法:
      输入:生成算法产生整个树TTT,参数α\alphaα
      输出:修减后的子树TaT_aTa
      (1).(1).(1).计算每个节点的经验熵
      (2).(2).(2).递归地从树的叶节点向上回缩
      设一组叶节点回缩到其父亲节点之前与之后的整体树分别为TBT_BTBTAT_ATA,其对应的损失函数值分别是Ca(TB)C_a(T_B)Ca(TB)Ca(TA)C_a(T_A)Ca(TA),如果Ca(TA)≤Ca(TB)C_a(T_A)\le C_a(T_B)Ca(TA)Ca(TB)则进行剪枝,即将父亲节点变为新的叶节点
      (3).(3).(3).返回(2)(2)(2)直到不能执行为止

CART算法

CART生成

  • 回归树
      回归树是用来输出连续变量的
      假设XXXYYY分别为输入和输出变量,并且YYY是连续变量,给定训练数据集
          D={(x1,y1),(x2,y2),...,(xN,yN)}D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}D={(x1,y1),(x2,y2),...,(xN,yN)}
      回归树就是把输入划分为MMM个单元R1,R2,...,RMR_1,R_2,...,R_MR1,R2,...,RM,并且在单元RmR_mRm上固定输出cmc_mcm
          f(x)=∑m=1Mc^mI(x∈Rm)f(x)=\sum\limits_{m=1}^M\hat{c}_mI(x\in R_m)f(x)=m=1Mc^mI(xRm),由平方误差知∑xi∈Rm(yi−f(xi))2\sum\limits_{x_i\in R_m}(y_i-f(x_i))^2xiRm(yif(xi))2
          c^m=ave(yi∣xi∈Rm)\hat{c}_m=ave(y_i|x_i \in R_m)c^m=ave(yixiRm)最优
      选取最优划分第jjj个变量x(j)x^{(j)}x(j)的取值sss进行划分
        R1(j,s)={x∣x(j)≤s}R_1(j,s)=\{x|x^{(j)}\le s\}R1(j,s)={xx(j)s}    R2(j,s)={x∣x(j)>s}R_2(j,s)=\{x|x^{(j)}> s\}R2(j,s)={xx(j)>s}
          minj,s[minc1∑xi∈R1(j,s)(yi−c1)2+minc2∑xi∈R2(j,s)(yi−c2)2]min_{j,s}[min_{c_1}\sum\limits_{x_i \in R_1(j,s)}(y_i-c_1)^2+min_{c_2}\sum\limits_{x_i \in R_2(j,s)}(y_i-c_2)^2]minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
          c^1=ave(yi∣xi∈R1(j,s))\hat{c}_1=ave(y_i|x_i \in R_1(j,s))c^1=ave(yixiR1(j,s))  c^2=ave(yi∣xi∈R2(j,s))\hat{c}_2=ave(y_i|x_i \in R_2(j,s))c^2=ave(yixiR2(j,s))
  • 算法:
      输入:训练数据集D:D:D:
      输出:回归树f(x)f(x)f(x)
      (1).minj,s[minc1∑xi∈R1(j,s)(yi−c1)2+minc2∑xi∈R2(j,s)(yi−c2)2](1).min_{j,s}[min_{c_1}\sum\limits_{x_i \in R_1(j,s)}(y_i-c_1)^2+min_{c_2}\sum\limits_{x_i \in R_2(j,s)}(y_i-c_2)^2](1).minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]求之
      (2).c^1=ave(yi∣xi∈R1(j,s))(2).\hat{c}_1=ave(y_i|x_i \in R_1(j,s))(2).c^1=ave(yixiR1(j,s))    c^2=ave(yi∣xi∈R2(j,s))\hat{c}_2=ave(y_i|x_i \in R_2(j,s))c^2=ave(yixiR2(j,s))
      (3)(3)(3)继续(1),(2)(1),(2)(1),(2)直到满足条件
      (4)(4)(4)f(x)=∑m=1Mc^mI(x∈Rm)f(x)=\sum\limits_{m=1}^M\hat{c}_mI(x\in R_m)f(x)=m=1Mc^mI(xRm)
  • 分类树
    • 基尼指数
          定义:分类问题中假设有KKK类,样本点属于第k类的概率为pkp_kpk,则概率分布的基尼指数为
              Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2Gini(p)=\sum\limits_{k=1}^Kp_k(1-p_k)=1-\sum\limits_{k=1}^Kp_k^2Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
              Gini(D)=1−∑k=1K(∣Ck∣D)2Gini(D)=1-\sum\limits_{k=1}^K(\frac{|C_k|}{D})^2Gini(D)=1k=1K(DCk)2
        如果样本DDD根据特征AAA是否取aaa进行划分,分割成D1D_1D1D2D_2D2
            D1={(x,y)∈D∣A(x)=a)}D_1=\{(x,y) \in D|A(x)=a)\}D1={(x,y)DA(x)=a)}   D2=D−D1D_2=D-D_1D2=DD1
           特征A下的集合D的基尼指数Gini(D,A)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)其越大,不确定性越大,选小的
  • 算法:
      输入:训练数据集D:D:D:
      输出:CARTCARTCART决策树
      (1)(1)(1)设节点的训练集为DDD计算其基尼指数
      (2)(2)(2)选择基尼指数最小的点进行划分
      (3)(3)(3)继续(1),(2)(1),(2)(1),(2)直到满足条件
      (4)(4)(4)生成CARTCARTCART决策树

CART剪枝

  (1)(1)(1)剪枝整树,定义Ca(T)=C(T)+α∣T∣C_a(T)=C(T)+\alpha|T|Ca(T)=C(T)+αT为损失函数,把α从小到大生成序列,0=α0<α1<...<αn<+∞\alpha从小到大生成序列,0=\alpha_0<\alpha_1<...<\alpha_n<+\infinα0=α0<α1<...<αn<+产生一系列区间[αi,αi+1),i=0,1,...,n[\alpha_i,\alpha_{i+1}),i=0,1,...,n[αi,αi+1),i=0,1,...,n对应生成{T0,T1,...,Tn}\{T_0,T_1,...,T_n\}{T0,T1,...,Tn}最后我们交叉验证一下选择最优就OK
        Ca(T)=C(T)+α∣T∣C_a(T)=C(T)+\alpha|T|Ca(T)=C(T)+αT
        Ca(Tt)=C(Tt)+α∣Tt∣C_a(T_t)=C(T_t)+\alpha|T_t|Ca(Tt)=C(Tt)+αTt
      当α=0\alpha=0α=0或足够小有      Ca(Tt)<C(Tt)C_a(T_t)<C(T_t)Ca(Tt)<C(Tt)
      当α\alphaα增大有          Ca(Tt)=C(Tt)C_a(T_t)=C(T_t)Ca(Tt)=C(Tt),再大就不等式反号
        α=C(t)−C(Tt)∣Tt∣−1\alpha=\frac{C(t)-C(T_t)}{|T_t|-1}α=Tt1C(t)C(Tt)选择一个节点最优,所以进行剪枝。取g(t)=C(t)−C(Tt)∣Tt∣−1g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}g(t)=Tt1C(t)C(Tt)为对应区间最优子树
  (2).(2).(2).对子树序列T0,T1,T2,...,TnT_0,T_1,T_2,...,T_nT0,T1,T2,...,Tn进行交叉验证等选择最优子树,同时也确定了α\alphaα大小

  • 算法:
      输入:CARTCARTCART决策树
      输出:最优子树TαT_{\alpha}Tα
      (1)(1)(1)k=0,T=T0k=0,T=T_0k=0,T=T0
      (2)(2)(2)α=+∞\alpha=+\infinα=+
      (3)(3)(3)自下向上地对ttt计算C(Tt),∣T∣C(T_t),|T|C(Tt),T以及
              g(t)=C(t)−C(Tt)∣Tt∣−1g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}g(t)=Tt1C(t)C(Tt)
              α=min(α,g(t))\alpha=min(\alpha,g(t))α=min(α,g(t))
      (4)(4)(4)g(t)=ag(t)=ag(t)=a内部剪枝得到子树TTT
      (5)(5)(5)k=k+1,αk=α,Tk=Tk=k+1,\alpha_k=\alpha,T_k=Tk=k+1,αk=α,Tk=T
      (6)(6)(6)如果TkT_kTk不是由跟节点和两个叶节点组成的树,则返回(2)(2)(2)否则令Tk=TnT_k=T_nTk=Tn
      (7)(7)(7)交叉验证子树序列T0,T1,....,TnT_0,T_1,....,T_nT0,T1,....,Tn中得到最优子树TαT_\alphaTα
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值