决策树之剪枝算法手动计算+R语言简单实现——(二)

本文介绍了决策树的修剪方法,包括事前修剪和事后修剪,重点讲解了事后修剪的成本复杂度策略。通过R语言展示了如何实现决策树的构建和修剪,以及如何提取决策树规则,总结了不同决策树算法的适用数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

决策树的修剪

决策树规则提取

决策树算法小结

R语言小例子


在上一篇我们介绍了,决策树的数据准备与决策树的生长,也用一个小例子手动计算了决策树的生长分支过程。常用的分支准则方法有三种:信息增益、信息增益率、基尼系数。其实,这里问题就来了,决策树是可以不加限制的生长到有可能到很深的吗?当然是不行的,这就是这一节需要介绍的主要内容之一决策树的修剪,当然还会对决策树算法规律稍微总结一下,并用几个小例子说明R语言的具体实现。

决策树的修剪

单单根据决策树算法完成树的建立后,各个叶节点代表不同的种类,部分叶节点可能只包含少数样本,有可能还是一些异常数据,没有足够的支持度,增加了树的深度,过度适配也会导致分类错误率的增加。这就需要修剪决策树,原理是:从树的底部开始,检查每个节点和该节点的子决策树,看是否能将该子决策树去掉而该节点就自然成为了叶节点代替原来的子决策树,生成一个分类错误率更低、树的深度更低的决策树。

决策树的修剪分为

  • 事前修剪
### C4.5与ID3决策树算法的区别 #### 属性选择标准 ID3算法采用信息增益作为属性选择的标准,而C4.5则通过信息增益率来进行属性的选择。这种修改使得C4.5能够更好地处理具有大量取值的离散属性的情况[^1]。 #### 处理连续属性的能力 ID3仅能处理离散属性的数据集,在面对连续型变量时显得无能为力。相比之下,C4.5具备自动将连续属性离散化的能力,从而适用于更广泛的场景[^2]。 #### 缺失值处理 对于含有缺失值的数据,ID3无法有效应对这一情况。然而,C4.5设计了一套机制用于估计缺失值的影响,并据此调整其计算逻辑,这极大地增强了模型在实际应用中的鲁棒性和适应能力。 #### 过拟合控制 ID3缺乏内置的防止过拟合手段,容易导致生成的决策树过于复杂。与此不同的是,C4.5引入了剪枝技术,通过对已构建好的树进行简化操作来减少过度匹配训练样本的风险,进而提高泛化性能。 ### 基尼系数及其应用场景分析 基尼系数主要用于衡量数据集中类别的不确定性程度或者说是“不纯度”。具体到分类问题上来说,如果某个子节点里两类样本比例分别为p和q,则该节点对应的基尼指数可由公式Gini=1-(+)得出[^3]。当利用此指标指导决策树划分时,总是挑选能使整体加权平均后的基尼指数最小化的特征及阈值完成分割动作。 在 CART (Classification And Regression Tree) 中,无论是解决分类还是回归任务都会运用到类似的思路——即寻找最优切分点使目标函数达到最佳状态。对于前者而言就是降低类别间的混杂状况;而对于后者则是缩小预测值同真实值之间的差距(通常体现为均方误差等形式)[^4]。 因此,基尼系数非常适合应用于那些追求简单高效且不需要过多参数调优场合下的快速建模工作当中去。同时由于它本身定义简洁明了易于理解的缘故,在很多初学者入门教程里面也经常被拿来当作讲解案例之一加以展示说明。 ```python def gini_index(groups, classes): n_instances = float(sum([len(group) for group in groups])) gini = 0.0 for group in groups: size = float(len(group)) if size == 0: continue score = 0.0 for class_val in classes: p = [row[-1] for row in group].count(class_val) / size score += p * p gini += (1.0 - score) * (size / n_instances) return gini ``` 上述代码片段展示了如何手动实现一个用来评估候选切割方案质量高低的方法—gini_index() 函数 。 它接收两个输入参数 :groups 表示当前尝试过后形成的若干分支区域列表 ,classes 则记录所有可能出现的结果标签集合 。最终返回值越低代表所选策略越好 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据技术派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值