决策树 prepruning_5 决策树

本文深入探讨决策树的学习过程,包括信息熵、信息增益、增益率和基尼系数等关键概念。介绍了ID3、C4.5和CART算法在选择划分属性时的不同策略。此外,还讨论了决策树的剪枝技术,如预剪枝和后剪枝,以及如何处理连续值和缺失值。最后,提到了多变量决策树在减少计算复杂度方面的应用。
摘要由CSDN通过智能技术生成

a309795797b7c663f050b86253579c84.png

决策树 (Decision Tree)

以下内容基于周志华老师的机器学习第4章归纳整理。

1 基本流程

简单的来说,决策树遵循分而治之的思想。在树的每一个节点都会对应一个属性进行划分,直到遍历所有属性。最后的结果会被划分到某一个叶结点,即一个类中。

2 划分选择

决策树学习的关键在于选择最优划分属性。这样随着划分的进行,结点的纯度(purity)越来越高。

2.1 信息增益

信息熵是度量纯度最常用的指标。信息熵越大,则越混乱,也就是纯度低。笔者有个比较方便记忆的例子,想必读者都知道熵增加原理里面一个著名的例子吧。就是墨水滴入一盆水中会扩散开来,不会聚成一滴。那就是说,熵增加=混乱=纯度降低。反之,熵越小,纯度就越高。我们的决策树的目标就是要分出尽可能纯的类,整个过程就是在减熵。如果有人对热力学的熵,信息学的熵,信息,信息量有更多的疑问,请戳知乎。

信息熵

这里我们要再定义一个概念,信息增益。著名的ID3决策树算法就是用信息增益来选择划分属性。

信息增益

我们规定信息增益为划分前的熵Ent(D)减去划分后的熵Ent(D')。我们的目标是划分后熵越小越好,也就是信息增益越大越好。举个具体的例子,假设根节点中有正例8,负例9,则可算出初始信息熵:

现在根据某属性进行划分后,得到3个子集。子集1中包含3正3反,子集2中包含4正2反,子集3中包含1正4反。那么现在:

从而信息增益为:

依次类推,我们可以算出所有属性的信息增益。简单的说就是在每一步,把剩余的属性都试一遍,然后选取信息增益最大那个。

2.2 增益率

细心的读者可能发现了上述方法有个漏洞。假如我们有一个变量,叫做编号,从1-N。那么该变量一次就划分完毕,并直接将熵减小到0,每个节点都是最纯的。显然这不是我们想要的。为了惩罚这种不利影响,我们引入信息增益率(gain rate)的概念。著名的C4.5决策树就使用了这一点。

信息增益率

其中

称为属性a的固有值(intrinsic value)。当划分的类越多,V越大,IV(a)就越大。

值得注意的是,增益率偏好可取值数目较少的属性。所以C4.5中,先选择增益高于平均水平的属性,再从中选取增益率最高的。

2.3 基尼系数

卡特(CART)决策树采用不同于熵的一个指数,基尼系数(Gini index)来选择划分属性。

基尼值

基尼指数

简单来说,基尼指数就是熵的近似替代品。使用它是因为求平方和比熵的指数运算更简便。请看下图:

09c469036634bfdc83ff60f2d7bb9377.png

更多关于CART树的细节请参考:决策树算法原理(下)

  • Code Sklearn
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf = clf.fit(X, Y)

3 剪枝处理

剪枝(pruning)的主要作用是防止决策树的过拟合。基本策略有预剪枝(prepruning)和后剪枝(post-pruning)。

3.1 预剪枝

预剪枝是在决策树生成过程中,若当前划分不能带来有效的性能提升,则放弃划分并将当前节点标记为叶结点。这里我们可以使用验证集来进行评估,如果划分后验证集的精度提升了,那么就是值得划分。否则划分将被禁止。

  • Pros
    • 降低过拟合风险
    • 减少训练和测试的时间及开销
  • Cons
    • 过早的剪枝可能会欠拟合

3.2 后剪枝

后剪枝是先生成一颗完整的决策树,然后自底向上的将一些不必要的子树替换为叶结点。同样的,我们使用验证集,考察将某子树替换成叶结点前后的精度变化。

  • Pros
    • 欠拟合风险较小,泛化性能往往优于预剪枝决策树
  • Cons
    • 需要逐一考察树中的非叶结点,训练时间开销比较大

在实际代码中,以上思想对应的诸如树深(max_depth)、叶节点最少数目(min_samples_leaf)、最少划分样本数量(min_samples_split)等参数。

4 连续与缺失值

4.1 连续值的处理

目前为止,我们仅讨论了离散属性。如果我们遇到连续属性,就需要考虑将其离散化。

最简单的是二分法(bi-partition),该方法被C4.5决策树算法所使用。

举个例子,我们考虑一个连续属性对应的值:0.1,0.5,0.6,1.5,2.5。我们的目标是寻找一个最佳的划分点将他们分开。显而易见,对于0.1和0.5,当我们取他们之间任意的一个值来划分(0.3, 0.4, 0.499...)的效果都是一样的。于是我们干脆就取中间值,这就是二分的来源。对于上述5个值的列表,我们就能定义出4个划分点:0.3,0.55,1.05,2.0。

下一步就是挨个计算每个划分点对应的信息增益,选取最大的即可。

注意,与离散属性不同,如果当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。意思就是假设这个结点按照是否小于1.05来划分,之后的子结点仍可以再按照是否小于0.8来进一步细分,仍然是基于同一属性。而连续变量,比如黑白,当我们第一次划分开黑和白以后,就不会再次划分黑白了。

4.2 缺失值处理

实际问题中,完整的数据是极其罕见的。面对有缺失的数据,我们需要解决两个问题:

  1. 如何在有缺失值的情况下进行属性划分?
  2. 给点划分属性,如果样本在该属性上缺失了,怎么办?

对于问题1,答案是我们只考虑无缺失值样本所占的比例。也就是在划分一个属性时,不考虑在该属性上有缺失的数据。

对于问题2,则是按一定的权重将样本划入所有子节点。比如说在某个结点,通常60%的样例会进入左子树,40%的样例会进入右子树。那么对一个没有该属性的样例,我们将其同时划分到两个子树中,不过左子树的权重为0.6,右子树为0.4。

5 多变量决策树

读者可能注意到了,根据我们之前说的属性划分,在数据量大或者属性量大的时候,会造成大量的计算开销。我们可以利用多变量决策树来简化这一点。

例如,多变量决策树中的一个结点可能是这样的:-0.8 * 密度 - 0.044 * 含糖率 <= -0.313

这样我们可以大大的减少时间复杂度。

面试问题

  • 如何处理过拟合问题 how to control overfitting?
  • 解释一下基尼系数 What is Gini index?

References

  • 决策树算法原理(下)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值