一、AdaBoost的损失函数

  AdaBoost优化的是指数损失,即\begin{align*} \mathbb{E}_{\boldsymbol{x} \sim \mathfrak{D}, y}[e^{-y H(\boldsymbol{x})}] = \int_{\boldsymbol{x}} \sum_y e^{-y H(\boldsymbol{x})} p(y|\boldsymbol{x}) p(\boldsymbol{x}) \mbox{d} \boldsymbol{x} \end{align*}记$F(\boldsymbol{x}, H, H') = \sum_y e^{-y H(\boldsymbol{x})} p(y|\boldsymbol{x}) p(\boldsymbol{x})$,于是\begin{align*} F_H & = \sum_y e^{-y H(\boldsymbol{x})} (-y) p(y|\boldsymbol{x}) p(\boldsymbol{x}) = - e^{- H(\boldsymbol{x})} p(y=1|\boldsymbol{x}) p(\boldsymbol{x}) + e^{H(\boldsymbol{x})} p(y=-1|\boldsymbol{x}) p(\boldsymbol{x}) \\ F_H' & = 0 \end{align*}由Euler-Lagrange方程知该泛函的最优解应满足$e^{- H(\boldsymbol{x})} p(y=1|\boldsymbol{x}) p(\boldsymbol{x}) = e^{H(\boldsymbol{x})} p(y=-1|\boldsymbol{x}) p(\boldsymbol{x})$,即\begin{align*} H(\boldsymbol{x}) = \frac{1}{2} \ln \frac{p(y=1|\boldsymbol{x})}{p(y=-1|\boldsymbol{x})} \end{align*}于是\begin{align*} sign(H(\boldsymbol{x})) = \begin{cases} 1 & p(y=1|\boldsymbol{x}) > p(y=-1|\boldsymbol{x}) \\ -1 & p(y=1|\boldsymbol{x}) < p(y=-1|\boldsymbol{x}) \end{cases} \end{align*}这表明若$H(\boldsymbol{x})$是指数损失的最优解,则取最终分类器为$sign(H(\boldsymbol{x}))$可达到Bayes最优错误率,故取指数损失作为优化目标是合理的。

二、AdaBoost的算法原理

  设前$t-1$轮的分类器组合为$H_{t-1}$,那么第$t$轮有\begin{align*} E = \sum_{i=1}^m e^{- y_i H_t (\boldsymbol{x}_i)} = \sum_{i=1}^m e^{- y_i H_{t-1}(\boldsymbol{x}_i) - y_i \alpha_t h_t(\boldsymbol{x}_i)} = \sum_{i=1}^m \mathcal{D}_{t-1}(i) e^{- y_i \alpha_t h_t(\boldsymbol{x}_i)} \end{align*}其中$\mathcal{D}_{t-1}(i) = e^{- y_i H_{t-1}(\boldsymbol{x}_i)}$可看作第$t$轮样本$(\boldsymbol{x}_i, y_i)$的权重,进一步化简有\begin{align*} E & = e^{- \alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i = h_t(\boldsymbol{x}_i)} + e^{\alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)} \\ & = e^{- \alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) - e^{- \alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)} + e^{\alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)} \\ & = (e^{\alpha_t} - e^{- \alpha_t}) \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)} + e^{- \alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) \end{align*}注意此时$E$是关于$\alpha_t$和$h_t$的函数,其中第二项与$h_t$无关,故\begin{align*} h_t = \mathop{argmin}_{h} \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h(\boldsymbol{x}_i)} \end{align*}即第$t$轮选取的基分类器应该最小化加权错误率。此外易知有\begin{align*} \frac{\partial E}{\partial \alpha_t} = (e^{\alpha_t} + e^{- \alpha_t}) \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)} - e^{- \alpha_t} \sum_{i=1}^m \mathcal{D}_{t-1}(i) \end{align*}令其为零可得\begin{align*} e^{2 \alpha_t} = \frac{\sum_{i=1}^m \mathcal{D}_{t-1}(i)}{\sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)}} - 1 = \frac{1 - \sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)}/\sum_{i=1}^m \mathcal{D}_{t-1}(i)}{\sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)}/\sum_{i=1}^m \mathcal{D}_{t-1}(i)} \Longrightarrow \alpha_t = \frac{1}{2} \ln \frac{1 - \epsilon_t}{\epsilon_t} \end{align*}其中\begin{align} \label{eq: epsilon} \epsilon_t = \frac{\sum_{i=1}^m \mathcal{D}_{t-1}(i) I_{y_i \neq h_t(\boldsymbol{x}_i)}}{\sum_{i=1}^m \mathcal{D}_{t-1}(i)} \end{align}
  有了$\alpha_t$和$h_t$就可以计算下一轮所有样本的权重\begin{align*} \mathcal{D}_{t}(i) = e^{- y_i H_t(\boldsymbol{x}_i)} = \mathcal{D}_{t-1}(i) e^{- y_i \alpha_t h_t(\boldsymbol{x}_i)} \end{align*}注意将权重进行线性拉升不会影响$\epsilon_t$的值,故令\begin{align*} \mathcal{D}'_{t}(i) = \frac{\mathcal{D}_{t}(i)}{\sum_{i=1}^m \mathcal{D}_{t}(i)} \end{align*}即每轮结束后将权重归一化为一个概率分布,这样(\ref{eq: epsilon})式中的分母为1,$\epsilon_t$就是加权错误率。

  算法如下图所示:

