0 - 思想
Bagging算法思想是减少预测方差(variance),Boosting算法思想是为了减少预测偏差(bias)。
Boosting算法思想是将“弱学习算法”提升为“强学习算法”。一般来说,弱学习算法容易找到,而后通过反复学习得到一系列弱分类器,再通过加权将他们组合起来得到一个强分类器。
Boosting算法主要有两个核心概念:加法模型和前向分步算法。
加法模型即是将一系列弱分类器线性相加组成强分类器的过程,有如下形式
$$F_M(x;P)=sum_{m=1}^neta_m h_m(x;a_m),$$
其中$h(x;a_m)$表示第$m$个弱分类器,$a_m$对应该弱分类器的最优参数,$eta_m$表示该分类器在强分类器中所占比重,$P$是所有$a_m$和$eta_m$的组合。
前向分步指的是在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得到的(顺序依次进行训练,sequentially),可以表达为
$$F_m(x)=F_{m-1}(x)+eta_m h_m(x;a_m).$$
不同的Boosting算法具有不同的损失函数,常用的AdaBoost是损失函数为指数损失的Boosting算法。
1 - AbaBoost
1.0 - 特点
- 在每一轮迭代中,AdaBoost改变了训练数据的权值(即改变了样本的概率分布),其目标是为了将关注点放在被错误分类的样本上。具体做法为:减少上一轮被正确分类的样本权值,增加上一轮被错误分类的样本权值。综合起来来说,就是每一轮迭代的弱分类器学习的侧重点是不一样的。
- AdaBoost采用加权多数表决方法,即加大分类误差小的弱分类器的权重,降低分类误差大的弱分类器的权重。
1.1 - 算法
输入:训练集$D={(x_1,y_1),(x_2,y_2),cdots,(x_m,y_m)}$,基础学习算法$varsigma$,迭代次数$T$,误差终止条件
输出:$H(x)=signleft (sum_{t=1}^{T}alpha_t h_t(x) ight )$
- $omega_1(x)=1/m$(初始化权重分布)
- for $t=1,cdots,T$
- $h_t=varsigma(D,omega_t)$ (以数据集$D$和权重分布$omega_t$训练弱分类器$h_t$)
- $epsilon_t=P_{xsim omega_t}(h_t(x) eq f(x))$ (衡量弱分类器$h_t$的误差)
- if $epsilon_t$满足误差终止条件 then break
- $alpha_t=frac{1}{2}lnleft ( frac{1-epsilon_t}{epsilon_t} ight )$ (计算弱分类器$h_t$在最终强分类器中的权重)
- $omega_{t+1}(x)=frac{omega_t(x)}{Z_t} imesleft{egin{matrix} exp(-alpha_t) if h_t(x)=f(x)\exp(alpha_t) if h_t(x) eq f(x) end{matrix} ight.=frac{omega_t(x)exp(-alpha_t f(x)h_t(x))}{Z_t}$(更新权重分布,其中$Z_t$是归一化因子)
- end
2 - 总结
- Boosting是一种按序构造的加模型
- AdaBoot是用指数损失作为损失函数的Boosting算法
- 采用基础回归模型并用梯度下降法来优化log损失的方法:LogitBoost
- 其他的变种:L2Boost或者其他更一般的Gradient Boosting(functional gradient descent)