集成学习(Ensemble)的本质是一种组合基础模型实现更高泛化能力和精度的技术框架
本文参考了博客: http://www.cnblogs.com/jasonfreak/p/5657196.html
集成学习的三族算法
Bagging
通过重采样技术生成若干不同子训练集,然后在每个训练集上训练一个分类器,最终采用投票方式产生模型最终结果
- m个基础模型
- 从原始训练集中抽样生成m个子训练集,用子训练集训练每个基础模型
- 最终预测结果: 对所有基础模型预测的结果进行综合产生
代表模型
随机森林
- RF = Bagging + DT (随机森林中特征的选择也是随机的,这一点不同于DT,也不同与Bagging)
- 随机森林详情可参考ML——RF
Boosting
每个训练样例都有权重,每次训练新分类器的时候都着重训练那些在上一次分类过程中分错的样例,权重会随着迭代次数的变化而变化
- 训练思想是,每一轮迭代都将重心放到分错类的样本上
- 训练过程为阶梯状
- 基础模型按照次序依次训练(实现时可做到并行)
- 前一个模型的预测结果修改后一个模型的样本权重(注意:模型的训练集时不会变的,只有每个样本的权重在变化,增大分错的样本的权重,使得后面训练时重视分错的样本),以此类推
- 最终预测结果: 对所有基础模型预测的结果进行线性综合产生
代表模型
提升树
- Boosting Tree = AdaBoost + DT (AdaBoost是Boosting族算法的一种)
梯度提升树
- GBDT = Gradient Boosting + DT (Gradient Boosting是Boosting族算法的一种)
- GBDT详情可参考ML——GBDT
Stacking
每个分类器首先做一遍决策,然后将分类器们的决策送到更高一层的模型中,把他们当做特征再进行一次训练
- 训练所有基础模型
- 获取所有基础模型的预测结果
- 第j个模型对某个训练样本产生的预测值作为该训练样本的第j个特征,标签不变,生成一个新的数据集(注意,样本的特征空间大小发生了变化,标签没变)
- 基于新的训练集进行训练,得到预测模型M()
- 测试时也要将特征转换后再用M进行预测
- 实质上就是先用一些模型提取特征(这些模型的输出作为更高层模型的特征),然后再用模型的输出作为最终模型的特征,从而实现模型的堆叠(Stacking)
- 理论上可以堆叠各种各样的分类器
方差与偏差
- 偏差与方差可以参考我的博客: 模型的偏差与方差