AdaBoost算法简介
一、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算法简介的更多相关文章
- SIGAI机器学习第二十集 AdaBoost算法1
讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用 AdaBo ...
- AdaBoost算法原理简介
AdaBoost算法原理 AdaBoost算法针对不同的训练集训练同一个基本分类器(弱分类器),然后把这些在不同训练集上得到的分类器集合起来,构成一个更强的最终的分类器(强分类器).理论证明,只要每个 ...
- 机器学习--boosting家族之Adaboost算法
最近在系统研究集成学习,到Adaboost算法这块,一直不能理解,直到看到一篇博文,才有种豁然开朗的感觉,真的讲得特别好,原文地址是(http://blog.csdn.net/guyuealian/a ...
- Gradient Boosting算法简介
最近项目中涉及基于Gradient Boosting Regression 算法拟合时间序列曲线的内容,利用python机器学习包 scikit-learn 中的GradientBoostingReg ...
- SIGAI机器学习第二十二集 AdaBoost算法3
讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. AdaB ...
- AdaBoost 算法-分析波士顿房价数据集
公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...
- 集成学习之Adaboost算法原理小结
在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...
- Adaboost 算法
一 Boosting 算法的起源 boost 算法系列的起源来自于PAC Learnability(PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的 ...
- Adaboost 算法的原理与推导
0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...
随机推荐
- Windows下使用性能监视器监控SqlServer的常见指标
这篇文章主要介绍了Windows下使用性能监视器监控SqlServer的常见指标,常见指标包括Buffer Cache Hit Ratio.Pages/sec. Available Bytes.Dis ...
- lucene中模糊搜索的应用场景
模糊搜索:wildCardQuery的时候,是用* 表示全部,?表示一个字符,那么直接用*搜索,就能查到当前索引文件的全部数据个数 这里搜索查到的个数和用工具查到的个数是一致的...
- 音痴又音痴的LT (vector)
http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 分析:若是每次都想用sort继而来查第k个数,那会T的特别惨~ C++内置函数upperbo ...
- iOS 开发线程 gcd
基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation ...
- 使用12c的DBCA创建数据库的时候报错TNS-04404
情况:之前使用的默认的pdb数据库pdborcl,连接的时候使用SQLdeveloper,配置了tnsname.ora,里面添加了pdborcl的service:这里报错是感觉tnsname配置错误了 ...
- PostScript的简单例子-用粗线画一个圆
一 近期需要用到PostScript,查询资料学习PS的语法 简单的画一个圆的例子 %!PS-Adobe-3.0 /inch{72 mul} def 4.25 inch 5.5 inch 1.5 in ...
- php使用位与运算符【&】或【|】实现权限管理
权限值是这样的2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)2^1=2,相应2进数为”0010″2^2=4,相应2进数为”0100″2^3=8,相应2进数为”1 ...
- hdu 1231
最大连续子序列 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- java web 资源地址写法
前提:假设web应用test(工程名) webapps下面有一资源文件test.html 规则:在获取资源时一般使用的是相对路径,以符号/开头,而 / 代表什么取决于这个地址给谁使用.服务器使用时,/ ...
- 新机自动创建yum库
#!/bin/bash#for a newsystem to setup auto reposity YUM_DIR=/etc/yum.repos.dMOUNT_DIR=/mntDEV_DIR=&qu ...