决策树的剪枝(MEP,REP,PEP,CCP)

版权声明:本文为博主原创文章,转载请著名出处 https://blog.csdn.net/sheepy123/article/details/89850764

一,决策树剪枝

1. MEP(minimum error pruning)

MEP方法的基本思路是采用自底向上的方式,对于树中每个非叶节点。首先计算该节点的误差 E r ( t ) E_r(t) Er(t),然后,计算该节点每个分支的误差 E r ( T t ) E_r(T_t) Er(Tt),并且加权相加,权为每个分支拥有的训练样本比例。如果 E r ( t ) E_r(t) Er(t)大于 ∑ E r ( T t ) \sum E_r(T_t) Er(Tt),则保留该子树;否则,剪裁它。
通常, E r ( t ) E_r(t) Er(t)的计算采用公式:
E r ( t ) = n ( t ) − n c ( t ) + ( k − 1 ) n ( t ) + k E_r(t) = \frac{n(t)-n_c(t)+(k-1)}{n(t)+k} Er(t)=n(t)+kn(t)nc(t)+(k1)
其中:n(t)为节点t中的样本总数; n c ( t ) n_c(t) nc(t)为t中主类的样本数目;k为类数目

2. REP(Reduced-Error Pruning 错误率降低剪枝)

REP方法是一种比较简单的后剪枝方法。在该方法中,数据被分成两个样例的集合:训练集和验证集。训练集用来评估这个决策树在后续数据上的精度。
判断是否剪枝的依据是精度。
精度是指对于某一个节点,测试集在剪枝前后正确分类的个数。
首先计算节点t的误差: E r ( t ) E_r(t) Er(t),然后计算每个节点的误差 E r ( T t ) E_r(T_t) Er(Tt)并相加。如果 E r ( t ) E_r(t) Er(t)大于 ∑ E r ( T t ) \sum E_r(T_t) Er(Tt),则保留该子树;否则,剪裁它。
E r ( t ) = n ( t ) − n c ( t ) E_r(t) = n(t)-n_c(t) Er(t)=n(t)nc(t)
其中:n(t)为节点t中的样本总数; n c ( t ) n_c(t) nc(t)为t中主类的样本数目

3. PEP(Pesimistic-Error Pruning 悲观错误剪枝)

PEP是根据剪枝前后的错误率来判定子树的修剪。
该方法引入了统计学上连续修正的概念弥补REP中的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子节点都自动对实列的某个部分进行错误的分类。
把一颗子树(具有多个叶子节点)的分类用一个叶子节点来替代的话,在训练集上的误判率肯定是上升的,但是在新数据上不一定。于是我们需要把子树的误判计算加上一个经验性的惩罚因子。对于一颗叶子节点,它覆盖了N个样本,其中有E个错误,那么该叶子节点的错误率为(E+0.5)/N。这个0.5就是惩罚因子,那么一颗子树,它有L个叶子节点,那么该子树的误判率估计为:
e = ∑ E i + 0.5 ∗ L ∑ N i e = \frac{\sum E_i + 0.5*L}{\sum N_i} e=NiEi+0.5L
其中: E i E_i Ei为该节点错误的个数, N i N_i Ni为该节点样本的个数,L为叶子节点个数

剪枝后,其概率误判率e为(E+0.5)/N,因此叶子节点的误判次数均值 E t E_t Et为:
e t = E + 0.5 N e_t = \frac{E + 0.5}{N} et=NE+0.5
E t = N ∗ e t = N ∗ E + 0.5 N = E + 0.5 E_t = N*e_t=N*\frac{E + 0.5}{N}=E+0.5 Et=Net=NNE+0.5=E+0.5
剪枝前,误判均值E和标准差:
N = ∑ N i N = \sum N_i N=Ni
e T = ∑ E i + 0.5 ∗ L ∑ N i = ∑ E i + 0.5 ∗ L N e_{_T} = \frac{\sum E_i + 0.5*L}{\sum N_i}=\frac{\sum E_i + 0.5*L}{N} eT=NiEi+0.5L=NEi+0.5L
E T = N ∗ e T = N ∗ ∑ E i + 0.5 ∗ L N = ∑ E i + 0.5 ∗ L E_{_T} = N*e_{_T}=N*\frac{\sum E_i + 0.5*L}{N}=\sum E_i + 0.5*L ET=NeT=NNEi+0.5L=Ei+0.5L
δ = N ∗ e T ∗ ( 1 − e T ) = E T ∗ ( N − E T ) \delta = \sqrt{N*e_{_T}*(1-e_{_T})}= \sqrt{E_{_T}*(N-E_{_T})} δ=NeT(1eT) =ET(NET)
判断是否剪枝条件:
剪枝:
E t &lt; E T i + δ E_t &lt; E_{_{T_i}} + \delta Et<ETi+δ
例子:
PEP
注:"T4"是节点, 9 和7 分别是类1和类2的个数

4.CCP(Cost-Complexity Pruning 代价复杂度剪枝)

CCP算法为子树 T t T_t Tt 定义了代价和复杂度,以及一个衡量代价与复杂度之间关系的参数α。
代价指的是在剪枝过程中因子树 T t T_t Tt 被叶节点替代而增加的错分样本;
复杂度表示剪枝后子树 T t T_t Tt 减少的叶结点数;
α则表示剪枝后树的复杂度降低程度与代价间的关系,定义为:
α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = \frac{C(t)-C(T_t)}{|T_t|-1} α=Tt1C(t)C(Tt)
注:
C(t)为节点的预测误差:
C ( t ) = E t N C(t) = \frac{E_t}{N} C(t)=NEt
C ( T t ) C(T_t) C(Tt)为子树 T t T_t Tt的预测误差:
C ( T t ) = E T t N C(T_t) = \frac{E_{T_t}}{N} C(Tt)=NETt
∣ T t ∣ |T_t| Tt T t T_t Tt子树的节点个数
CCP算法可以分为两个步骤:
Step 1:
按照上述公式从下到上计算每一个非叶节点的 α \alpha α值,然后每一次都剪掉具有最小 α \alpha α值的子树。
从而得到一个集合{T0,T1,T2,…,TM} ,其中, T 0 T_0 T0表示完整的决策树, T M T_M TM表示根节点
Step 2:
根据真实的错误率在集合{T0,T1,T2,…,TM} 选出一个最好的决策树

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值