Bagging
Boosting
Stacking
个体与集成
组合必杀技
组合一定比单个好吗?
Bagging
Bagging算法
Bagging算法特点时间复杂度低
- 假定基学习器的计算复杂度为O(m),采样与投票/平均过程的复杂度为O(s),则bagging的复杂度大致为T(O(m)+O(s))
- 由于O(s)很小且T是一个不大的常数
- 因此训练一个bagging集成与直接使用基学习器的复杂度同阶
比较
包外估计Out-of-Bag Evaluation
- 对于任意给定的预测器,使用bagging,有些实例可能会被采样多次,而有些实例则可能根本不被采样
- 对每个预测器来说,平均只对63.2%的训练实例进行采样
- 剩余36.8%未被采样的训练实例称为包外(oob)实例
Bagging与随机森林-随机森林
Scikit-learn中的random forest
见官方文档
Boosting
Boosting算法
AdaBoost算法
Scikit-learn中的Adaboost
见官方文档
AdaBoost算法的训练误差分析
*AdaBoost算法是前向分步算法的特例
*前向分步算法
提升树Boosting Tree
-
以分类树或回归树为基本分类器的提升方法
对于分类问题,决策树是二叉分类树
对于回归问题,决策树是二叉回归树 -
对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可
回归问题的提升树
回归问题的提升树算法
GBDT(Gradient Boosting Decision Tree)
- 分类任务 sklearn.ensemble.GradientBoostingClassifier
- 回归任务 sklearn.ensemble.GradientBoostingRegressor
*SOTA
XGBoost: eXtreme Gradient Boosting
结合策略
结合策略(回归问题)– 平均法
结合策略(分类问题)– 投票法
结合策略 – 学习法
多样性
多样性度量
多样性
多样性增强
- 常见的增强个体学习器的多样性的方法
数据样本扰动
输入属性扰动
输出表示扰动
算法参数扰动
数据样本扰动
-
数据样本扰动通常是基于采样法
Bagging中的自助采样法
Adaboost中的序列采样 -
对数据样本的扰动敏感的基学习器(不稳定基学习器)
决策树,神经网络等 -
对数据样本的扰动不敏感的基学习器(稳定基学习器)
线性学习器,支持向量机,朴素贝叶斯,k近邻等
数据样本扰动对“不稳定基学习器”很有效
输入属性(特征)扰动
输出表示扰动
- 翻转法(Flipping Output)
随机改变一些训练样本的类标记
算法参数扰动
- 基本思路
调整基学习器中需要人为设置的参数
如神经网络的隐层神经元数、初始连接权值 - 负相关法
显式的通过正则化项来强制个体神经网络使用不同的参数
混合扰动
- 不同的多样性增强机制同时使用
- 如随机森林同时使用了数据样本扰动和输入属性扰动
Scikit-learn中的ensemble
见官方文档