以下内容整理于:
- 斯图尔特.罗素, 人工智能.现代方法 第四版(张博雅等译)
- 机器学习_温州大学_中国大学MOOC(慕课)
- XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客
集成学习(ensemble): 选择一个由一系列假设h1, h2, ..., hn构成的集合,通过投票、平均或其他形式的机器学习方法将他们的预测进行组合。我们称单独的假设为基模型(base model),其组合后的模型称为集成模型(ensemble model)。
集成学习主要有三种集成方法,Bagging(自主聚合法),boosting(提升法) 和stacking(堆叠法)。
在统计学中,有放回的重复采样方法被称为Bootstrap (自助法),Bagging是bootstrap aggregating的缩写。
目录
[1. Bagging(自主聚合法)](#1. Bagging(自主聚合法))
[随机森林模型(Random forest):](#随机森林模型(Random forest):)
[2. Boosting(提升法)](#2. Boosting(提升法))
[AdaBoost(adaptive boosting,自适应提升法):](#AdaBoost(adaptive boosting,自适应提升法):)
[XGBoost(eXtreme Gradient Boosting,极端梯度提升)算法:](#XGBoost(eXtreme Gradient Boosting,极端梯度提升)算法:)
[GBDT(Gradient Boosting Decision Tree)算法:](#GBDT(Gradient Boosting Decision Tree)算法:)
[3. Stacking(堆叠法):](#3. Stacking(堆叠法):)
1. Bagging(自主聚合法)
从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果:
Bagging可应用于任何类型的模型,但最常应用于决策树模型。
Bagging的优点:可以并行计算,非常高效。
随机森林模型(Random forest):
随机森林模型是Bagging在决策树模型上应用的一种形式。
主要思想: 在分割点的属性选择上进行随机化,具体操作就是,假如我们总共有n个属性,在构建决策树为每个节点选择split属性时,在全部n个属性中随机挑选n1/2(即根号n)个属性作为属性子集(对于分类问题),或选择n/3个属性作为属性子集(对于回归问题),让算法只在这个子集中选择split属性。如此操作,使得随机森林模型实现了众多决策树基模型之间的低关联性或没有关联,而基础的Bagging做不到这一点。
2. Boosting(提升法)
序贯算法,按次序一一训练(实现上可以做到并行),生成一系列基模型。在序贯训练过程中,基模型使用的训练集每次都按照某种策略进行一定的调整。
AdaBoost(adaptive boosting,自适应提升法):
核心思想: 给每个样例赋予一个权重Wj,该权重代表样例在训练过程中应计数的次数,样例的权重越大代表样例在模型训练的过程中发挥的作用越大。自适应提升法从训练集所有样例具有相等的权重wj开始,根据该训练集,我们训练第1个基模型h1,h1会对一些训练样例进行正确分类,而对另一些训练样例错误分类。我们希望第二个基模型能在被分类错误的样例中表现得更好,因此我们将增加在第一个基模型中被错误分类的样例的权重,同时减小在第一个基模型中被正确分类的样例的权重,然后开始训练第2个基模型..................按照次序,训练一系列的基模型。最后将所有基模型按照不同的权重综合成一个集成模型,预测效果比较好的树占有的权重大,预测效果差的基模型占了权重小。
后一个基模型的训练永远是在前一个基模型的基础上完成的!
XGBoost(eXtreme Gradient Boosting,极端梯度提升)算法:
XGBoost算法又快又准确,颇受欢迎!
XGBoost算法是一种加法模型,往模型中不断添加新的树。XGBoost算法将模型上一次预测(由t-1棵树组合而成的模型)产生的误差作为参考建立下一棵树(第t棵树)。
加法策略:
初始化(模型中没有树时,其预测结果为0):
往模型中加入第一棵树:
往模型中加入第二棵树: ;这里的f2即为由上一次预测产生的误差作为参考建立的第2棵树,f2(xi)为第2棵树的预测结果。
............
往模型中加入第t棵树:
其中表示第棵树,表示组合了棵树的模型对样本的预测结果。
**注:**一棵树等同于基模型
GBDT(Gradient Boosting Decision Tree)算法:
是一种迭代的决策树算法,该算法由多棵决策树组成,GBDT和XGBoost算法很相似,都是累加所有树的结果作为最终结果,两者的区别在于两者对目标函数(即代价函数)的求解过程不同,GBDT算法在求解过程中用到了残差(residual)思想,XGBoost算法在求解过程中用到了n阶泰勒展开的思想。其他方面,两者基本无区别。
GBDT算法的代价函数的部分求解过程:
泰勒展开式:
XGBoost算法的代价函数的部分求解过程:
XGBoost算法代价函数详细求解过程请参考:XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客
LightGBM算法:
LightGBM算法是以XGBoost算法为基础改进的算法,相较于XGBoost算法,LightGBM算法训练速度更快,内存占用更少。XGBoost算法和LightGBM算法都是目前使用较多的算法。
LightGBM与XGBoost相比,主要有以下几个改进:
• 基于梯度的单边采样算法(Gradient-based One-Side Sampling, GOSS);
• 互斥特征捆绑算法(Exclusive Feature Bundling, EFB);
• 直方图算法(Histogram);
• 基于最大深度的 Leaf-wise 的垂直生长算法;
LightGBM = XGBoost + GOSS + EFB+ Histogram
3. Stacking(堆叠法):
在相同训练集中使用不同基模型类训练多个基模型,然后将这些基模型组合成集成模型。
将训练好的所有基模型对训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,然后使用(来自基模型预测的)新的训练集和预先留出的验证数据对集成模型进行训练。
这种方法适合于团队分工,团队内的每个人独立工作,使用共同的训练集训练完善自己负责的基模型,最后把每个人的基模型汇聚到一起,建立最终的堆叠集成模型。