在这两个条件前提下,对于第一个问题,有两种解决思路。一种是使用不一样类别的算法来构建个体学习器,例如对于同一个任务分别使用决策树算法、支持向量机、神经网络等不一样算法来构建学习器。另外一种思路是全部个体学习器都使用同一种算法进行构建,这种思路是目前集成学习算法的主流。在全部个体学习器都使用同种算法构建时,如何保证学习器之间的差别性呢?有两种方案:html5
- 每次训练个体学习器时,对原始数据集进行抽样得到不一样数据集做为当前训练集,每个训练样本在抽样训练集中能够屡次或不出现,通过$T$次训练后,可获得$T$个不一样的没有相互依赖的个体学习器学习器。Bagging、随机森林就是这种方案的表明。
- 经过更新权重的方式不断地使用一个弱学习器弥补前一个弱学习器的“不足”的过程,来串行地构造一个较强的学习器,这个强学习器可以使目标函数值足够小。这一方案的表明是Boosting系列的算法,包括Adaboost、GBDT、XGBOOST等
在本文中,咱们先对第一种方案的两种算法——Bagging和随机森林进行介绍,在后续的博文中,再对Adaboost、GBDT等算法进行分析。java
3 Bagging¶
Bagging是并行式集成学习方法的最典型表明,算法名称来源于Bootstrap aggregating的简写,又称装袋算法,这种算法直接采用自助采样法得到$T$个各不相同的数据集,分别使用这$T$个数据集进行训练可得到$T$个个体学习器,再将这些学习器组合起来共同完成分类或者回归任务。当完成分类任务时,采用简单投票法对$T$个体学习器结果进行组合后输出;当染成回归任务时,采用简单平均法对$T$个个体学习器学习结果进行组合输出。node

3.1 自助采样法¶
自助采样法(Bootstrap sampling是一种从给定原始数据集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。对于给定包含$m$个样本的原始数据集$D$,进行自助采样得到$D'$,具体操做方式:每次采样时,从几何$D$中随机抽取一个样本拷贝一份到集合$D'$中,而后将样本放回集合$D$中,是的该羊被后续采样中仍有可能被采集到;重复这一步骤$m$次后,就能够得到一样包含$m$个样本的集合$D'$,集合$D'$就是自助采样的最终结果。能够想象,集合$D$中的样本有一部分会在集合$D'$中出现重复出现,而有些样本却一次都不出现。在$m$次抽样中,某个样本从未被抽到的几率为${(1 - \frac{1}{m})^m}$,当集合$D$样本足够多时有: $$\mathop {\lim }\limits_{m \to \infty } {(1 - \frac{1}{m})^m} = \frac{1}{e} \approx 0.368$$ 也就是说,原始集合$D$中有36.8%的样本不包含在经过自助采样法得到的集合$D'$中。在Bagging中,未被采集到的36.8%的样本能够用做测试集对个体学习器性能进行评估,当个体学习器使用决策树算法构建时,这部分用本能够用来辅助树剪枝;使用神经网络构建个体学习器时,能够用来防止过拟合。python
3.2 结合策略¶
假设共有$T$个个体学习器,以$\{ {h_1},{h_2}, \cdots ,{h_T}\} $表示,其中样本$x$经$h_i$后的输出值为$h_i(x)$。对于结合$T$个个体学习器输出值,主要有一下几种策略:jquery
(1)平均法 平均法经常使用于回归类任务的数值型输出,包括简单平均法、加权平均法等。linux
- 简单平均法 $$H(x) = \frac{1}{T}\sum\limits_{i = 1}^T {{h_i}(x)} $$
- 加权平均法 $$H(x) = \sum\limits_{i = 1}^T {{w_i}{h_i}(x)} $$ 式中,$w_i$是个体学习器$h_i$的权重,一般要求${w_i} \geqslant 0$且$\sum\limits_{i = 1}^T {{w_i}} = 1$。至于$w_i$的具体值,能够根据$h_i$的具体表现来肯定,$h_i$准确率越高,$w_i$越大。
对于两种平均法的选择上,当个体学习器性能相差较大时,选用加权平均法;当各个体学习器性能相近时,使用简单加权平均法。
(2)投票法
投票法更多用于做为分类任务的集成学习的结合策略。android
- 相对多数投票法 也能够认为是多数决策法,即预测结果中票数最高的分类类别。若是不止一个类别得到最高票,则随机选择一个做为最终类别。
- 绝对多数投票法 不光要求得到票数最高,并且要求票数过半,不然决绝输出。
- 加权投票法 与加权平均法相似,每一个个体学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
(3)学习法
学习法是一种比平均法和投票法更为强大复杂的结合策略,学习法以全部个体学习器的输出做为一个数据集,额外使用一个学习器对该数据及进行学习,而后输出最终的结果。Stacking方法是学习法的一个经典表明,目前大多数应用中所说的学习法都是指Stacking方法。甚至由于Stacking方法的特殊性和复杂性,不少资料中将Stacking方法当作是与Bagging和Boosting同样的一类集成学习算法。
Stacking方法中将以前提到的全部个体学习器称为初级学习器,将用于结合的学习器称为次级学习器。Stacking方法先从原始数据集训练处初级学习器,而后“生成”一个新的数据集用于训练次级学习器。在新的数据集中,初级学习器的输出被当作样本输出特征,而初始样本的类别标签人被当作新数据及的类别标签。(注:关于Stacking能够参考这篇博客)