决策树后剪枝算法(四)最小错误剪枝MEP


 ​​ ​决策树后剪枝算法(一)代价复杂度剪枝CPP
 ​​ ​决策树后剪枝算法(二)错误率降低剪枝REP
 ​​ ​决策树后剪枝算法(三)悲观错误剪枝PEP
 ​​ ​决策树后剪枝算法(四)最小错误剪枝MEP
 ​​ ​
​ ​ 剪枝,是一个“用准确性换取简单性”的思想。它允许决策树对训练集过拟合,再通过删除对泛化精度无贡献的子分支,从而修剪出一颗较小的树。以下列出几种较常见的后剪枝算法,及其机制对比:

CCP REP PEP MEP
剪枝方式 自底向上 自底向上 自顶向下 自底向上
计算复杂度 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n ) O(n) O(n) O ( n ) O(n) O(n)
误差估计 标准误差 剪枝集上误差 连续性矫正 概率估计
是否需要额外剪枝集

​ ​

(4)最小错误剪枝(MEP)

​ ​ 1986年Niblett和Bratko提出了最小错误剪枝。最小错误剪枝采用自底向上的方式对决策树进行剪枝,也是后剪枝的一种。最小错误剪枝的主要思想是通过分别计算剪枝前与后的期望错误率 E k E_k Ek,进行判断。

​ 

(4.1)数学推导

​ 评价标准:
E k = n − n c + k − 1 n + k E_k=\frac{n-n_c+k-1}{n+k} Ek=n+knnc+k1
​ 解读:

  • E k E_k Ek为期望错误率,为评价是否剪枝标准。

  • n n n为样本数, n c n_c nc为结点最多类别 c c c的样本数, k k k为决策树分类类别总数。

  • 该公式需假设每个类别概率相等。

​ ​ 要计算期望错误率,首先需引入错误率计算,反向思考则为计算 P c ( T ) P_c(T) Pc(T)(1 - 节点 T T T分类为某类别 c c c的概率),直观思考可得:
P r ( T ) = n c n P_r(T)=\frac{n_c}{n} Pr(T)=nnc
​ ​ 但这样做是有问题的,因为我们仍未知各个样本属于类别 c c c的概率,即贝叶斯思维中的先验概率。这便是我们的假设前提“每个类别概率相等”的作用,故有关于节点 T T T各样本是属于类别 c c c的先验概率为:
P r c ( T ) = 1 k Pr_{c}(T)=\frac{1}{k} Prc(T)=k1
​ ​ 故引出最终的后验概率,节点 T T T分类为某类别 c c c的概率:
P c ( T ) = n c + P r c ( T ) × m n + m ( 其中 m 为先验概率影响因子 ) P_c(T)=\frac{n_c+Pr_c(T)\times m}{n+m} (其中m为先验概率影响因子) Pc(T)=n+mnc+Prc(T)×m(其中m为先验概率影响因子)
​ ​ 因而求得节点 T T T分类为某类别 c c c的错误率:
E r r o r c ( T ) = 1 − P c ( T ) = n − n c + m ( 1 − P r c ( T ) ) n + m Error_c(T)=1-P_c(T)\\ =\frac{n-n_c+m(1-Pr_c(T))}{n+m} Errorc(T)=1Pc(T)=n+mnnc+m(1Prc(T))
​ ​ 因一个节点只能有一个类别,且判断方式常为多数表决,则节点 T T T的错误率和最大类别 c c c直接挂钩,可表示为:
E r r o r ( T ) = E r r o r c ( T ) Error(T)=Error_c(T) Error(T)=Errorc(T)
​ ​ 故期望错误率 E k E_k Ek则转换为,求一个恰当的影响因子 m m m的函数,其中一种思路为,求:
E k = min ⁡ { 1 − P c ( T ) } = = min ⁡ { n − n c + m ( 1 − P r c ( T ) ) n + m } E_k=\min\{1-P_c(T)\}==\min\{\frac{n-n_c+m(1-Pr_c(T))}{n+m}\} Ek=min{1Pc(T)}==min{n+mnnc+m(1Prc(T))}
​ ​ 即求解 m m m函数的最小值。

​ ​ 为简便计算,从规律进行总结,当 m = 0 m=0 m=0时,可考虑先验概率影响为0;而 m → ∞ m\rightarrow\infin m时,先验概率影响程度无穷大。则可近似将 m m m等价于类别总数 k k k,即类别总数为0,先验概率不予考虑;类别总数较大,先验概率至关重要。

​ ​ 故得到简化公式:
E k = n − n c + k − 1 n + k E_k=\frac{n-n_c+k-1}{n+k} Ek=n+knnc+k1

​ 

(4.2)算法流程

​ ​ 考虑决策树上每个中间节点作为剪枝候选对象,自底向上遍历,判断是否剪枝步骤如下:

  • (1)删除以此节点为根的子树,使其成为叶子结点。
  • (2)根据多数表决法,赋予该节点关联的训练数据类别。
  • (3)比较删除前后错误样本数,判断是否剪枝该节点。

​ 

(4.3)例题计算

​ ​ 下面举一个例子进行说明,下图待剪枝决策树有三个类别,每个节点类别及各分类样本数均如图矩形框中列出。


决策树后剪枝算法(四)最小错误剪枝MEP_第1张图片
​ 
​ ​ 节点"node 27"
剪枝后: E k ( t ) = 20 − 15 + 3 − 1 20 + 3 = 0.304 剪枝前: E k ( T t ) = 17 20 × ( 17 − 15 + 3 − 1 17 + 3 ) + 3 20 × ( 3 − 3 + 3 − 1 3 + 3 ) = 0.220 注:剪枝前的计算过程为 T t 下叶子节点计算结果加权求和 剪枝后:E_k(t)=\frac{20-15+3-1}{20+3}=0.304\\ 剪枝前:E_k(T_t)=\frac{17}{20}\times(\frac{17-15+3-1}{17+3})+\frac{3}{20}\times(\frac{3-3+3-1}{3+3})=0.220\\ 注:剪枝前的计算过程为T_t下叶子节点计算结果加权求和 剪枝后:Ek(t)=20+32015+31=0.304剪枝前:Ek(Tt)=2017×(17+31715+31)+203×(3+333+31)=0.220注:剪枝前的计算过程为Tt下叶子节点计算结果加权求和
​ ​ 可得剪枝后期望错误率增加,故不可剪枝。

​ 

​ ​ 节点"node 26"

​ ​ 节点"node 26"的计算结果也是不可剪枝,请自行验证。(0.447 / 0.370)

​ 

(4.4)代码实现

​ C4.5算法及MEP剪枝手写实现

链接:https://pan.baidu.com/s/1JcwHWn7uAzYdahAV6e2GJw?pwd=94bm 
提取码:94bm

​ 代码参考:http://www.hzcourse.com/web/refbook/detail/9970/226

————————————————————————————————————————————————————————————

​ 参考资料:

​ [1] 现代决策树模型及其编程实践 黄智濒 编著

​ [2] https://www.bilibili.com/video/BV1No4y1o7ac?p=48

你可能感兴趣的:(数据挖掘,笔记,机器学习,决策树,算法,剪枝)