集成学习(ensemble learning
)是非常实用的机器学习方法,屡屡在工业界与机器学习相关的竞赛中大放异彩。然而与支持向量机(SVM
),朴素贝叶斯(NB
)等传统的机器学习方法不同的是,集成学习本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务,用大白话来说就是——“三个臭皮匠抵过一个诸葛亮”。更加难能可贵的是,集成学习用途广泛,不仅可以用于分类问题,还可以应用在回归问题,特征选取等等。因此,本文将对集成学习的基本原理进行总结,希望对大家有所帮助,并与大家共同进步。
个体与集成
集成学习通过构建并结合多个学习器来完成学习任务,如下图所示(图片来自周志华老师的《机器学习》)。
从图中我们不难看出集成学习的一般结构:先产生一组“个体分类器”,或者说弱分类器,再根据某种策略将它们结合起来。个体分类器通常由一个现有的学习算法从数据集中训练得到,例如决策树算法,神经网络等。此时,集成中只包含同类的分类器,例如“决策树集成”中全部个体分类器都是决策树等。同质集成学习的个体分类器称为“基学习器”,相应的学习算法也称之为“基学习算法”。当然,集成学习也可以是异质的,例如同时包含决策树与神经网络等。相应地,个体分类器称之为“组件学习器”或者直接称之为个体分类器。
因此,集成学习有两个主要的问题需要解决,第一是如何得到若干个个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。
目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是 CART
决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是 boosting
系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是 bagging
和随机森林(Random Forest
)系列算法。下面就分别对这两类算法做一个概括总结。
Boosting
Boosting
算法的基本原理十分简单:
- 从训练集用初始权重训练出一个弱学习器;
- 根据弱学习器的学习误差率表现来更新训练样本的权重,使得之前步骤1中的弱学习器学习误差率高的训练样本点的权重变高,从而在后面的弱学习器2中得到更多的重视;
- 基于调整权重后的训练集来训练弱学习器2;
- 如此重复进行,直至满足一定条件,如学习误差率足够低,或者迭代轮数足够大等。
- 所有的弱学习器通过结合策略进行集成,得到最终的强学习器;
其实,以上步骤可以概括为下图(图片来源于集成学习原理小结)
在 Boosting
算法家族中,最为出名的当属 Adaboost
和 GBDT。感兴趣的同学可以点击链接阅读我的相关文章。
Bagging
与 Boosting
算法不同,在 Bagging
算法中,弱学习器彼此之间没有联系,可以并行学习,如下图所示(图片来源于集成学习原理小结)
从上图可以看出,Bagging
的个体弱学习器的训练集是通过随机采样得到的。通过
T
T
T 次的随机采样,我们就可以得到
T
T
T 个采样集,对于这
T
T
T 个采样集,我们可以分别独立的训练出
T
T
T 个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
此外,在 Bagging
算法中,常采用自助采样法(Bootstrap sampling
),即对于
m
m
m 个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集
m
m
m 次,最终可以得到
m
m
m 个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
随机森林是 Bagging
算法家族中的典型代表。感兴趣的同学可以点击链接阅读我的相关文章。
集合策略
在前面的小结中,我们阐述了集成学习中的弱学习器 { h 1 , h 2 , … , h T } \{h_1, h_2, \dots, h_T\} {h1,h2,…,hT}的学习,那么,我们又如何将它们结合得到最终的强学习器呢?
平均法
对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出,
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = \frac{1}{T}\sum_{i=1}^Th_i(x) H(x)=T1i=1∑Thi(x)
此外,如果每个弱学习器都有一个权重
w
w
w,表示其重要程度,那么原式可改写为,
H
(
x
)
=
1
T
∑
i
=
1
T
w
i
h
i
(
x
)
H(x) = \frac{1}{T}\sum_{i=1}^Tw_ih_i(x)
H(x)=T1i=1∑Twihi(x)
其中,
w i > 0 , a n d ∑ i = 1 T w i = 1 w_i > 0, \quad and \quad \sum_{i=1}^Tw_i = 1 wi>0,andi=1∑Twi=1
投票法
对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是 { c 1 , c 2 , … , c N } \{c_1, c_2, \dots, c_N\} {c1,c2,…,cN},对于任意一个预测样本 x x x,我们的 T T T个弱学习器的预测结果分别是 { h 1 ( x ) , h 2 ( x ) … , h T ( x ) } \{h1(x),h2(x)\dots, h_T(x)\} {h1(x),h2(x)…,hT(x)}。
最简单的投票法是少数服从多数,也就是 T T T 个弱学习器的对样本 x x x 的预测结果中,数量最多的类别 c i c_i ci 为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
H ( x ) = c a r g m a x j ∑ i = 1 T h i j ( x ) H(x) = c_{\mathop{argmax}\limits_{j}\sum_{i=1}^Th_i^j(x)} H(x)=cjargmax∑i=1Thij(x)
稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
H ( x ) = { c j , i f c a r g m a x j ∑ i = 1 T h i j ( x ) a n d ∑ i = 1 T h i j ( x ) > 0.5 ∑ k = 1 N ∑ i = 1 T h i k ( x ) ; r e j e c t , o t h e r w i s e . H(x) = \left\{ \begin{aligned} &c_j, \quad if \quad c_{\mathop{argmax}\limits_{j}\sum_{i=1}^Th_i^j(x)} \quad and \quad \sum_{i=1}^Th_i^j(x) > 0.5\sum_{k=1}^{N}\sum_{i=1}^Th_i^k(x); \\ &reject, \quad otherwise. \end{aligned} \right. H(x)=⎩⎪⎪⎨⎪⎪⎧cj,ifcjargmax∑i=1Thij(x)andi=1∑Thij(x)>0.5k=1∑Ni=1∑Thik(x);reject,otherwise.
更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
H ( x ) = c a r g m a x j ∑ i = 1 T w i h i j ( x ) H(x) = c_{\mathop{argmax}\limits_{j}\sum_{i=1}^Tw_ih_i^j(x)} H(x)=cjargmax∑i=1Twihij(x)
同样地,
w i > 0 , a n d ∑ i = 1 T w i = 1 w_i > 0, \quad and \quad \sum_{i=1}^Tw_i = 1 wi>0,andi=1∑Twi=1
学习法
可能有的同学觉得以上的集合策略过于 naive
。别急,有看起来高大上的。当训练数据较多时,我们可以使用“学习法”这一更强大的结合策略。其中, stacking
就是 学习法
的典型代表。在 stacking
中,我们把弱学习器称为初级学习器,用于结合的学习器称为次级学习器。其算法如下,
总结
至此,我们对集成学习有了一定的了解。感兴趣的同学可以阅读我的相关文章 Adaboost
, GBDT 和 随机森林。
参考文献
- 周志华 《机器学习》
- 刘建平 集成原理小结