标签:
Ensemble Learning
集成学习是组合多个模型来共同完成一个任务的方法,每个模型可以叫做基学习器,集学习器通过现有的学习算法从训练数据中训练得到,常见的如 Decision Tree 与 Neural Network ,衡量集成学习主要有两个指标:
准确性:即个体学习器要有一定的准确性,才能达到更好的效果。
多样性:即学习器之间要有一些差于,极端情况下完全相同的几个学习器集成起来后完全没有任何效果。
目前集成学习大致分为 Boosting 与 Bagging 两种方式,Boosting 中,基学习器存在强依赖关系,且基学习器是串行执行的;Bagging 中 基学习器不存在强依赖关系,各个学习器可以并行化执行。
Boosting
Boosting 是一种提升方法,将一系列弱学习器组合成为强学习器,它的工作流程是这样的,给定初始训练集构建一个基学习器,根据基学习器对训练样本的分布进行调整,使得先前学习器出错的样本收到更多关注,然后调整样本的权值进行下一个基学习器的学习,直至达到指定的迭代次数,然后将这一些列的基学习器加权组合即由一系列的弱学习器得到了强学习器。各个学习器的加权系数在算法迭代过程中会通过计算得出,Boosting 的代表算法为 Adaboost ,这里先给出 Adaboost 的伪代码,然后细致分析 Adaboost 的推导。
Adaboost
对于二分类问题,Adaboost 算法如下:
输入: 训练集 $D = \left \{(x_1y_1),(x_2,y_2),…,(x_N,y_N) \right \}$ ,其中 $x_i \in \mathbb{R}$ , $y_i \in \left \{+1,-1 \right \}$;
输出:学习器 $G_M(x)$.
1) 初始化权值 :$D_1 = {w_{11},w_{12},…,w_{1N}}$ ,其中 $w_{1i} = \frac{1}{N}$ ,$i=1,2,…,N$
2) $for$ $m = 1,2,…,M$ $do$:
3) 使用权值分布 $D_m$ 得到 基学习器 $G_m(x)$;
4) 计算 $G_m(x)$ 的误差 $e_m = P(G_m(x_i) \ne y_i) = \sum_iw_{mi}I(G_m(x_i) \ne y_i)$
5) 如果 $e_m > 0.5$ $break$; ( 不满足准确性,可能带来负面效果 )
6) 计算 $G_m(x)$ 的系数:$a_m = \frac{1}{2}ln\frac{1-e_m}{e_m}$
7) 更新权值分布,对于第 $m+1$ 次迭代的权值 $D_{m+1} = {w_{m+1,1},w_{m+1,2},…,w_{m+1,N}}$:\[ w_{m+1,i} = \frac{w_{mi}}{Z_m}exp(-a_m y_i G_m(x_i)) \]
这里 $Z_m$ 为规范化因子,$Z_m = \sum_i w_{mi}exp(-a_my_iG_m(x_i))$ ,使得 $D_m$ 为一个分布。
8) 分类器加权累加: $f(x) := \sum_m a_mG_m(x)$
9) end for
Adaboost 算法最终得到的强学习器为 : $G(x) = sign(f(x)) = sign(\sum_m a_mG_m(x))$
对于 Adaboost 算法的几点说明:
1)基学习器的参数 $a_m$ 代表了每个基学习器在最终分类器 $G(x)$ 中的重要程度, 首先注意到对 $0< e_ m \le \frac{1}{2}$ , 所以 $a_m \ge 0$ ,且 $a_m$ 随着 $e_m$ 的减小而增大,所以误差率越小的基学习器在最终得到的强学习器中所占的比重越大。
2)将训练样本的权重更新公式写成如下形式:
\[w_{m+1,i} = \left \{ \begin{aligned}
w_{mi}e^{-a_m} , G_m(x_i) = y_i \\
w_{mi}e^{a_m} \ , G_m(x_i) \ne y_i
\end{aligned} \right.\]
由于 $a_m \ge 0$ ,所以可以很明显可以看出 ,分类错误与分类正确的样本下一次迭代时权值差距将被拉开为 $e^{2a_m}$ 倍,因此,分类错误的点在下一次迭代时将起到更重要的作用。
3)$M$ 个分类器加权表决时系数为 $a_m$ ,需要注意 $\sum_m a_m \ne 1$,弱学习器加权函数 $f(x)$ 代表了最终学习结果的确信度,类似于线性回归后的 $sigmod$ 映射 。
标签:
原文地址:http://www.cnblogs.com/ooon/p/5663975.html