集成学习
前言
- 在监督学习算法中,我们希望训练得到的模型是一个各方面都稳定表现良好的模型,但是实际情况中却往往得到的是在某方面有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习则可以通过多个学习器相结合,来获得比单一学习器更优越的泛化性能。其潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来,所以出现了集成学习方法。
一、基本原理
- 集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting)或改进预测(stacking)的效果。
- 数据集大时:划分成多个小数据集,学习多个模型进行组合;
- 数据集小时:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合.
1. 方法分类
- 集合方法可分为两类:
序列集成方法: 其中参与训练的基础学习器按照顺序生成(例如 AdaBoost)。序列方法的原理是利用基础学习器之间的依赖关系。通过对之前训练中错误标记的样本赋值较高的权重,可以提高整体的预测效果。
并行集成方法: 其中参与训练的基础学习器并行生成(例如 Random Forest)。并行方法的原理是利用基础学习器之间的独立性,通过平均可以显著降低错误。
2. 特点
- 将多个分类方法聚集在一起,以提高分类的准确率(这些算法可以是不同的算法,也可以是相同的算法);
- 集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类;
- 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法;
- 通常一个集成分类器的分类性能会好于单个分类器;
- 如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策,自然地,就产生两个问题:
1)怎么训练每个算法?
2)怎么融合每个算法? - 下面介绍一下集成学习的几个方法:Bagging,Boosting以及Stacking。
二、集成学习的方法
1. Boosting
1.1 算法原理
- 关于Boosting的两个核心问题:
1)在每一轮如何改变训练数据的权值或概率分布?
2)通过什么方式来组合弱分类器?
- Boosting算法的工作原理是首先从训练集用初始权重训练出一个弱分类器1;
- 根据弱学习的学习误差率表现来更新训练样本的权重,使之前弱学习器1学习误差率高的训练样本点的权重变高而这些误差率高的点在后面的弱学习器2中得到更多的重视;
- 然后基于调整权重后的训练集来训练弱学习器2;
- 如此重复进行,直到弱学习器数达到事先指定的数目T,最终将T个弱学习器通过集合策略进行整合,得到最终的强学习器.
1.2 Adaboost算法
- Adaboost算法是一个前向加性模型,是一组基函数的加权和:
F ( x ) = ∑ i = 1 n w i f i ( x ) F(x)= \sum_{i=1}^n w_if_i(x)