AdaBoost 是一种更高级的「森林」类型的决策树,和随机森林比起来,它有如下三个特色学习
假设咱们有如下训练数据,咱们想经过「胸口疼痛」、「血管堵塞」和「体重」这三个特征来训练一个心脏病预测模型:3d
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 |
---|---|---|---|
Yes | Yes | 205 | Yes |
No | Yes | 180 | Yes |
Yes | No | 210 | Yes |
Yes | Yes | 167 | Yes |
No | Yes | 156 | No |
No | Yes | 125 | No |
Yes | No | 168 | No |
Yes | Yes | 172 | No |
首先,咱们须要为每一个样本附上一个相同的权重,由于只有 8 条数据,因此每一个样本的权重均为 1/8,以下cdn
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
Yes | Yes | 205 | Yes | 1/8 |
No | Yes | 180 | Yes | 1/8 |
Yes | No | 210 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 156 | No | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | No | 168 | No | 1/8 |
Yes | Yes | 172 | No | 1/8 |
接下来,咱们利用基尼不纯度在这 3 个特征中找一个最合适的做为树根,通过计算,当「体重 >176」 时,基尼不纯度最小,则第一个树桩的节点为「体重 >176」,以下图所示:blog
产生出一个树桩后,咱们把该树桩判断错误的样本拿出来,将它们的权重相加,便得出该树桩的总偏差,上述树桩只有一个错误样本:get
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
Yes | Yes | 167 | Yes | 1/8 |
则该树桩的总偏差(Total Error)即这条错误样本的权重——0.125。经过总偏差,咱们即可以计算出该树桩的 Weight:it
该公式的曲线以下图所示,能够看到,偏差的取值范围在 0 到 1 之间,随着偏差越大,树桩的 Weight 越小,上例中,咱们的偏差为 0.125,所对应的 Weight 为 0.973,也就是图中蓝色点所处的位置:io
一棵树桩产生出来后,接着就要产生第二棵,前面说了,后一棵树的生成依赖于前一棵树的偏差,具体的,咱们会根据这个偏差来调整每一个样本的权重,这样,后面的树就能够根据样本的新权重来训练了,更进一步,前一棵树中错误的样本,咱们但愿在下一棵树的训练中,提升这些样本的权重,同时下降正确样本的权重,这样下一棵树便会更倾向于把这类样本处理好,起到了对前面树的补足做用。table
总体偏差和树的 Weight 成负相关关系,Weight 越高表明置信度越高,这时错误的样本相对于 Weight 低的树来讲,样本权重要调的更高,而正确的样本的权重要调的更低,错误样本权重和正确样本权重的调整分别以下面左图和右图所示:class
对于本例来讲,第一个树桩的 Weight 为 0.973,则错误样本的权重根据左图公式,将调整为 ,同理,正确样本的权重根据右图公式,将调整为
,归一化后,最终全部样本的权重调整以下:随机数
序号 | 旧样本权重 | 新样本权重 | 归一化后 |
---|---|---|---|
1 | 1/8 | 0.05 | 0.07 |
2 | 1/8 | 0.05 | 0.07 |
3 | 1/8 | 0.05 | 0.07 |
4 | 1/8 | 0.33 | 0.49 |
5 | 1/8 | 0.05 | 0.07 |
6 | 1/8 | 0.05 | 0.07 |
7 | 1/8 | 0.05 | 0.07 |
8 | 1/8 | 0.05 | 0.07 |
接下来,咱们须要根据新的特征权重来训练树桩,其中的一种办法是根据权重来抽样,即在每抽一条数据以前,产生一个 0-1 的随机数,根据随机数来决定抽哪条数据。以上面的数据举例,当随机数落在 [0, 0.07) 范围内时,则抽出第 1 条样本,落在 [0.07, 0.14) 范围内时,则抽出第 2 条样本,以此类推。
抽样完成后,咱们从新对这些样本赋予等值的权重,以下:
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
No | Yes | 156 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 172 | No | 1/8 |
Yes | Yes | 205 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
可见第 4 条样本被重复抽出来了屡次(它的样本权重最高),使用这批数据训练后,新的树桩会更倾向于把这条样本分类正确,由于在训练时,重复的样本会受到更大的惩罚。
接下来的步骤和最开始的同样,重复上面的过程就能够了。
在构建完 AdaBoost 后,咱们该如何作预测呢?预测过程和随机森林相似,都是用每棵树的结果来投票,差异在于这里采用的是加权投票。例如咱们有条数据,每棵树对该数据的预测结果以下:
树序号 | 树 Weight | 预测结果 |
---|---|---|
1 | 0.97 | 1 |
2 | 0.34 | 0 |
... | ... | ... |
100 | 0.46 | 1 |
聚合后,把相同预测结果的 Weight 相加,以下
预测结果 | 树 Weight 之和 |
---|---|
1 | 43.7 |
0 | 20.1 |
取 Weight 较大者,因此该条数据的预测结果为 1.
本文咱们一块儿学习了 AdaBoost 的构建过程,AdaBoost 和随机森林比起来,有 3 个特色:
参考:AdaBoost, Clearly Explained
相关文章: