集成算法:
将多个分类器集成起来而形成的新的分类算法。这类算法又称元算法(meta-algorithm)。最常见的集成思想有两种bagging和boosting。
集成思想 :
- boosting:重赋权(re-weighting)--基于错误提升分类器性能,通过集中关注被已有分类器分类错误的样本,构建新分类器并集成。boosting的思想是 : 训练集(其中各个元素)的权重是根据学习器的表现来改变的.bagging采用自助采样的方式”产生”出多个训练集.但是boosting只有一个训练集,但是训练集中各个元素(输入向量)的权重是不同的.boosting是先从具有初始权重的训练集训练出一个弱学习器1,然后根据弱学习器1的表现,来更新样本的权重. 然后再具有新的权重的训练集上面训练弱学习器2,然后根据弱学习器2的表现来更新样本的权重……..反复多次 ,得到m个学习器,最后整合这些弱学习器得到强学习器. 比较出名的就是Adaboost算法。
- bagging:bootstrap sampling(有放回地取样)
--基于数据随机重抽样的分类器构建方法。
bagging的思想 : 通过自助采样的方法得到K个训练集,然后分别在这K个训练集上面训练学习器.然后就得到了K个学习器. bootstrap : 不依靠外界的帮助,或者叫做自助法. 在这里表示一种有放回的抽样方法. bootstrap sampling : 自助采样,对于N个样本的训练集,我从里面随机取出m个样本,得到一个子训练集.然后把这些样本放回. 然后再取m个样本,得到第二个子训练集,再放回去………..重复这样的步骤k次,得到k个子训练集. Bagging可以看做是bootstrap aggregation的简写.
bagging对于弱学习器没有限制,也就是说,你可以用决策树,SVM等等都是可以的.一般常用的是决策树和神经网络. 因为bagging的随机采样思路,模型的泛化能力很强,降低了模型的方差.但是对于训练集的拟合程度就不是那么好,也就是说偏差会大一些. 符合bagging思想的比较出名的学习算法就是随机森林.
主要方法:
1、强可学习和弱可学习
在集成学习方法中,是将多个弱模型,通过一定的组合方式,组合成一个强模型。在《统计学习方法》中介绍了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。
在概率近似正确(probably approximately correct, PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的。一个概念,如果存在一个多项式的学习算法能够学习它,学习正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。Schapire指出在PAC学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。那么对于一个学习问题,若是找到“弱学习算法”,那么可以将弱学习方法变成“强学习算法”。
2、在验证集上找表现最好的模型
这样的方法的思想与决策树的思想类似,在不同的条件下选择满足条件的算法。
3、多个模型投票或者取平均值
对于数据集训练多个模型,对于分类问题,可以采用投票的方法,选择票数最多的类别作为最终的类别,而对于回归问题,可以采用取均值的方法,取得的均值作为最终的结果。在这样的思路里最著名的是Bagging方法.Bagging即Boostrap Aggregating,其中,Boostrap是一种有放回的抽样方法,其抽样策略是简单的随机抽样。
在Bagging方法中,让学习算法训练多次,每次的训练集由初始的训练集中随机取出的
个训练样本组成,初始的训练样本在某次的训练集中可能出现多次或者根本不出现。最终训练出
个预测函数
,最终的预测函数为
对于分类和回归问题可采用如下的两种方法:
- 分类问题:采用投票的方法,得票最多的类别为最终的类别
- 回归问题:采用简单的平均方法
随机森林算法就是基于Bagging思想的学习算法。
4、对多个模型的预测结果做加权平均
在Bagging方法中,其特点在于随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。而在对多个模型的预测结果做加权平均则是将多个弱学习模型提升为强学习模型,这就是Boosting的核心思想。
在Boosting算法中,初始化时对每个训练样本赋予相等的权重,如
,然后用该学习算法对训练集训练
轮,每次训练后,对训练失败的训练样本赋予更大的权重,也就是让学习算法在后续的学习中几种对比较难学的训练样本进行学习,从而得到一个预测函数序列
,其中每个
都有一个权重,预测效果好的预测函数的权重较大。最终的预测函数为
对于分类和回归问题可采用如下的两种方法:
- 分类问题:有权重的投票方式
- 回归问题:加权平均
AdaBoost和GBDT(Gradient Boosting Decision Tree)是基于Boosting思想的两个最著名的算法。
算法示例:
- 随机森林(Random Forest: bagging + 决策树):
将训练集按照横(随机抽样本)、列(随机抽特征)进行有放回的随机抽取,获得n个新的训练集,训练出n个决策树,通过这n个树投票决定分类结果。主要的parameters 有n_estimators 和 max_features。 - Adaboost (adaptive boosting: boosting + 单层决策树):训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量D。一开始,这些权重都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在统一数据集上再训练分类器。在第二次训练中,会调高那些前一个分类器分类错误的样本的权重。如此反复,训练出许多分类器来进行加权投票,每个分类器的权重是基于该分类器的错误率计算出来的。
- GBDT (Gradient Boosting Decision Tree: boosting + 决策树):
GBDT与Adaboost类似,反复训练出多个决策树,每次更新训练集的权重是按照损失函数负梯度的方向。n_estimators是弱分类器个数;max_depth或max_leaf_nodes可以用来控制每棵树的规模;learning_rate是hyper-parameter,取值范围为(0, 1.0],用来控制过拟合与欠拟合
Boosting和Bagging的区别:
(1)从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;而Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更加明显;
(2)Bagging的训练集的选择是随机的,各轮训练集之间相互独立,而Boosting的各轮训练集的选择与前面各轮的学习结果有关,即Bagging采用均匀取样,而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging;
(3)Bagging的各个预测函数没有权重,而Boosting是有权重的;
(4)Bagging的各个预测函数可以并行生成,而Boosting的各个预测函数只能顺序生成;
(5)对于像神经网络这样极为耗时的学习方法,Bagging可通过并行训练节省大量时间开销;
(6)bagging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性比bagging高。但在有些数据集中,boosting会导致Overfit。
补充结合策略 :