《统计学习方法》第五章决策树总结

1.简介

决策树是一种基本的分类与回归方法,是一种描述对实例分类的树形结构。决策树还表示给定特征条件下类的条件概率分布(这已条件概率分布定义在结构空间的一个划分上)。

2.决策树的分类

2.1 ID3算法

2.1.1 特征选择(信息增益)

ID3算法采用信息增益进行特征选择

  • 信息熵
    随机变量X的信息熵定义如如下:
    H ( X ) = H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(X) = H(p) = - \sum \limits_{i=1}^n p_i \log p_i H(X)=H(p)=i=1npilogpi
  • 条件熵
    H ( Y ∣ X ) = − ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X) = - \sum \limits_{i=1}^n p_i H(Y|X=x_i) H(YX)=i=1npiH(YX=xi)

设训练集为D, ∣ D ∣ |D| D为样本容量,设有K个类 C k C_k Ck, ∣ C k ∣ |C_k| Ck为类 C k C_k Ck的个数(即 ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum \limits_{k=1}^K |C_k|=|D| k=1KCk=D),设特征A有n个不同的取值 { a 1 , a 2 , . . . , a n } \{a_1,a_2,...,a_n\} {a1,a2,...,an},根据A的取值将D划分为n个子集 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn,
∣ D i ∣ |D_i| Di D i D_i Di的样本个数(即 ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum \limits_{i=1}^n |D_i|=|D| i=1nDi=D),子集 D i D_i Di中属于类 C k C_k Ck的样本集合为 D i k D_{ik} Dik ∣ D i k ∣ |D_{ik}| Dik D i k D_{ik} Dik的个数。则信息增益计算如下:

  • 经验熵
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D) = - \sum \limits_{k=1}^K \frac{|C_k|}{|D|} \log_2 \frac{|C_k|}{|D|} H(D)=k=1KDCklog2DCk
  • 经验条件熵
    H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log ⁡ 2 ∣ D i k ∣ ∣ D i ∣ H(D|A) = \sum \limits_{i=1}^n \frac{|D_i|}{|D|} H(D_i) = - \sum \limits_{i=1}^n \frac{|D_i|}{|D|} \sum \limits_{k=1}^K \frac{|D_{ik}|}{|D_i|} \log_2 \frac{|D_{ik}|}{|D_i|} H(DA)=i=1nDDiH(Di)=i=1nDDik=1KDiDiklog2DiDik
  • 信息增益
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D)-H(D|A) g(D,A)=H(D)H(DA)

2.1.2 算法步骤

输入:训练数据集D,特征值A,阈值 ε \varepsilon ε
输出:决策树T
(1) 若D中所有实例属于同一类 C k C_k Ck,则T为单节点树,并将类 C k C_k Ck作为该节点的类标记,返回T;
(2) 若A为空集,即当前D不包含任何特征,将D中实例数最大的类 C k C_k Ck作为该节点的标记,返回T;
(3)否则,计算A中各特征对于D的信息增益,选择信息增益最大的特征 A g A_g Ag:

  • A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,设置T为单节点数,并将D中实例数最大的类 C k C_k Ck作为该节点的标记,返回T。
  • 否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,有节点及其子节点构成T,返回T;

(4)对第i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A{Ag}为特征集,递归调用1-3步,得到子树Ti,返回Ti

2.2 C4.5算法

2.2.1 特征选择(信息增益比)

与ID3算法唯一不同就是特征选择采用信息增益比

  • 信息增益比
    信息增益比定义为信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集D关于特征A的熵 H A ( D ) H_A(D) HA(D)之比:
    g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A) = \frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
    H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log ⁡ 2 ∣ D i ∣ ∣ D ∣ H_A(D) = - \sum \limits_{i=1}^n \frac{|D_i|}{|D|} \log_2 \frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi

2.2.2 算法步骤

算法步骤与ID3一致,只不过特征选择计算的是信息增益比

2.3 CART算法

与ID3和C4.5不同,CART假设决策树是一颗二叉树

2.3.1 分类树

2.3.1.1 特征选择(基尼指数)

假设有K个类,样本点属于第k类的概率为 p k p_k pk,则概率分布的基尼指数定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p) = \sum \limits_{k=1}^K p_k(1-p_k) = 1-\sum \limits_{k=1}^K p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二分类问题,基尼指数为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p) = 2p(1-p) Gini(p)=2p(1p)
对于给定样本集合D,基尼指数为
G i n i ( p ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(p) = 1-\sum \limits_{k=1}^K (\frac{|C_k|}{|D|})^2 Gini(p)=1k=1K(DCk)2
如果样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分,则在A的条件下,集合D的基尼指数定义为:
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A) = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)

2.3.1.2 算法步骤

输入:训练数据集D,停止计算的条件
输出:CART决策树
(1) 设节点的训练集为D,计算现有特征对该数据集的基尼指数。此时,对于每一个特征A,对其可能取的每个a,根据样本点对A=a的测试为“是”或“否”将D分割为D1和D2两部分。然后计算A=a时的基尼指数;
(2)在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点a作为最优特征和最优切分点。依最优特征和最优切分点从现节点生成两个子节点,将训练集依特征分配到两个子节点中。

(3)递归调用1-2步,直到满足停止条件

2.3.2 回归树

2.3.2.1 特征选择(平方误差)

设X和Y分别为输入和输出变量,且Y时连续变量,训练集为D。一颗回归树对应输入空间的一个划分以及在划分单元上的输出值。
假设已将输入空间划分为M个单元R1,…Rm,并且在每个单元上有一个固定的输出 c m c_m cm,则回归树模型表示为
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x) = \sum \limits_{m=1}^M c_mI(x \in R_m) f(x)=m=1McmI(xRm)
当输入空间划分确定,可以用平方误差来表示回归树对训练数据的预测误差。采用评分误差最小的准则求解每个单元上的最优输出值。单元Rm上的 c m c_m cm的最优值 c ^ m \widehat{c}_m c m是Rm上所有输入实例xi对应的输出yi的均值。

  • 空间划分方法
    选择第j个变量 x ( j ) x^{(j)} x(j)和它的取值s作为切分变量和切分点,并定义两个区域:
    R 1 ( j , s ) = { x ∣ x ( j ) < = s } 和 R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)} <= s\} 和R_2(j,s)=\{x|x^{(j)} > s\} R1(j,s)={xx(j)<=s}R2(j,s)={xx(j)>s}
    然后寻找最优切分变量j和最优切分点,即求解
    m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \underset{j,s}{{min} } [\underset{c_1}{{min} } \sum \limits_{x_i \in R_1(j,s)} (y_i-c_1)^2 + \underset{c_2}{{min} } \sum \limits_{x_i \in R_2(j,s)} (y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
2.3.2.2 算法步骤

输入:训练数据集D,停止计算的条件
输出:回归树f(x)
(1)选择最优切分变量j和切分点s,求解:
m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \underset{j,s}{{min} } [\underset{c_1}{{min} } \sum \limits_{x_i \in R_1(j,s)} (y_i-c_1)^2 + \underset{c_2}{{min} } \sum \limits_{x_i \in R_2(j,s)} (y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
遍历变量j,对固定的切分变量j扫描切分点s,选择使得上方式子最小的对(j,s)
(2)选定的对(j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) < = s } 和 R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)} <= s\} 和R_2(j,s)=\{x|x^{(j)} > s\} R1(j,s)={xx(j)<=s}R2(j,s)={xx(j)>s}
c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \widehat{c}_m = \frac{1}{N_m} \sum \limits_{x_i \in R_m(j,s)} y_i,x \in R_m, m=1,2 c m=Nm1xiRm(j,s)yixRm,m=1,2
(3)递归调用1-2,直到满足停止条件

3.决策树的剪枝

3.1预剪枝

其中的核心思想是,在每一次实际对结点进行进一步划分之前,先采用某一种指标来判断划分是否能提高增益,如验证集的数据的准确性、信息增益是否大于最低标准、样本个数是否小于最低标准等,如果是,就把结点标记为叶结点并退出进一步划分,否则就继续递归生成结点。

3.2后剪枝

后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升(如验证集的准确率),则将该子树替换为叶结点。
具体地:
对于ID3和C4.5
可以使用如下损失函数来判断是否剪枝:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ , H t ( T ) = ∑ k N t k N t log ⁡ N t k N t C_α(T)= \sum\limits_{t=1}^{|T|}N_tH_t(T)+α|T|, H_t(T)= \sum\limits_{k}\frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t} Cα(T)=t=1TNtHt(T)+αT,Ht(T)=kNtNtklogNtNtk
其中|T|为叶结点数量,α控制经验风险与结构风险所占比例,越小树越复杂,过拟合风险越大。若将非叶子结点替换为叶子结点后损失函数降低,则将该子树替换为叶结点。
对于CART
剪枝步骤如下:

输入:CART算法生成的决策树T0
输出:最优决策树Tα
(1)设k=0,T=T0
(2)设α为+∞
(3)自下而上地对各内部节点t计算 C ( T t ) C(T_t) C(Tt), ∣ T t ∣ |T_t| Tt以及:
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 , α = m i n ( α , g ( t ) ) g(t)=\frac{C(t)-C(T_t)}{|T_t|-1},α=min(α,g(t)) g(t)=Tt1C(t)C(Tt),α=min(α,g(t))
上述 ∣ T t ∣ |T_t| Tt表示t为根节点的子树,C(T_t)是对训练数据的预测误差(如基尼指数), ∣ T t ∣ |T_t| Tt T t T_t Tt的叶节点个数
(4)对g(t)=α的内部节点t进行剪枝,并对叶节点t以多数表决法确定其类别,得到T
(5)设k=k+1,αk=α,Tk=T
(6)如果Tk不是由根节点以及两个叶节点构成的树,返回步骤2,否则令Tk=Tn
(7)采用交叉验证法在子树T0,…Tn中选择最优子树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hilbob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值