提高(boosting)方法是一种经常使用的统计学习方法,应用普遍且有效。在分类问题中,它经过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提升分类性能。算法
为何叫”提高“方法框架
在几率近似正确(PAC)学习框架中,一个概念,若是存在一个多项式的学习算法可以学习它,而且正确率很高,称这个概念是强可学习的,若正确率仅比随机猜测略好,称这个概念是弱可学习的。有趣的是有人证实了强可学习与弱可学习是等价的,那么,若是发现了弱学习算法(比较容易找到),就有可能将它提高为强学习算法。最具表明性的是AdaBoost算法。机器学习
大多数的提高方法都是改变训练数据的几率分布(训练数据的权值分布),针对不一样的训练数据分布调用弱学习算法学习一系列弱分类器。这样,关键就在于如何改变训练数据的权值,以及如何组合这些弱分类器。AdaBoost的作法是提升那些前一轮弱分类器错误分类样本的权值。函数
AdaBoost算法性能
- 输入:训练数据集\(T = \{(x_1,y_1), (x_2, y_2), ..., (x_N,y_N) \}\),其中\(x_i \in \mathcal{X} \subseteq R^n\),\(y_i \in \mathcal{Y} = \{-1, +1\}\);弱学习算法。
- 输出:最终分类器\(G(x)\)
- 初始化训练数据的权值分布\[D_1 = (w_{11}, ...,w_{1i},...,w_{1N}), w_{1i} = \frac{1}{N}, i = 1,2,...,N\]
对\(m = 1,2,...,M\)学习
a. 使用具备权值分布\(D_m\)的训练数据集学习,获得基本分类器\[G_m(x): \mathcal{X} \rightarrow \{-1, +1\}\] b. 计算\(G_m(x)\)在训练数据集上的分类偏差率\[e_m = P(G_m(x_i)\neq y_i)=\sum_{i =1}^{N} w_{mi} I(G_m(x_i) \neq y_i)\] c. 计算\(G_x(x)\)的系数\[\alpha_m = \frac{1}{2} \log \frac{1 - e_m}{e_m}\] d. 更新训练数据集的权值分布\[D_{m+1} = (w_{m+1,1}, ... ,w_{m+1,i}, ..., w_{m+1,N})\] \[w_{m+1,i} = \frac{w_{mi}}{Z_m} \exp(-\alpha_m y_i G_m(x_i)), i = 1,2,...,N\],这里,\(Z_m\)是规范因子\[Z_m = \sum_{i = 1}^N w_{wi} \exp (-\alpha_m y_i G_m(x_i))\]它使\(D_m\)成为一个几率分布。(简单点就是正确的除以\(\alpha\),错误的乘以\alpha,规范因子不要也问题不大吧)构建基本分类器的线性组合\[f(x) = \sum_{m = 1}^M \alpha_m G_m (x)\]获得最终的分类器\[G(x) = sign(f(x)) = sign(\sum_{m = 1}^M \alpha_m G_m(x))\]优化
AdaBoost算法最终分类器的训练偏差界为:\[\frac{1}{N} \sum_{i = 1}^N I(G(x_i) \neq y_i) \leq \frac{1}{N} \sum_i \exp (-y_i f(x_i)) = \prod_m Z_m\]spa
在每一轮选取适当的\(G_m\)使得\(Z_m\)最小,从而使训练偏差降低最快。blog
二分类问题AdaBoost的训练偏差界:\[\prod_{m = 1}^M Z_m = \prod_{m = 1} ^M [2\sqrt{e_m(1-e_m)} ] = \prod _{m=1}^M \sqrt{(1 - 4\gamma_m^2)} \leq \exp (-2\sum_{m=1}^M \gamma_m^2)\]这里,\(\gamma_m = \frac{1}{2} - e_m.\)get
若是存在\(\gamma > 0\),对全部\(m\)有\(\gamma_m \geq \gamma\),则\[\frac{1}{N} \sum_{i = 1}^N I(G(x_i) \neq y_i) \leq \exp (-2M\gamma^2)\]
这代表在此条件下,AdaBoost的训练偏差是以指数速率降低的。
可认为AdaBoost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习方法。能够由前向分步算法推导出AdaBoost。
加法模型\[f(x) = \sum_{m = 1}^M \beta_m b(x; \gamma_m)\],其中,\(b(x; \gamma_m)\)为基函数,\(\gamma_m\)为基函数的参数,\(\beta_m\)为基函数的系数。
每一步中极小化损失函数\[(\beta_m, \gamma_m) = \arg \min_{\beta_m, \gamma_m} \sum_{i = 1}^N L(y_i, f_{m-1}(x_i) + \beta b(x_i; \gamma))\]
提高树是以分类树或回归树为基本分类器的提高方法。提高树被认为是统计学习中性能最好的方法之一。
提高树模型
\[f_M(x) = \sum_{m - 1}^M T(x; \Theta_m)\]其中,\(T(x; \Theta_m)\)表示决策树;\(\Theta_m\)为决策树的参数;\(M\)为树的个数。
提高树算法
与AdaBoost相似,对于二分类问题,提高树算法只需将AdaBoost中的基本分类器限制为二类分类树便可。对于回归问题,采用如下前向分步算法:\[f_0(x) = 0\] \[f_m(x) = f_{m-1}(x) + T(x; \Theta_m), m = 1,2,...,M\] \[f_M(x) = \sum_{m=1}^M T(x; \Theta_m)\] 在前向分步算法的第\(m\)步,给定当前模型\(f_{m-1}(x)\),需求解\[\hat{\Theta}_m = \arg \min_{\Theta_m} \sum_{i =1}^N L(y_i, f_{m-1}(x_i) + T(x_i; \Theta_m))\]获得第\(m\)棵树的参数。
当采用平方偏差损失函数时,损失函数化简为:\[[r - T(x; \Theta_m)]^2\],其中\[r = y - f_{m-1}(x)\]是当前模型拟合数据的残差。
- 回归问题的提高树算法
- 初始化\(f_0(x) = 0\)
对\(m = 1, 2, ...,M\)
- 计算残差\(r_{mi} = y_i - f_{m-1}(x_i), i = 1, 2, ..., N\)
- 拟合残差\(r_{mi}\)学习一个回归树,获得\(T(x; \Theta_m)\)
- 更新\(f_m(x) = f_{m-1}(x) + T(x; \Theta_m)\)
获得回归问题提高树\[f_M(x) = \sum_{m -1}^M T(x; \Theta_m)\]
(注:本文为读书笔记与总结,侧重算法原理,来源为《统计学习方法》一书第八章)
做者:rubbninja
出处:http://www.cnblogs.com/rubbninja/ 关于做者:目前主要研究领域为机器学习与无线定位技术,欢迎讨论与指正!