Adaboost - 新的角度理解权值更新策略
来源:互联网 发布:js后退页面同时刷新 编辑:程序博客网 时间:2024/05/01 08:54
本文可移步至个人博客阅读:http://www.csuldw.com/2016/08/28/2016-08-28-adaboost-algorithm-theory/
关于Adaboost,在先前的一篇文章里,也介绍过它的步骤与实现,但理论上的推导未曾涉及。虽然Adaboost算法思想通俗易懂,但权值更新公式的由来,想必并非人人皆知。本文着重于从理论层面进一步阐述Adaboost,最终推导出迭代时的样本权值更新公式。
关于本文使用的数学符号的具体解释,见下表:
下面来看看Adaboost的算法思想与其权值的推导。
算法思想
关于Adaboost,它是boosting算法,从bias-variance(偏差-方差)的角度来看,boosting算法主要关注的是降低偏差。仔细想想便可理解,因为boosting算法每个分类器都是弱分类器,而弱分类器的特性就是high-bias & low variance(高偏差-低方差),其与生俱来的优点就是泛化性能好。因此,将多个算法组合起来之后,可以达到降偏差的效果,进而得到一个偏差小、方差小的泛化能力好的模型。另外,Adaboost的损失函数是指数损失
Adaboost算法可以归纳至三步,如下:
- 第一步:初始化每个样本的权重值为
1N ; - 第二步:迭代
M 次,每次都根据错误率em 不断修改训练数据的权值分布(此处需要确保弱学习器的错误率e 小于0.5 ),样本权值更新规则为增加分类错误样本的权重,减少分类正确样本的权重; - 第三步:根据每个弱学习器的系数
αm ,将M 个弱学习器组合到一起,共同决定最终的学习结果,即G(X)=∑Mm=1αmGm(x) .
对于上面给出的算法,可能会存在一些疑问,诸如:
- 弱学习器的错误率
e 为何要小于0.5 ? - 弱学习器的系数
α 这个等式如何得到的? - 归一化因子
Zm 又有何寓意?
对于第一点,应该比较容易理解,因为如果弱学习器的效果都没有随机猜测好,那么学习得到的模型毫无疑问肯定是无用的。事实上,在上面三个问题中,最让人不解的应该是这个
权值推导
从图一我们可以看到,迭代至第
然而,为何会是它呢?其推导方式有两种,第一种是最小化训练误差界进行推导;第二种是最小化损失函数进行推导。两者在本质上是一样的,都是为了求最小化某个式子时的
训练误差界
从图一可知,最终得到的函数表达式是
从图一中还可以看到,更新训练样本的权值分布公式如下:
现在,对权值更新公式
对于上面这个式子,非常重要,是下面这个推导的核心。对于公式
因此可以得出,Adaboost的误差界为
从公式
系数α
将问题转化为求最小值,这就比较简单了,只需要对
然后令导数式
说明:对于
(6) 式的变形,从第一步变换为第二步时,应用的规则是,当样本被正确分类,yiGm(xi)=1 ;当样本被错误分类,yiGm(xi)=−1 。而从第二步到第三步,则可以理解为正确分类的样本所占比例为1−em ,错误分类的样本占比em 。
样本权值
通过上面的推导,得到
而对于归一化因子
因此,根据
当样本被错误分类时,
公式
Summary
本文主要侧重于权值的推导,而编写这篇博文的目的主要是为了弥补先前学习过程中的疏忽与不足,进而达到学习的目的。关于文章的实现,可去博主的github下载源码csuldw-Adaboost (各位同学,记得给个star噢^_^),另外,也可参考先前的博文Machine Learning algorithm - Adaboost。关于机器学习的其它文章,本博客将会持续更新。
References
- Y Freund,R Schapire, A decision-theoretic generalization of on-line learning algorithms and an application to boosting, Journal of Popular Culture, 1997
- 统计学习方法》 by 李航
- Wikipedia-Adaboost
- 《机器学习 Machine Learning》 by 周志华
- Adaboost - 新的角度理解权值更新策略
- adaboost的通俗理解
- 关于adaboost的个人理解
- adaboost的过程要点理解
- 对于adaboost算法的理解
- 关于Adaboost的一些理解
- Android 源码系列之<八>从源码的角度深入理解缓存策略之LruCache
- 我对adaboost的一点理解
- 谈谈对Gentle Adaboost的一点理解~
- 谈谈对Gentle Adaboost的一点理解~
- adaboost迭代次数的理解
- AdaBoost代码理解算法的原理
- Cascade Adaboost样本更新
- AdaBoost算法理解
- 公司组策略的更新
- 索引的建立 更新策略
- 从技术角度理解的SOA
- 开发人员的角度理解 Excel 对象模型
- openCsv通用导出
- 数组 /java初学
- Fibonacci数列----网易2017内推笔试编程题合集(二)
- 记一次GIT的安装过程
- 在SpringMVC中获取request对象的几种方式
- Adaboost - 新的角度理解权值更新策略
- Map的插入操作和按照value排序
- centos6.5 部署Python3.5.2版本 配置ipython环境
- Angular实现一个简单的多选复选框的弹出框指令
- fatal: unable to access 'https://android.googlesource.com/platform/frameworks/volley/': Received HTT
- 封装之路(四) BaseFragment BaseViewModel BaseModel
- java写一个Swing小程序:《我的时钟》
- 二维数组 /java初学
- SVN命令使用详解