加权多数算法 – 预测
假设二值输出:算法池里有n个算法,每个算法已经有自己的输出,它的权值分别是w1,w2…wn, 主算法对其进行加权得到q0和q1,谁大我们就pred谁。
加权多数算法 – 训练
三、Bagging
如果我们只有一个弱学习器,如何通过集成来提升它的表现?
不同的数据上训练可以获得不同的基础模型
一个朴素的方法: 从训练集种采样不同的子集且训练不同的基础模型
这些模型会大不相同,但它们的效果可能很差。
解决办法: 拔靴采样(Bootstrap sampling)
- 给定集合 D ,含有 m 训练样本;
- 通过从D中均匀随机的有放回采样m个样本构建 Di ;
- 希望 Di 会 遗漏掉 D 中的某些样本。
Bagging 算法
For t = 1, 2, …, T Do
- 从S中拔靴采样产生 Dt
- 在 Dt 上训练一个分类器Ht
最后,分类一个新的样本x∈X 时,通过对 Ht 多数投票(等权重)。
比如我们从大集合S中放回采样T组,每组样例都有自己的训练值ci,来了一个新的样本x,我们对每个ci(x)进行输出投票。
数据集: Rousseeuw 和 Leroy (1986),臭氧含量 vs. 温度。 100 拔靴采样样本。
灰色线条: 初始的10个预测器; 红色线条: 平均。
Breiman “Bagging Predictors” Berkeley Statistics Department TR#421, 1994。
给定样例集S,Breiman重复下列工作100次报告平均结果:
方法 I:
- 把 S 随机划分成测试集 T(10%) 和训练集 D (90%)
- 从D中训练 决策树 算法,记 eS 为它在测 试集 T 上的错误率
方法 II:
重复50次: 生成拔靴采样集合Di , 进行决策树学习,记 eB 为决策树多数投票在测试 集T上的错误率 (集成大小 = 50)
同样的实验,但使用最近邻分类器 (欧式距离)
发生了什么? 为什么 ?
Bagging:讨论
Bagging 在学习器“不稳定”时有用,关键是预测方法的不稳定性。
E.g. 决策树、神经网络
为什么?
- 不稳定: 训练集小的差异可以造成产生的假设大不相同。
- “如果打乱训练集合可以造成产生的预测器大不相同,则bagging算法可以提升其准确率。” (Breiman 1996)
总结
加权多数算法
- 相同数据集, 不同学习算法
- 产生多个模型,加权融合
Bagging
- 一个数据集, 一个弱分类器
- 生成多组训练样本 来训练多个模型,然后集成。
四、Boosting
是否有一个集成算法能够考虑学习中数据的差异性?
基本想法–从失败中学习
- 给每个样本一个权值
- T 轮迭代,在每轮迭代后增大错误分类样本的权重。 – 更关注于“难”样本
AdaBoost
简而言之:少数提升,多数降低。
AdaBoost.M1
此时做错的一定是少数派,我们把正确的降低权重(β<1, 归一化),重复t轮融合,去新的权重log(1/β)
我们不停地更新权重w1,w2…wT,把每一个分类器(带着自己权值)融合在一起,来一个新的样本时加权计算。
例如:
最终假设
AdaBoost在实际使用时的优点
- 快
- 简单 + 易编程实现
- 只有一个参数要调 (T )
- 没有先验知识
- 灵活: 可以和任何分类器结合(NN, C4.5, …)
- 被证明是有效的 (尤其是弱学习器)
- 转变了思路: 现在目标是 仅仅需要寻找比随机猜测好一些的假设就可以了
AdaBoost注意事项
性能依赖于 数据 & 弱学习器
在下列情况中使用AdaBoost会 失效
- 弱学习器 太复杂 (过拟合)
- 弱学习器 太弱 (αt ->0 太快),
- 欠拟合
- 边界太窄->过拟合
过去的实验表明,AdaBoost 似乎 很容易受到噪声的影响
五、讨论
Bagging vs. Boosting
训练集合
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
4146710891)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!