机器学习笔记(6)——C4.5决策树中的剪枝处理和Python实现

1. 为什么要剪枝

还记得决策树的构造过程吗?为了尽可能正确分类训练样本,节点的划分过程会不断重复直到不能再分,这样就可能对训练样本学习的“太好”了,把训练样本的一些特点当做所有数据都具有的一般性质,从而导致过拟合。这时就可以通过剪枝处理去掉一些分支来降低过拟合的风险。

剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning):

预剪枝是在决策树的生成过程中,对每个结点划分前先做评估,如果划分不能提升决策树的泛化性能,就停止划分并将此节点记为叶节点;

后剪枝是在决策树构造完成后,自底向上对非叶节点进行评估,如果将其换成叶节点能提升泛化性能,则将该子树换成叶节点。

那么怎么判断泛化性能是否提升呢?这时需要将数据集分为训练集和验证集,利用训练集构造决策树,利用验证集来评估剪枝前后的验证集精度(即正确分类的比例)。

下面我们把之前的西瓜数据集划分为训练集和验证集,之后在分别详细演示预剪枝和后剪枝的处理过程。

首先利用训练集数据,构造一个未做剪枝处理的决策树,以便于与剪枝后的决策树做对比。

注意:这里构造的决策树与《机器学习》中的不一样,因为色泽、根蒂、脐部三个属性的信息增益是相等的,都可以作为最优划分属性。

2. 预剪枝

我们先学习预剪枝的过程:

(1)根据信息增益准则,选取“色泽”作为根节点进行划分,会产生3个分支(青绿、乌黑、浅白)。

对根节点“色泽”,若不划分,该节点被标记为叶节点,训练集中正负样本数相等,我们将其标记为“是”好瓜(当样本最多的类不唯一时,可任选其中一类,我们默认都选正类)。那么训练集的7个样

  • 30
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 61
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值