决策树总结

Measure

  • 随机变量X的熵定位为 H ( X ) = H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(X) = H(p) = -\sum_{i=1}^{n}p_i\log{p_i} H(X)=H(p)=i=1npilogpi. 熵只依赖于X的分布,与X的取值无关。熵用来表示随机变量不确定性的度量
  • 当X只有两种取值时, H ( p ) = − p log ⁡ 2 p − ( 1 − p ) log ⁡ 2 ( 1 − p ) H(p) = -p\log_2{p}-(1-p)\log_2(1-p) H(p)=plog2p(1p)log2(1p). 当p=0或者p=1时 H ( p ) = 0 H(p)=0 H(p)=0,X完全没有不确定性;当 p = 0.5 p=0.5 p=0.5时, H ( p ) = 1 H(p)=1 H(p)=1,熵取值最大,随机变量不确定性最大

条件熵

  • 随机变量 ( X , Y ) (X,Y) (X,Y),其联合分布为 P ( X = x i , Y = y i ) = p i j , i = 1 , 2 , … , n , j = 1 , 2 , … , m P(X=x_i, Y=y_i)=p_{ij}, i=1,2,\ldots,n, j=1,2,\ldots,m P(X=xi,Y=yi)=pij,i=1,2,,n,j=1,2,,m. 条件熵 H ( Y ∣ X ) H(Y|X) H(YX)表示在已知随机变量 Y Y Y的不确定性,公式为 H ( Y ∣ X ) = − ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X) = -\sum_{i=1}^{n}p_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi)
  • 当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所得到的熵和条件熵分别称为经验熵经验条件熵

信息增益

  • 定义:特征A对训练数据集D的信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D, A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
  • 显然,假如特征A是discriminative feature,那么 H ( D ∣ A ) H(D|A) H(DA)会非常小。原因在于A等于某个值的时候D处于同一类的概率很大(A是discriminative feature), H ( D ∣ A ) H(D|A) H(DA)会非常小(变量越稳定类别越集中,条件熵 H ( D ∣ A ) H(D|A) H(DA)就越小),导致 g ( D , A ) g(D, A) g(D,A)会非常大。这种情况下,A应该被选中。

信息增益比

  • why:以信息增益作为划分训练数据集的特征时,偏向于选择值较多的特征。(当特征A值很多的时候,某个值下包含的样本越少属于同一类的概率越高,条件熵 H ( D ∣ A ) H(D|A) H(DA)就越少,因此偏向于选择值较多的特征)
  • 定义: 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 ) H_A(D) HA(D)为特征A的熵。
  • 特点: H A ( D ) H_A(D) HA(D)作为惩罚项,一般而言对于特征取值越多的特征惩罚越大。若特征A有两种取值,样本数比例为1:9,则熵约为0.32;但是当特征A有5种取值,比例1:1:1:1:9的时候,熵约为1.04。显然倾向于选择前者。

决策树生成

ID3算法

  • 根据信息增益选择特征,递归构建决策树
  • 只有树的生成,容易过拟合

C4.5算法

  • 与ID3类似,使用信息赠一比选择特征

决策树的剪枝

  • why:只生成不剪枝,对训练集的拟合会很强,非常容易过拟合

根据loss进行剪枝

  • 损失函数定义为 C α ( T ) = ∑ t = 1 ∣ T ∣ = N i H i ( T ) + α ∣ T ∣ C_\alpha(T)=\sum_{t=1}^{|T|}=N_iH_i(T)+\alpha|T| Cα(T)=t=1T=NiHi(T)+αT,其中T为叶结点数目, H i T H_i{T} HiT为结点T的经验熵, N i N_i Ni T i T_i Ti含有的样本数。显然,第二项为正则项,惩罚决策树的复杂度。
  • 在一组叶子结点的每个叶子分别开始,如果剪枝后loss更小则进行剪枝,递归进行,直到剪枝后loss更大则不剪枝。

CART算法

