【机器学习】AdaBoost学习笔记(一):原理
来源:互联网 发布:电脑照片打印排版软件 编辑:程序博客网 时间:2024/05/16 01:18
前言
八月和九月参加了阿里天池的安全算法挑战赛,用了很多的集成模型,GBDT、XGBoost等等。对于刚入门的我来说,在比赛中纯粹把这些模型当成API函数,并没有了解太多的原理。现在比赛结束了(成绩不理想),想整理一些关于和树有关的经典机器学习模型来趁热打铁,所以就从AdaBoost开始整理了。
这里是LeeTioN的博客
背景知识
集成学习
在谈及AdaBoost之前,我们来看一下集成学习(ensemble learning)的概念。
集成学习通过构建并结合多个学习器来完成学习任务,通过该种方式可以获得比单一学习器显著优越的泛化性能。
其实日常生活中,我们在做出一些决定的时候,往往并不只是听从一个人的意见,而是尽可能地多地问身边的人,因为一个人的想法是局限的。同样在机器学习里面也是相似的。
一个学习器会有它的局限性,我们如果想要做到更好的预测效果,往往需要多个学习器来共同做预测,从而达到更准确的效果。
简单来说,集成学习的思想就是利用众人的力量,将多个学习器应用到同一个学习任务中,通过一种投票(voting)的方式,比如少数服从多数,最后做出决定。
拿我们常见的二分类问题来说,预测结果
那么随之有一个问题,我们如何去生成基分类器?目前来说,有两大类:
- 基分类器存在强依赖关系(串行生成)
- 基分类器不存在强依赖关系(并行生成)
简单来说是大家常见的Boosting 和 Bagging,然后我们来看一下Boosting。
Boosting
Boosting在不同版本的叫法有所不同——目前看到的共有提升、助推、增强三种翻译方式。
Boosting在分类问题中,通过训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。当我们想训练
引用李航老师在《统计学习方法》中的一句话,来说明Boosting的关键。
对于提升方法(Boosting)来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。
AdaBoost思想
1995年,AdaBoost算法由Freund和Schapire提出,对于以上提及的Boosting要解决的两个问题,AdaBoost是这样做的:
- 对于训练样本的权重更改,提高前一轮被错分样本的权值,降低被正确分类的样本权值。
- 对于弱分类器组合,AdaBoost采取通过误差率大小来决定每个分类器的权重大小。
接下来我们来详细地看一下AdaBoost算法。
AdaBoost 算法
算法步骤
输入:训练集数据
输出:集成分类器
对每个样本赋予相同的初始权重
1N ;对
k=1 到K 循环执行(假设我们要生成K 个基分类器);用加权后的样本拟合新的基分类器,并计算第
k 个模型的误差ek=P(Gk(xi)≠yi)=∑Ni=1ωki I(Gk(xi)≠yi) 计算第
k 个基分类器Gk(x) 的权重系数αk=12log1−ekek 对下一次的循环做出训练集样本的权重更新
Zk=∑Ni=1wki exp(−αkyiGk(xi)) zki=wki exp(−αkyiGk(xi)) 对于第
k+1 次循环中的训练集各个样本中的权重wk+1,i=zkiZk 满足并跳出循环,构建基分类器的线性组合
f(x)=∑Kk=1αkGk(x) ,最后G(x)=sign(f(x))
前向分步算法
上一节我们看到了AdaBoost算法对于二分类问题处理的一般流程,这一节我们来看一个比AdaBoost更一般化的算法——前向分步算法。
首先,我们来看一个概念——加法模型。上一节的算法步骤6中,我们给出了每一轮迭代中的基分类器的线性组合
f(x)=∑Kk=1αkGk(x)
而加法模型很简单,仅仅是对于该函数式做出了抽象化的操作——
对于这里的参数
如果我们现在要求解这样一个加法模型的话,我们一共有
大家可以想象一下中学阶段求解三元、四元一次方程组通常就很头痛了(学神除外=。=),所以我们就想着去分步求解这一过程。(其实AdaBoost用的就是这样的一个分步方法)
到这里,大家其实可以看出来了,AdaBoost其实是前向分步算法的一个特例。那么这个特例特别在哪里呢?我们来一一解读一下。(对于前向分步算法,详情请看李航老师的《统计学习方法》中的8.3.1 节)
- 前向分步算法中,提及到的损失函数
L(y,f(x)) 是一般化的,而AdaBoost中则将这一损失函数具体为指数函数。 - AdaBoost中的每一个基分类器尽可能的简单,比如每个基分类器为一颗树桩(Stump),即只有一个分界条件,非黑即白。
参考文献
[1] 李航《统计学习方法》
[2] 周志华《机器学习》
[3] 马克斯
[4] 林轩田 《机器学习技法》
总结
AdaBoost作为Boosting家族最经典的算法之一,非常易于理解,应用起来效率也非常高,下一篇将介绍关于AdaBoost的应用。
- 【机器学习】AdaBoost学习笔记(一):原理
- 机器学习笔记十五 AdaBoost(未完)
- 机器学习笔记十七:Adaboost
- 机器学习笔记(七)Boost算法(GDBT,AdaBoost,XGBoost)原理及实践
- 机器学习笔记 Boost算法(GDBT,AdaBoost,XGBoost)原理及实践
- 【机器学习详解】AdaBoost算法原理
- adaboost学习(一)
- adaboost学习(一)
- adaboost学习(一)
- adaboost学习(一)
- 机器学习实战笔记7(Adaboost)
- 机器学习笔记之AdaBoost算法
- 机器学习----笔记之AdaBoost(6)
- 【机器学习笔记之四】Adaboost 算法
- 机器学习:3、Adaboost
- 机器学习之AdaBoost
- 机器学习算法-Adaboost
- 机器学习 之 Adaboost
- 执行计划无法显示:Preicate Information 解决方法
- POJ1681:Painter's Problem(高斯消元 & 格子转换 & 二进制)
- Python 3爬虫网易云(十)—— 爬取歌词读入文件存储
- linux下C程序从编写到执行完整过程
- SQL优化:数据类型NVARCHAR2
- 【机器学习】AdaBoost学习笔记(一):原理
- 龙应台:孩子,我为什么要求你读书?
- <c语言经典100例>c23 1!+2!+3!+...
- Spring Boot
- oracle 之在查询中使用函数
- eclipse中struts2框架搭建和配置简记
- windows下python安装Numpy、Scipy、matplotlib模块
- Oracle之SQL优化: plan_table is old version
- 牛客网前端编程环境Chrome V8模拟