统一框架下的多类别提升法(AdaBoost)

最近打算做些AdaBoost的工作,首先要解决的是,通常的AdaBoost都是针对二分类问题的,有必要将其扩展至多分类应用。当然最自然的想法是多次二分类处理,但后面发现了一个统一的框架Multi-class AdaBoost

Paper

说一些关于paper的事情。

方法

该方法的核心点在于对第\(m\)个分类器的权重\(\alpha^{(m)}\)更新时,从原先二分类的

\[\begin{equation}\label{eq:bin-alpha} \alpha^{(m)}=\log \frac{1-err^{(m)}}{err^{(m)}} \end{equation} \]

改为

\[\begin{equation}\label{eq:multi-alpha} \alpha^{(m)}=\log \frac{1-err^{(m)}}{err^{(m)}} +\log (K-1) \end{equation} \]

其中\(err\)代表错分率,\(K\)是类别总数。
从这点来看,这个方法是要解决权重出现负数的情况。对\(\alpha^{(m)}>0\)进行求解,得到

\[\begin{equation}\label{eq:err-less} err < \frac{K-1}{K} \end{equation} \]

也就是说,只要求训练出的分类器比随机猜测强。这与二分类的框架思想是一致的,很nice。

其他

这段说说文中发现的其他事项。

取最大引索号与贝叶斯的关系

这件事说起来有趣。比如做softmax的时候,要得到最终的预测类别,通常会将最后输出的向量之各分量进行性比较,取最大的分量的引索号作为输出的预测类别编号。这听上去是很显然的事情。但文中的Section 2处说

The Bayes optimal classification rule them agrees with the sign of f*(x)...(具体见原文)

后面给出了一个式子:

\[\begin{equation}\label{eq:Bayess} \mathop{ arg~max}_{y} Prob(Y=y|X=\vec{x})=sign(f^*(\vec{x})) \end{equation} \]

这就有趣了。也就是说对刚才的softmax输的向量而言,每个分量代表的是该类别的条件概率(给定观测\(\vec{x}\)),所以取argmax的意义是贝叶斯概率最大!

指数式损失函数求解

然后谈谈也是在Section 2中提及的指数损失函数,这是一个感觉有些可以讨论的地方。一个经典的描述是

\[\begin{equation}\label{eq:exp_loss} L(y,f)=e^{-yf(\bf{x})} \end{equation} \]

文章里面直接就得出最优解:

\[\begin{eqnarray} f^*(\vec{x}) & = & \mathop{arg~min}_{f} L(y,f)\nonumber\\ & = & \frac{1}{2}\log\frac{Prob(c=1|\vec{x})}{Prob(c=2|\vec{x})}\label{eq:opt_f} \end{eqnarray} \]

关于如何得来的,看起来是有些值得考虑的,尤其是文中还说并不难得到。

求解

试着解了下,其中发现一些值得玩味的地方,记个思路。

\[\begin{eqnarray} f^* & = & \mathop{arg~min}_f E_{Y|X}\left[ e^{-yf(\vec{x})}\right] \label{eq:solve_f_1}\\ & = & \mathop{arg~min}_f \sum_{i=1}^{N}e^{-f(\vec{x_i})y_i }P(y_i=1|\vec{x_i}) + e^{-f(\vec{x_i})y_i }P(y_i=-1|\vec{x_i})\label{eq:solve_f_2} \end{eqnarray} \]


Sep 9, 2017 记

说一下符号对应关系,\ref{eq:solve_f_2}中的\(y_i=1,~y_i=-1\)分别对应\ref{eq:opt_f}中的\(c=1,~c=2\)(\ref{eq:opt_f}直接引自原文,\ref{eq:solve_f_2}是个人书写习惯)


这里想强调一下\(Y|X\),之所以对这个分布进行积分,可以理解为\(P(Y|X)\)是统计学习的终极目标,而实现模型是\(f\),所以在优化的时候就需要将样本中的这个信息提取出来;或者说,使模型贴合这个数据。这个模型就是\(f\),而贴合的过程就是,在训练数据的分布为\(P(Y|X)\)下调整\(f\),直观上,这个过程会使\(f\)带上训练数据的信息,也就是说,先验信息已经获得于\(f\)中。

这看起来,统计学习像是一个encode/decode过程,首端是对数据中的先验信息进行编码,末端是解码;进一步来说,对于如何实现的编码过程,具体来说,\(f\)具体是什么表达式或者,优化的目标函数是什么,如何优化这些问题,这些并不能限制统计学习的界限,根本性的是要设计出一个变换对,中间的操作都可以视为黑箱(这个词有些耳熟 😃 )。

关于\ref{eq:solve_f_2}的求解,可以用\(f(a)=ab+\frac{1}{a}c\)的模式进行求解。讨论一下,得到\(a^*=\sqrt{\frac{c}{b}}\),根号正好和\(\frac{1}{2}\)对上。

其他

  1. 我总认为统一的框架比多次二分类更为有用。这篇文章是2006年的,距离二分类AdaBoost的提出过去十一年,没想到最后的改动却是这样的,总和那个什么有些神似。
  2. 另一个可能会有些意思的讨论,应该是误差界的讨论,只是在看到过的文档里面似乎没有见过(看起来有些棘手)。

References

  1. Zhu, Ji, Saharon Rosset, and Trevor Hastie. "Multi-class AdaBoost." Statistics and Its Interface 2.3 (2009): 349-360.
posted @ 2017-09-04 19:38  rotxin  阅读(1082)  评论(0编辑  收藏  举报