决策树算法之 AdaBoost

AdaBoost 是一种更高级的「森林」类型的决策树,和随机森林比起来,它有以下三个特点

  1. AdaBoost 的每棵树都只有一个根节点和两个叶子节点,实际上叫树桩(stump)可能会更合适
  2. AdaBoost 的每个树桩的权重是不同的,而随机森林中的每棵树的权重是相同的
  3. 前一个树桩的错误数据会影响后一个树桩的生成,意味着后面的树桩是前面树桩的补足。这种思想也被称为 Boost,除 AdaBoost 外,GBDT 和 XGBoost 也是这样的思想(很明显它们中都有 Boost)。

AdaBoost 的生成步骤

假设我们有以下训练数据,我们想通过「胸口疼痛」、「血管堵塞」和「体重」这三个特征来训练一个心脏病预测模型:

胸口疼痛血管堵塞体重患心脏病
YesYes205Yes
NoYes180Yes
YesNo210Yes
YesYes167Yes
NoYes156No
NoYes125No
YesNo168No
YesYes172No

首先,我们需要为每个样本附上一个相同的权重,因为只有 8 条数据,所以每个样本的权重均为 1/8,如下

胸口疼痛血管堵塞体重患心脏病样本权重
YesYes205Yes1/8
NoYes180Yes1/8
YesNo210Yes1/8
YesYes167Yes1/8
NoYes156No1/8
NoYes125No1/8
YesNo168No1/8
YesYes172No1/8

接下来,我们利用基尼不纯度在这 3 个特征中找一个最合适的作为树根,经过计算,当「体重 >176」 时,基尼不纯度最小,则第一个树桩的节点为「体重 >176」,如下图所示:

产生出一个树桩后,我们把该树桩判断错误的样本拿出来,将它们的权重相加,便得出该树桩的总误差,上述树桩只有一个错误样本:

胸口疼痛血管堵塞体重患心脏病样本权重
YesYes167Yes1/8

则该树桩的总误差(Total Error)即这条错误样本的权重——0.125。通过总误差,我们便可以计算出该树桩的 Weight:
W e i g h t s t u m p = 1 2 log ⁡ ( 1 − T o t a l E r r o r T o t a l E r r o r ) Weight_{stump} = \frac{1}{2}\log(\frac{1-TotalError}{TotalError}) Weightstump=21log(TotalError1TotalError)
该公式的曲线如下图所示,可以看到,误差的取值范围在 0 到 1 之间,随着误差越大,树桩的 Weight 越小,上例中,我们的误差为 0.125,所对应的 Weight 为 0.973,也就是图中蓝色点所处的位置:

一棵树桩产生出来后,接着就要产生第二棵,前面说了,后一棵树的生成依赖于前一棵树的误差,具体的,我们会根据这个误差来调整每个样本的权重,这样,后面的树就可以根据样本的新权重来训练了,更进一步,前一棵树中错误的样本,我们希望在下一棵树的训练中,提高这些样本的权重,同时降低正确样本的权重,这样下一棵树便会更倾向于把这类样本处理好,起到了对前面树的补足作用

整体误差和树的 Weight 成负相关关系,Weight 越高代表置信度越高,这时错误的样本相对于 Weight 低的树来说,样本权重要调的更高,而正确的样本的权重要调的更低,错误样本权重和正确样本权重的调整分别如下面左图和右图所示:

对于本例来说,第一个树桩的 Weight 为 0.973,则错误样本的权重根据左图公式,将调整为 0.125 × 2.646 = 0.33 0.125 \times 2.646 = 0.33 0.125×2.646=0.33,同理,正确样本的权重根据右图公式,将调整为 0.125 × 0.378 = 0.05 0.125 \times 0.378=0.05 0.125×0.378=0.05,归一化后,最终所有样本的权重调整如下:

序号旧样本权重新样本权重归一化后
11/80.050.07
21/80.050.07
31/80.050.07
41/80.330.49
51/80.050.07
61/80.050.07
71/80.050.07
81/80.050.07

接下来,我们需要根据新的特征权重来训练树桩,其中的一种办法是根据权重来抽样,即在每抽一条数据之前,产生一个 0-1 的随机数,根据随机数来决定抽哪条数据。以上面的数据举例,当随机数落在 [0, 0.07) 范围内时,则抽出第 1 条样本,落在 [0.07, 0.14) 范围内时,则抽出第 2 条样本,以此类推。

抽样完成后,我们重新对这些样本赋予等值的权重,如下:

胸口疼痛血管堵塞体重患心脏病样本权重
NoYes156No1/8
YesYes167Yes1/8
NoYes125No1/8
YesYes167Yes1/8
YesYes167Yes1/8
YesYes172No1/8
YesYes205Yes1/8
YesYes167Yes1/8

可见第 4 条样本被重复抽出来了多次(它的样本权重最高),使用这批数据训练后,新的树桩会更倾向于把这条样本分类正确,因为在训练时,重复的样本会受到更大的惩罚。

接下来的步骤和最开始的一样,重复上面的过程就可以了。

AdaBoost 的预测

在构建完 AdaBoost 后,我们该如何做预测呢?预测过程和随机森林类似,都是用每棵树的结果来投票,差别在于这里采用的是加权投票。例如我们有条数据,每棵树对该数据的预测结果如下:

树序号树 Weight预测结果
10.971
20.340
1000.461

聚合后,把相同预测结果的 Weight 相加,如下

预测结果树 Weight 之和
143.7
020.1

取 Weight 较大者,所以该条数据的预测结果为 1.

总结

本文我们一起学习了 AdaBoost 的构建过程,AdaBoost 和随机森林比起来,有 3 个特点:

  1. 每棵树只有一个根节点和两个叶子节点
  2. 后一棵树由前一棵树的误差决定
  3. 每棵树都有不同的权重,预测时会根据权重来聚合预测结果

参考:AdaBoost, Clearly Explained

相关文章:

关注博主:
在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

程序员在深圳V

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值