决策树(二)

本文深入探讨了C4.5和CART决策树算法,包括C4.5对ID3的改进,如连续特征处理、信息增益率、缺失值处理和剪枝策略。CART算法则进一步优化,支持回归任务,采用二叉树结构,并基于基尼指数进行特征选择。此外,文章还介绍了决策树的剪枝技术,如错误率降低剪枝、悲观错误剪枝、代价复杂度剪枝和最小误差剪枝。

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

在决策树(一)中,我们介绍了三种不同的特征选择方式。
ID3使用的是信息增益准则,C4.5使用的是信息增益率准则,CART在分类时使用的是基尼指数。

ID3算法的不足

  1. 没有考虑连续特征
  2. 信息增益偏好取值数目较多的特征
  3. 没有考虑缺失值
  4. 没有考虑过拟合的问题

C4.5对ID3中的四个问题进行了改进

  1. 连续特征离散化:使用二分法对连续特征进行处理
    属性a在样本集D中有n个不同的值,将其从小到大排列,有n-1个区间,将每个区间 [ a i , a i + 1 ] [a_i,a_{i+1}] [ai,ai+1]的中位点 ( a i + a i + 1 ) / 2 (a_i+a_{i+1})/2 (ai+ai+1)/2作为候选划分点。然后选择最优的划分点。
    !!!和离散属性不同,如果当前节点为连续属性,该属性后面还可以参与子节点的特征选择。在这里插入图片描述

  2. 使用了信息增益率。
    具体来说,并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式方法:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

  3. 缺失值处理:
    在决策树学习开始阶段,根节点中各样本的权值初始化为1。仅根据在属性a上没有缺失值的样本子集中判断属性a的优劣。

确定好划分属性a后,在属性a上有取值的样本被划分到其对应的子节点,同时它的权值保持不变;在属性a上有缺失值的样本被划分到各个子节点,同时它的权值为 w x ⋅ r v w_x \cdot r_v wxrv
其中, r v r_v rv为:
在这里插入图片描述

  1. 引入了正则化系数进行初步的剪枝。在CART部分会详细讲解剪枝的思路。

C4.5算法的不足

  1. 因为决策树算法非常容易过拟合,因此剪枝必不可少。C4.5的剪枝方法有优化的空间
  2. C4.5生成的是多叉树,如果采用二叉树,可以提高效率
  3. C4.5只能用于分类
  4. C4.5里的对数运算以及对连续特征的的排序太耗时

CART对C4.5中的问题进行了改进,scikit-learn的决策树使用的就是CART算法。

CART
CART可以进行回归,也可以进行分类。
1. CART分类树算法
a) ID3和C4.5都是基于熵模型的,会涉及大量的对数运算。

在决策树(一)中,对基尼指数进行了介绍,CART分类树采用的基尼指数进行属性选择,基尼指数代表了不纯度,因此基尼指数越小,特征越好。

b) 为了进一步简化,CART分类树算法每次仅仅对特征的值进行二分,因此建立起来的是二叉树。

c) CART分类树对连续特征的处理和C4.5是相同的,只是用基尼指数来度量。需要注意的是,CART分类树处理离散属性时,该属性还可以参与后面子节点的特征选择过程(因为CART分类树是二叉树!!!)。而在ID3和C4.5中,离散特征不可重复使用。

2. CART回归树算法
回归树和分类树的不同在于样本输出的是连续值。
a) 回归树算法中选择特征的度量方式不再用基尼指数,而是使用平方误差最小化准则。
在这里插入图片描述
其中, c 1 c_1 c1 D 1 D_1 D1样本集的样本输出均值, c 2 c_2 c2 D 2 D_2 D2样本集的样本输出均值。

预测阶段,将叶子里训练样本集的均值作为预测输出结果。

3.剪枝
决策树剪枝的基本策略有“预剪枝”和“后剪枝”。

预剪枝技术运用较少,下面介绍四种后剪枝方法

a) reduced error pruning(REP,错误率降低剪枝)
一种简单的后剪枝方法。需要使用验证集来评估是否进行剪枝。自底向上,当修剪后的树对于验证集的性能不会变差时,才会进行修剪。
REP简单,但是容易过度修剪。

b) pessimistic error pruning(PEP,悲观错误剪枝)
C4.5采用悲观错误剪枝。
不需要验证集,由于决策树的生成和剪枝都使用训练集,所以产生的错分样本率是有误差的,即偏向于训练集。对此,基于二项分布的连续校正公式对训练集产生的错分样本率进行了校正。

唯一自上而下的修剪方法。引入了统计学上连续修正的概念。

对于一内部节点 t t t,将其作为叶子节点后的连续校正后的错分样本率为 ( e ( t ) + 0.5 ) / n ( t ) (e(t)+0.5)/n(t) (e(t)+0.5)/n(t),其中, n ( t ) n(t) n(t)是落入该叶子的所有样本数, e ( t ) e(t) e(t)是该叶子中误分类样本数。经过连续校正后的错分样本数为 e ( t ) + 0.5 e(t)+0.5 e(t)+0.5

内部节点 t t t对应的子树的叶节点的错分率为 ( ∑ e i + 0.5 ∗ L ) / ∑ n i (\sum e_i + 0.5*L)/\sum n_i (ei+0.5L)/ni,其中, L L L是叶节点的个数。未剪枝的错分样本数为 ∑ e i + 0.5 ∗ L \sum e_i + 0.5*L ei+0.5L

引入子树服从二项分布,对应的均值和标准差分别是 n p np np n p ( 1 − p ) \sqrt{np(1-p)} np(1p)
剪枝的准则(使用的是悲观错误):
e ( t ) + 0.5 ≤ ∑ e i + 0.5 ∗ L + ( ∑ e i + 0.5 ∗ L ) ∗ ( 1 − ( ∑ e i + 0.5 ∗ L ) / n ( t ) ) e(t)+0.5 \leq \sum e_i+0.5*L + \sqrt{(\sum e_i+0.5*L)*(1-(\sum e_i+0.5*L)/n(t))} e(t)+0.5ei+0.5L+(ei+0.5L)(1(ei+0.5L)/n(t))

c) cost complexity pruning (代价复杂度剪枝,CCP)
计算复杂度 O ( n 2 ) O(n^2) O(n2)。CART的剪枝算法。
为子树定义了代价和复杂度,用 α \alpha α来进行两者的权衡。
α = R ( t ) − R ( T t ) N t − 1 \alpha = \frac{R(t)-R(T_t)}{N_t-1} α=Nt1R(t)R(Tt)
原始树 T 0 T_0 T0,在 T 0 T_0 T0中减去 α \alpha α最小的子树,得到 T 1 T_1 T1,再从 T 1 T_1 T1中找到 α \alpha α最小的子树,依次剪枝下去,直到得到根节点。
然后在得到的子树序列 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0,T1,...,Tn中通过独立的验证集来选取最优子树。

d) minimum error pruning (最小误差剪枝,MEP)
采用自底向上的方式,不需要独立的验证集。

[1] https://www.cnblogs.com/pinard/p/6050306.html
[2] http://www.cnblogs.com/pinard/p/6053344.html
[3] https://blog.youkuaiyun.com/bbbeoy/article/details/66974798
[4] https://zhuanlan.zhihu.com/p/30296061
[5] http://www.doc88.com/p-117630831577.html
[6] https://blog.youkuaiyun.com/lizhengl/article/details/54968291
[7] https://blog.youkuaiyun.com/ljp812184246/article/details/47424781
[8] https://blog.youkuaiyun.com/yujianmin1990/article/details/49864813

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值