前言
这是我自己对于Adaboost算法的学习以及总结。
参考的博客:
https://blog.csdn.net/v_july_v/article/details/40718799
以下是本篇文章正文内容
一、boosting与bagging
boosting就是随着学习的积累从弱到强。简而言之,每新加入一个弱学习器,整体能力就会得到提升。
代表算法:Adaboost、GBDT、XGBoost
Bagging与Boosting的差异在于:取样方式不同。Bagging采用均匀取样(比如在箱子中有100个球,80个黑球,20个白球,抽到黑球后再放回的抽),而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging。
Bagging的训练集的选择是随机的,各轮训练集之间相互独立,而BoostIng的各轮训练集的选择与前面各轮的学习结果有关;
bagging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性比bagging高。在有些数据集中,boosting会引起退化。(随机森林的使用采取的是bagging)
Bagging是指采用Bootstrap(有放回的均匀抽样)的方式从训练数据中抽取部分数据训练多个分类器,每个分类器的权重是一致的,然后通过投票的方式取票数最高的分类结果最为最终结果
对于bagging的理解,可以用一个例子来说明
二、Adaboost
1.原理介绍
Adaboost原理:训练一组数据,调整数据分布,将之前错误的数据区域‘放大’,将正确的数据区域‘缩小’,然后接着训练第二个学习器,再次调整数据分布。每轮数据调整,将注意力集中在错误数据中。整个训练过程如此迭代下去。
Adaboost的关键点是确认投票权重。
Adaboost的算法流程(加法模型):
1.初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N
2.进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
3.步骤3. 组合各个弱分类器
相关公式
具体细化的说:
1.初始化训练数据权重相等,训练第一个学习器
2.计算该学习器在训练中的错误率
3.计算学习器的权重
4.根据权重对数据在重新赋权
5.重复执行1-4次
6.对M个学习器进行加权投票
2.实例展示
这是我之前看到的一个例子,后来我具体的进行了尝试
这个问题在之前参考的博客中有体现,结合案例,在对过程进行分析,即可了解这一过程
当m=1,在权值分布为D1(10个数据,每个数据的权值为0.1),通过计算:
(v为阈值)
v取2.5时,误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3),
v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4),
v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)
v取2.5与8.5的误差率相同,我们任选其中一个都可以,我们选取2.5,做第一个分类器
接着我们也可将归一化参数求得,计算弱分类器的权重
分类函数f1(x)= a1*G1(x) = 0.4236G1(x)
m=2,对于m=2,在权值分布为D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训练数据上:
v取2.5时误差率为0.16663(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.16663),
v取5.5时误差率最低为0.07154(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.07153 + 0.0715),
v取8.5时误差率为0.07153(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.07153)。
所以,阈值v取8.5时误差率最低,故第二个基本分类器为
f2(x)=0.4236G1(x) + 0.6496G2(x)
对于m=3,在权值分布为D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的训练数据上,经过计算可得:
v取2.5时误差率为0.10603(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.10603),
v取5.5时误差率最低为0.04554(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.04553 + 0.0715),
v取8.5时误差率为0.16673(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.16673)
f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)
最终的分类器为:
G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]。
总结
这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了Adaboost的原理。