1)CART回归树
  • 回归树模型为以下公式。假设特征空间已经划分为M个单元 R 1 , . . . , R m R_1,...,R_m R1,...,Rm,并且每个单元固定输出 c m c_m cm
    f ( x ) = ∑ m = 1 M c m I ( x ∈ R m )             ( 1 ) f(x)=\sum_{m=1}^Mc_mI(x\in R_m)\ \ \ \ \ \ \ \ \ \ \ (1) f(x)=m=1McmI(xRm)           (1)
    其中 c m c_m cm的最优值 c ^ m = a v e ( y i ∣ x i ∈ R m ) \hat{c}_m=ave(y_i|x_i\in R_m) c^m=ave(yixiRm)
  • 回归树的生成
  1. 选择最优切分特征 j j j和切分点 s s s,求解
    min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 1 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ]             ( 2 ) \min_{j,s}[\min_{c1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min_{c1}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2]\ \ \ \ \ \ \ \ \ \ \ (2) j,smin[c1minxiR1(j,s)(yic1)2+c1minxiR2(j,s)(yic2)2]           (2)
    求解过程为遍历特征j,对固定切分特征j扫描切分点,最小化公式(2)。对于c1与c2的优化,直接令
    c ^ m = a v e ( y i ∣ x i ∈ R m ) , m = 1 , 2             ( 3 ) \hat{c}_m=ave(y_i|x_i\in R_m), m=1,2\ \ \ \ \ \ \ \ \ \ \ (3) c^m=ave(yixiRm),m=1,2           (3)
    说人话,就是先遍历特征 j j j的各种切分阈值 s s s,然后计算s划分后两个子集里边的平方误差,怎么计算呢?两个子集里边的c1和c2直接选取子集的y均值,然后计算误差。说简单点,对于每个阈值,根据阈值划分成两个子集,分别计算两个子集里边的y的方差,加起来就是这个阈值的损失值。最后对于特征j选择损失值最小的分割阈值,然后再针对特征选择最佳的特征。
  2. 根据1中选定的特征以及阈值 ( j , s ) (j,s) (j,s)划分成左右两颗子树,然后分别递归左右子树,直至达到停止条件
2)分类树
  • gini指数: G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p) = \sum_{k=1}^Kp_k(1-p_k) = 1-\sum_{k=1}^Kp_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2,其中K是类别总数。
  • 假如集合D根据特征A是否取某一可能值 a a a被划分为 D 1 D_1 D1 D 2 D_2 D2,则在集合D关于特征A的基尼指数为
    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{D1}{D}Gini(D1)+\frac{D2}{D}Gini(D2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
  • Gini指数越大,集合D的不确定性越大,这一点与熵类似
  • CART分类树生成:
  1. 对于训练集合D,计算现有特征对于每个可能取值a的基尼指数
  2. 选择Gini指数最小的特征以及对应的取值a,从现有结点分成左右两颗子树
  3. 对于左右两个子树递归调用1. 2.,直到满足停止条件
3)CART剪枝(属于后剪枝,预剪枝是指那些停止条件,停止条件使树不会生长地太过分)
  • 剪枝的时候,计算子树的损失函数
    C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T) = C(T) + \alpha|T| Cα(T)=C(T)+αT
  • 对于子树 T 0 T_0 T0的任意内部节点t,以t的根节点的子树 T t T_t Tt的损失函数为 C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_\alpha(T_t) = C(T_t) + \alpha|T_t| Cα(Tt)=C(Tt)+αTt
    以t为单节点的树的损失函数为 C α ( t ) = C ( t ) + α ∣ t ∣ = C ( t ) + α C_\alpha(t) = C(t) + \alpha|t|=C(t) + \alpha Cα(t)=C(t)+αt=C(t)+α
    显然, C ( t ) &gt; C ( T t ) C(t)&gt;C(T_t) C(t)>C(Tt)(单节点直接以多数类预测,误差比子树大)。因此,当 α \alpha α为0以及足够小的时候, C α ( T t ) &lt; C α ( t ) C_\alpha(T_t)&lt;C_\alpha(t) Cα(Tt)<Cα(t)。但是,当 α \alpha α增大到一定值时有 C α ( T t ) = C α ( t ) C_\alpha(T_t)=C_\alpha(t) Cα(Tt)=Cα(t)。然后 α \alpha α再增大时,就会出现 C α ( T t ) &gt; C α ( t ) C_\alpha(T_t)&gt;C_\alpha(t) Cα(Tt)>Cα(t)了。
  • 因此,对于每个内部节点t(不是最底层的非叶节点)都有一个 g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} g(t)=Tt1C(t)C(Tt),使得当 α = g ( t ) \alpha=g(t) α=g(t)时,有 C α ( T t ) = C α ( t ) C_\alpha(T_t)=C_\alpha(t) Cα(Tt)=Cα(t)其中 g ( t ) g(t) g(t)称为误差增益率。一个内部节点t进行剪枝以后,预测的误差必然增大,误差除以 ∣ T t ∣ − 1 |T_t|-1 Tt1就是一个误差增益率。当选择最小的g(t)作为 α \alpha α时,只有一个节点t剪枝后的损失函数 C α ( T t ) C_\alpha(T_t) Cα(Tt)是降低的,其他节点剪枝后在g(t)作为 α \alpha α时剪枝后都是损失函数上升的。从最优化的角度在在该g(t)作为 α \alpha α时只能对节点t进行剪枝,生成了树 T 1 T_1 T1。然后随着 α \alpha α增大,不断有节点被剪掉,直到树 T k T_k Tk是一个根节点以及两个叶节点组成的树。因此 T k + 1 T_k+1 Tk+1 T k T_k Tk剪枝得来。
    在这里插入图片描述
    对于上图而言,当 α = g ( t 1 ) \alpha=g(t_1) α=g(t1)的时候, t 1 t_1 t1剪枝后损失函数不变,而 t 2 t_2 t2剪枝后损失函数变大,显然应该选择 t 1 t_1 t1进行剪枝。图参考: 图参考链接
  • CART剪枝流程:
  1. T = T 0 T = T_0 T=T0 T 0 T_0 T0为CART生成的决策树
  2. 对树 T T T自上而下对各内部节点t进行计算 C ( T t ) C(T_t) C(Tt) C ( t ) C(t) C(t) g ( t ) g(t) g(t)。选择最小的 g ( t ) g(t) g(t)的内部节点t进行剪枝,得到树 T k T_k Tk
  3. k = k + 1 k=k+1 k=k+1 T = T k T=T_k T=Tk
  4. 如果树 T k T_k Tk不是一个根节点以及两个叶节点组成的树,则返回2.
  5. 采用交叉验证在独立的验证集上(并不是k-folds交叉验证,只训练一次,只验证一次),在子树 T 0 , T 1 , . . . , T n T_0,T1,...,T_n T0,T1,...,Tn上选择最优子树 T α T_\alpha Tα
  • 注意: T k + 1 T_k+1 Tk+1 T k T_k Tk剪枝得来。
  • CART剪枝与前边的介绍的剪枝算法不一样,前边介绍的剪枝算法剪枝时权重 α \alpha α固定的,而CART剪枝的 α \alpha α动态的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值