持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
视频作者:简博士 - 知乎 (zhihu.com);简博士的个人空间_哔哩哔哩_bilibili
链接:【合集】十分钟 机器学习 系列视频 《统计学习方法》_哔哩哔哩_bilibili
原书:《统计学习方法》李航
决策树生成算法递归地产生决策树,直到不等你继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,模型结构过于复杂,即出现过拟合现象
直接来看优秀的决策树一般要求深度小、叶结点少
剪枝是我们常用来处理决策树的过拟合问题的手段,一般有预剪枝的后剪枝
预剪枝:生辰过程中,对每个节点划分前进行估计,若当前节点的划分不能提升泛化能力,则停止划分,记当前结点为叶结点
后剪枝:生成一颗完整的决策树之后,自底而上的对内部结点考察,若此内部节点变为叶结点,可以提升泛化能力,则做此替换
预剪枝
限定决策树的深度
![![[附件/Pasted image 20221004165145.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/48e04947e9344c1a80c82fbc14430654~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
通过ID3生成决策树
![![[附件/Pasted image 20221004165308.png|400]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9ce6d7ea319e43f8b5f769044af054dd~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
如果我们限定决策树的深度为2,那么我们需要对根蒂→色泽进行剪枝
其中符合纹理为清晰,根蒂为稍蜷缩的数据有
![![[附件/Pasted image 20221004165455.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2bfd826c76574887951e32e87bfffeb6~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
显然是否好瓜中,是为2个,否为1个,因此我们认为剪枝后的根蒂在稍蜷缩的情况下,对叶结点为好瓜,即新的决策树为
![![[附件/Pasted image 20221004165636.png|400]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/25f40701cb9543a5a4f2a931d1e816cd~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
阈值
在决策树的生成中,我们就有提到阈值,其由ϵ限制
我们可以计算D下各个特征的信息增益
![![[附件/Pasted image 20221004170113.png|200]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/978db318cc48426d8fad61ebf7b04046~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
如果我们设定ϵ=0.4,显然在确定根节点的时候,没有任何一个特征符合要求,因此返回单结点树,又因为D上坏瓜数量多于好瓜,因此唯一叶结点为坏瓜
基于测试集上的误差率
测试集上的误差率:测试集中错误分类的实例占比
测试集上的准确率:测试集中正确分类的实例占比
![![[附件/Pasted image 20221004203939.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a06870bbfcfb4d52911cef861b41c73c~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
先构建单结点树,由于训练集中好瓜有5个,坏瓜有5个,我们认为单结点树类标记为好瓜。对于测试集,好瓜有3个,坏瓜有4个,因此可计算误差率P=74
再构建深度为1的树,计算最大信息增益,可得脐部为最大值,因此脐部作为根节点
![![[附件/Pasted image 20221004204520.png|300]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/85cbf830c914412eb382611e08e51c5d~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![![[附件/Pasted image 20221004204615.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/96b8c18b92544565a0f12fd6547c31f0~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
与测试集对照,求得误差率P=72
显然误差率小于单结点树,因此保留该结点
再构建深度为2的树
![![[附件/Pasted image 20221004205204.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4d7521be09941dfacd4ecaf0ae79739~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
计算脐部凹陷的情况下最大信息增益,可得色泽为最大值,计算误差率P=73,因此不保留该结点
计算脐部稍凹的情况下最大信息增益,可得根蒂为最大值,计算误差率P=72,根据奥卡姆剃刀原理(模型越简单越好),因此不保留该结点
在脐部为平坦的情况下,全为坏瓜,根据ID3算法要求,因此该结点即为叶结点,标记为坏瓜
后剪枝
降低错误剪枝(REP)
原理:自下而上,使用测试集来剪枝。对每个结点,计算剪枝前和剪枝后的误判个数,若是剪枝有利于减少误判(包括相等的情况),则剪掉该结点所在分枝
有点类似于预剪枝中的基于测试集上的误差率剪枝
该方法受测试集影响大,如果测试集比训练集小很多,会限制分类的精度。
例:
![![[附件/Pasted image 20221004212023.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9e8771a12fbf4e43b2758929964dd50d~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
根据ID3算法,可得决策树
![![[附件/Pasted image 20221004212126.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/35e502549e554da09395d93b5bba7a38~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
该决策树深度为4,现在我们尝试剪枝深度为3。从测试集中找到脐部为稍凹,根蒂为稍卷曲,色泽为乌黑的样本,编号8、9符合要求。与训练集所得决策树相比较,可得误判个数为2。
剪掉纹理所在的枝条,根据训练集数据,对应样本(脐部为稍凹,根蒂为稍卷曲,色泽为乌黑),编号为7、15,好瓜数量为1,坏瓜数量为1,因此我们令该叶结点(脐部为稍凹,根蒂为稍卷曲,色泽为乌黑)为好瓜,可得新的决策树
![![[附件/Pasted image 20221004213205.png|400]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a03dbc7c093c43ab9d5315df0435be1e~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
在新的决策树下该结点(脐部为稍凹,根蒂为稍卷曲,色泽为乌黑)误判个数为1,因此符合剪枝要求,进行剪枝
按照此方法不断递归剪枝,最终可得符合条件的决策树
![![[附件/Pasted image 20221004213502.png|300]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d0b53025d1ab476a9e05e0bccac58e0b~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
显然该决策树是由欠拟合倾向的
悲观错误剪枝(PEP)
原理:根据剪枝前后的错误率来决定是否剪枝。
和REP不同之处在于,PEP只需要训练集即可,不需要验证集,并且PEP是自上而下剪枝的
优点:不需要分离剪枝数据集,有利于实例较小的问题;误差使用了连续修正值,使得适用性更强;由于自上而下的剪枝策略,PEP效率更高
但仍然有可能会剪掉不应剪掉的枝条
步骤:
剪枝前
- 计算剪枝前目标子树每个叶结点的误差,并进行连续修正
Error(Leafi)=N(T)error(Leafi)+0.5
> 其中i表示每个叶结点;errori(Leafi)表示叶结点Leafi处误判的样本个数;N(T)表示的是总样本个数,剪谁,总样本就对应谁,不一定是整个D上的所有样本
> 加0.5是为了连续型修正
>
> 作者:Dr_Janneil
> 链接:从二项分布到正态分布的连续性修正 (qq.com)
> 这里阐述不是很准确,建议结合例题看
- 计算剪枝前目标子树的修正误差
Error(T)=i=1∑LError(Leafi)=N(T)i=1∑Lerror(Leafi)+0.5×L
> L表示叶结点个数
- 计算剪枝前目标子树误差个数的期望
E(T)=N(T)×Error(T)=i=1∑Lerror(Leafi)+0.5×L
- 计算剪枝前目标子树误判个数的标准差
std(T)=N(T)×Error(T)×(1−Error(T))
> 根据我们现在已经得到的叶结点误差数据,如果要们要预测整个子树的误差数量,则可以由已知的数据构造二项分布,即
> T∼B(np,np(1−p))
> 其中p=Error(T),n=N(T)
- 计算剪枝前误判上限(即悲观误差)
E(T)+std(T)
这里的悲观误差是从期望上限来考虑的,那么我们这里只加了1个标准差
剪枝后
- 计算剪枝后该结点的修正误差
Error(Leaf)=N(T)error(Leaf)+0.5
- 计算剪枝后该结点误判个数的期望值
E(leaf)=error(Leaf)+0.5
- 比较剪枝前后的误判个数,如果满足以下不等式,则剪枝;否则,不剪枝
E(Leaf)<E(T)+std(T)
例:用PEP判断是否要剪枝
![![[附件/Pasted image 20221005110750.png|300]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1edb34bb69a24c61b64e3a0b37dd6ad0~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
Error(T)E(T)std(T)Error(Leaf)E(Leaf)9.87=306+0.5×3=307.5=7.5=30×307.5×(1−307.5)=2.37=3013+0.5=3013.5=13.5<13.5
不剪枝
最小误差剪枝(MEP)
原理:根据剪枝前后的最小分类错误概率例决定是否剪枝。自下而上剪枝,只需要训练集即可
在节点T处,计算出属于类别k的概率
Pk(T)=N(T)+mnk(T)+Prk(T)×m
其中N(T)为该节点处总样本个数;nk(T)为结点下属于类别k的样本个数;Prk(T)为类别k的先验;m是先验概率对后验概率的影响
如果m→0,Pk(T)→N(T)nk(T),意味着以后验概率为准
如果m→∞,Pk(T)→Prk(T),意味着以先验概率为准
在节点T处,计算出预测出错率
Error(T)=min{1−Pk(T)}
如果我们将节点T记为类别k,那么上式意味着不属于类别k的概率,代入Pk(T)
Error(T)=min{N(T)+mN(T)−nk(T)+m(1−Prk(T))}
如果先验概率是确定的(一般,在无任何假设的情况下,我们通常假设各类别是等概率出现的,因此,先验概率为Prk(T)=K1),那么该式就是以m作为变量的函数,我们可以通过计算
margmin Error(T)
来得到m。在这里为了演示MEP算法,假设m=K,K为类别的总个数,因此预测错误率可以写作
Error(T)=N(T)+KN(T)−nk(T)+K−1
步骤
- 计算剪枝前目标子树每个叶结点的预测错误率
Error(Leafi)=N(Leafi)+KN(Leafi)−nk(Leafi)+K−1
N(Leafi)代表叶结点处样本的总个数,nk(Leafi)代表叶结点下属于k类的样本个数
- 计算剪枝前目标子树的预测错误率
假设目标子树中一共有L个叶结点
Error(Leaf)=i=1∑LωiError(Leafi)=i=1∑LN(T)N(Leafi)Error(Leafi)
这里ωi=N(T)N(Leafi)指每个叶子结点对应目标子树的权重
- 计算剪枝后目标子树的预测错误率
Error(T)=N(T)+KN(T)−nk(T)+K−1
- 比较剪枝前后的预测错误率,如果满足以下不等式,则剪枝;否则,不剪枝
Error(T)<Error(Leaf)
例:通过MEP判断T4-T5是否可以剪枝
![![[附件/Pasted image 20221005154405.png|300]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/186e6ac694014ae398e5b4a5cff2fd67~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
计算剪枝前目标子树每个叶结点的预测错误率
Error(T7)Error(T8)=N(T7)+KN(T7)−n7(T7)+K−1=11+211−9+2−1=133=N(T8)+KN(T8)−n8(T8)+K−1=9+29−8+2−1=112
计算剪枝前目标子树的预测错误率
Error(Leaf)=ω7Error(T7)+ω8Error(T8)=2011×133+209×112=0.2087
计算剪枝后目标子树的预测错误率
Error(T5)=N(T5)+KN(T5)−n5(T5)+K−1=20+220−10+2−1=2211=0.5
显然0.2087<0.5,因此不能剪枝
基于错误剪枝(EBP)
原理:根据剪枝前后的误判个数来决定是否剪枝。自下而上剪枝,只需要训练集即可
计算置信水平α下每个结点的误判上界
Uα(e(T),N(T))=N(T)+qα2e(T)+0.5+2qα2+qαN(T)(e(T)+0.5)(N(T)−e(T)−0.5)+4qα2
其中
Error(T)=N(T)e(T)+0.5,也就是误判率,e(T)代表样本的误判个数,N(T)代表样本总个数,0.5为连续型修正
Uα(e(T),N(T))表示在置信水平为α下的误差率上界
N(T)(e(T)+0.5)(N(T)−e(T)−0.5)=N(T)⋅N(T)e(T)+0.5⋅N(T)N(T)−e(T)−0.5表示二项分布里的方差,即np(1−p),p为误判率
2qα2就是对方差的修正
qα代表标准正态分布的上分位数,一般的上分位数我们可以通过查标准正态分布表得到。特殊的值我们可以找到周围的两个点,然后通过构建过已知两点的直线在估计中间的值。在该算法中(C4.5),qα取0.6925,对应α=0.75
qα可能描述不对,但值是对的
步骤:
- 计算剪枝前目标子树每个叶子结点的误判率上界
UCF(e(Leafi),N(Leafi))=N(Leafi)+qα2e(Leafi)+0.5+2qα2+qαN(Leafi)(e(Leafi)+0.5)(N(Leafi)−e(Leafi)−0.5)+4qα2
设L代表子树上有L个叶结点,因此我们就要算L个误判率上界
- 计算剪枝前目标子树的误判个数上界
E(Leaf)=i=1∑LN(Leafi)UCF(e(Leafi),N(Leafi))
这一步骤就是将每个叶子结点的个数乘以对应的误判率上界后求和,就得出了这棵子树上的误判个数上界。
- 计算剪枝后目标子树的误判率上界
UCF(e(T),N(T))=N(T)+qα2e(T)+0.5+2qα2+qαN(T)(e(T)+0.5)(N(T)−e(T)−0.5)+4qα2
- 计算剪枝后目标子树的误判个数上界
E(T)=N(T)UCF(e(T),N(T))
只需要计算将目标子树替换成叶子结点后的误判率上界。
- 比较剪枝前后的误判个数上界,如果满足以下不等式,则剪枝;否则,不剪枝。
E(T)<E(Leaf)
例:通过EBP判断T是否可以剪枝
![![[附件/Pasted image 20221005172702.png|300]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a4323a915a7f492685b88f2ee684a5d2~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
计算剪枝前目标子树每个叶子结点的误判率上界
UCF(0,6)UCF(0,9)UCF(0,1)=N(Leafi)+qα2e(Leafi)+0.5+2qα2+qαN(Leafi)(e(Leafi)+0.5)(N(Leafi)−e(Leafi)−0.5)+4qα2=6+0.692520+0.5+20.69252+0.69256(0+0.5)(6−0−0.5)+40.69252=0.206=0.143=0.75
计算剪枝前目标子树的误判个数上界
E(Leaf)=i=1∑LN(Leafi)UCF(e(Leafi),N(Leafi))=6×0.206+9×0.143+1×0.75=3.273
计算剪枝后目标子树的误判率上界
UCF(1,16)=0.157
计算剪枝后目标子树的误判个数上界
E(T)=N(T)UCF(e(T),N(T))=16×0.157=2.512
比较剪枝前后的误判个数上界,如果满足以下不等式,则剪枝;否则,不剪枝
E(T)=2.512<3.273=E(Leaf)
因此可以剪枝