AdaBoost算法简介的更多相关文章

  1. SIGAI机器学习第二十集 AdaBoost算法1

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用 AdaBo ...

  2. AdaBoost算法原理简介

    AdaBoost算法原理 AdaBoost算法针对不同的训练集训练同一个基本分类器(弱分类器),然后把这些在不同训练集上得到的分类器集合起来,构成一个更强的最终的分类器(强分类器).理论证明,只要每个 ...

  3. 机器学习--boosting家族之Adaboost算法

    最近在系统研究集成学习,到Adaboost算法这块,一直不能理解,直到看到一篇博文,才有种豁然开朗的感觉,真的讲得特别好,原文地址是(http://blog.csdn.net/guyuealian/a ...

  4. Gradient Boosting算法简介

    最近项目中涉及基于Gradient Boosting Regression 算法拟合时间序列曲线的内容,利用python机器学习包 scikit-learn 中的GradientBoostingReg ...

  5. SIGAI机器学习第二十二集 AdaBoost算法3

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. AdaB ...

  6. AdaBoost 算法-分析波士顿房价数据集

    公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...

  7. 集成学习之Adaboost算法原理小结

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...

  8. Adaboost 算法

    一 Boosting 算法的起源 boost 算法系列的起源来自于PAC Learnability(PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的 ...

  9. Adaboost 算法的原理与推导

    0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...

随机推荐

  1. SVM2---核函数的引入

    前边总结了线性SVM,最终转化为一个QP问题来求解.后来又考虑到非线性SVM,如果特征特别特别多的话,直接使用QP的话求解不了,我们经过一系列的转化,把这一问题转化为训练集大小n量级的QP问题. ht ...

  2. [转]VS 2013 连接数据库报错 未能加载文件或程序集 Microsoft.SqlServer.Management.Sdk.Sfc

    原文链接:http://stackoverflow.com/questions/16906686/could-not-load-file-or-assembly-microsoft-sqlserver ...

  3. Python3 多线程下载代码

    根据http://www.oschina.net/code/snippet_70229_2407修改而来的增强版.貌似原版源自Axel这个多线程下载工具. ''' Created on 2014-10 ...

  4. UVA315 (无向图求割点)

    题目大意:给定一个无向图,问共存在多少个割点.(割点:去掉此点后此图会断开连接)割点有两种存在:一种是第一次搜索的根节点,若其子节点数超过两个,则此点去掉后图会 断开连接,因此此点为割点:或者此点为搜 ...

  5. iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值实现方法:1.通过设置属性,实现页面间传值:2.委托delegate方式:3.通知notification方式:4.block方式:5.UserDefault或者文件方式:6.单例模式 ...

  6. poj 3264 Balanced Lineup (RMQ)

    /******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...

  7. Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系

    一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制 ...

  8. iOS静态库.a文件制作和导入使用

    iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...

  9. 复利test

    因为上节课老师有给我们讲了单元测试的概念及其基本操作,我就对我之前的复利计算器进行了改进和测试.因为从控制台的简单输入输出对单元测试来说不够完善,便参考了其他同学的优秀编程又重新写了一个复利计算器的框 ...

  10. android studio view.setId报错

    自定义控件设置id的时候会报错,如:view.setId(100); 解决方法: 方案一:通过调用View.generateViewId()作为setId的参数,但此方案不是最佳方案,因为View.g ...