版权声明:本文为博主原创文章,转载请著名出处 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)+(k−1)
其中: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=∑Ni∑Ei+0.5∗L
其中:
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=N∗et=N∗NE+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=∑Ni∑Ei+0.5∗L=N∑Ei+0.5∗L
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=N∗eT=N∗N∑Ei+0.5∗L=∑Ei+0.5∗L
δ
=
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})}
δ=N∗eT∗(1−eT)=ET∗(N−ET)
判断是否剪枝条件:
剪枝:
E
t
<
E
T
i
+
δ
E_t < E_{_{T_i}} + \delta
Et<ETi+δ
例子:
注:"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}
α=∣Tt∣−1C(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} 选出一个最好的决策树