集成学习 - AdaBoost
Adaboost 它的思想是, 通过几个弱分类器, 然后训练出一个强分类器, 真的是三个臭皮匠赛过诸葛亮 我觉得是最为适合的. 还有一点它的数学理论也是很完美的, 跟SVM一样. 我自己感觉, 这种思想, 真的是, 将穷人的智慧发挥到极致. 想到句口号 "聚是一团火, 散是满天星" 这样的意思. 我这提了穷, 是想到了, Hadoop - HDFS 分, 也是用一些廉价的机器, 通过有机地组织起来, 就成了强大的一个团队.(注意跟Bagging的区别哦)
Adaboost vs Gradientboost
-
如何训练一个模型
-
如何集成模型
Adaboost 是把原来的训练数据 的权重变了. 而 Gdboost 是基于残差 来再优化的,比如树的方式来展开(xgboost), 确实是非常强大的, 尤其在应用上, 我之前,关注最多是SVM 和Adaboost. 现在来再来回顾一波细节.
Boosting
大概流程
Step1:
首先对样本 X, 每一条训练数据 , (表示 X的一行) 都赋予一个权值(假设都为1), 然后训练出一个模型
Setp2:
根据 的预测效果, 来**重新调整 X的每条数据 的权值, 再重新训练出模型
Step3:
重复第二步, m 次, 得到训练出来的模型
**集成: **假设为2元分类, 标签为 1 or -1
假设是多元分类 i = [A,B,C,D..]
多个类别, 预测, 正确就为1, 错就是0, 然后再 乘上权值, 再求和, 最后看哪个 i 最大的即为类别.
具体实现
首先, 对样本初始化一个权重向量,(多个样本嘛), 里面的值都相等.
然后进入循环:
使用带权重的的训练数据训练一个模型
为预测错误的训练数据增大权重
使用带权重的 "民主投票" 的方式 做最后的结果
然后,嗯..
原 paper 是这样描述的 (纯手打一边, 印象深, 拒绝贴图):
第一轮权重, N 表示样本数量, i 表示第1轮下的第i个元素
- Train week learner using training data weighted according to distribution
用带权重的数据集, 权值为 来训练出一个弱的分类器
- Get weak hypothesis
对于每个数据输如, 输出 1 或 -1 (二分类)
- Measure "goodness" of by its weighted error with respect to
如何对模型进行一个评价
对预测错误的样本, 的权值 进行一个求和.(误差)
假设有 10个样本, 那每个样本初始权重为 1/10 = 0.1,
如果有5个预测错了, 则
-
if
-
Let
-
Update (更新下一轮数据的权值)
where is a normalization factor (chosen so that will be a distribution)
更新每个样本的权值
- 如果预测对了, 则 乘 ,即降低该样本权重了
- 如果预测错了, 则 乘上 ,即增大该样本权重了
-
重复上面的过程....
-
Output the final classifier:
最终预测为, 对每个样本, 在t轮下对应的 在求和, 根据 正负号 来判断属于哪个类别.
Adaboost 的证明
Adaboost 训练的模型 H 在训练集上的误差上限为:
假设: 则误差可写为:
后面用到再证吧, 不想证了, 实际意义不是太大
Decision Tree Stumps
在原paper 中, decision tree stump , 是一个 深度为1 的决策树, 非常弱:
k is the number of features
一次呢, 只考虑一个 k 值 (一个维度), 非voting
case: Adaboost + Decison tree Stumps
假设样本只有 两个特征 x1, x2 (变量, 非样本哈)
开始:
假设首先是 根据 x1 的值 判断分类,假设共10个数据 分为A,B两拨.
这里呢有A两个分错了:
将分错的 权重 增大; 对的权重减少
然后进入下一轮:
假设根据 x1的某个值分类:
错的 权重增大; 对的权重减小
... 这样下去, 分对的点越来越小, 错误的点, 变大, 然后继续分. (会出现交替变大/变小的情况)
在某种条件下停下来, 然后将其结合起来, 这就相对很准确了.
小结
Adaboost 里面的几个模型是 顺序执行的关系, 它其实是认为, 有些模型是不好的
这个 是对不同的模型有不同赋值, (错误率高则权重减小), 跟样本数据无关哦, 其实就是, 通过前面模型的误差, 来直到后面模型的正确方向呀, 这样, 这样误差就会越来越小, 然后 再组合起来就很强大了. 嗯, 我感觉需要注意的一点是, 虽然强调 h(x) 可以由多个弱分类器组成, 但也要强于 随机猜测:
if
然后就是每一轮通过给不同数据的权值, 训练模型, 基于错误的信息调整权重, 最后再做集成, 嗯, 感觉还是从 paper 中, 直观的数学公式会更好理解一波.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通