详细参考:https://www.cnblogs.com/pinard/p/6131423.html

首先明确集成学习它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。

集成学习有两个主要的问题需要解决,第一是如何得到若干个个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。对于个体学习器第一种就是所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。第二种是所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。

目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。

集成策略有投票法,平均法,学习法等等。

1.bagging

bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略(一般对于分类问题集成策略选用投票法,对于回归问题集成策略选择平均法)来得到最终的强学习器(具有代表性的bagging思想的集成学习模型是随机森林(RF))。

随机采样一般采用的是自助采样法(Bootstrap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。

2.boosting

Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器(具有代表性的采用boosting思想的模型有Adaboost以及GBDT和XGBoost)。

3.stacking(模型融合)

详细解析可以参考:

https://zhuanlan.zhihu.com/p/26890738

https://www.zhihu.com/question/24598447/answer/232954415

https://zhuanlan.zhihu.com/p/33589222

如何做

假设弱学习器为(A1,A2,A3)强学习器为B,对训练数据进行五折交叉,以弱学习器A1为例(对应上图上面部分的Model1),五折交叉对应五次的Model1,每次通过上图蓝色的4份learn训练模型,通过训练出的模型预测橙色的Predict验证集部分,得到结果Predictions(维度记为[v1,1]),对五次交叉获得的Predictions进行连接组成新的数据(维度记为[v1*5,1]),同时数据集整体记为P1.同时没个fold训练出模型之后还需要对上图绿色的测试集进行预测得到的结果(维度记为[t1,1])五折则结果的维度为[t1*5,1],然后对数据取平均得到的数据维度记为[at1,1],数据整体记住T1.

对于弱学习器A2,A3同样如此,A2能够获得的数据维度记为[v2*5,1]),同时数据集整体记为P2,以及[at2,1],数据整体记住T2,A3能够获得的数据维度记为[v3*5,1]),同时数据集整体记为P3,以及[at3,1],数据整体记住T3.对P1,P2,P3组合获得数据维度[V,3]作为强学习器B的训练数据,T1,T2,T3组合获得数据维度[AT,3]作为强学习器的验证数据。

一般来说,一个好的融合的子模型应该符合以下两个假设:

1)准确性(accuracy):大部分子模型要能对最终输出有所帮助,而不是帮倒忙,应该至少比随机猜测更准确。

2)多样性(diversity):子模型间需要有所不同,长处和短处各异,(高度相关的)同质化的子模型无法互补。

于是我们想要同时提高“准确性”和“多样性”,但很快就发现它们是此消彼长、互相制约的关系。

先不考虑准确性问题,仅对多样性这方面进行考虑,可以通过如下这些方法提高多样性:

1)选用不同类型的分类器,在整个X上进行训练。此时的模型的多样性取决于子模型对于数据不同的表达能力

2) 选用同类型的分类器,但使用不同的参数此时模型的多样性取决于“不同超参数在同一模型上的差异”所决定

3) 选用相同的分类器,但在不同的训练集上进行训练此时的差异性来源于数据的差异性

4) 使用相同的分类器,但在不同特征上进行训练同理,此时的多样性来源于数据的差异性

我们因此发现,构造子模型就已经非常复杂了,融合模型有无数种组合方式,没有唯一正确的方法。融合的底线就是尽量保持“准确性”和“多样性”间的平衡因此我们特别注意,手动融合模型时一般很少构造大量的弱分类器,而是精挑细选少量的强模型进行融合。手动构造融合模型时,建议优先考虑准确性,再考虑多样性

对于模型融合而言,子模型的选择尤为重要,选择子模型时应以准确度为首要,以多样性为次要。同时需要注意的是,子模型的输出不一定在同一个取值范围内,为了更好的进行融合,应该把各个模型的取值控制在相同的范围之内。

4.Stacking的输出层为什么一般用Logistic回归的效果比较好?

stacking的有效性主要来自于特征抽取,第一层已经通过不同的模型进行了特征的抽取,把这些抽取的特征作为新的输入,即为已经使用了复杂的非线性变换,因此在输出层不需要复杂的分类器。同时这也是在stacking中第二层数据中的特征中不该包括原始特征的原因,都是为了避免过拟合现象的发生。因此,stacking的输出层不需要过分复杂的函数,用逻辑回归还有额外的好处:

1)配合正则化还可以进一步防止过拟合

2)逻辑回归的输出结果还可被理解为概率

5.Stacking和神经网络

具体参考:https://zhuanlan.zhihu.com/p/32896968(非常赞的分析,多思考)

Stacking一般来说,就是训练一个多层(一般是两层)的学习器结构,第一层(也叫学习层)用n个异质分类器或者n个同质分类器(这时要保证特征不同或者训练数据不同)将得到预测结果合并为新的特征集,并作为下一层分类器的输入。

Stacking不需要多层一般两层就好,因为层数过多会带来更严重的过拟合问题,那为什么 在stacking中堆多几层,效果提升不明显,或由于过拟合而效果下降呢?专栏的博主认为原因是,stacking中的表示,不是分布表示。而深度起作用的前提是分布表示,所以堆多层不好。第一层分类器的数量对于特征学习应该有所帮助,经验角度看越多的基分类器越好。即使有所重复和高依赖性,我们依然可以通过特征选择来处理,问题不大。

在stacking中,通过第一层的多个学习器后,有效的特征被学习出来了。从这个角度来看,stacking的第一层就是特征抽取的过程。

Stacking的缺点也非常明显,stacking往往面临很大的运算开销,在预测时需要运行多个模型。

别的非常赞的想法:

Stacking和神经网络都属于表示学习(表示学习指的是模型从原始数据中自动抽取有效特征的过程)

Stacking中的第一层可以等价于神经网络中的前 n-1层,而stacking中的最终分类层可以类比于神经网络中最后的输出层。不同点在于,stacking中不同的分类器通过异质来体现对于不同特征的表示,神经网络是从同质到异质的过程且有分布式表示的特点(distributed representation)。Stacking中应该也有分布式的特点,主要表现在多个分类器的结果并非完全不同,而有很大程度的相同之处。

stacking的第一层与神经网络的所有隐藏层都是一个高度复杂的非线性特征转换器,样本的表示经过这个变换后,得到了新的表示更好的表示,即线性可分。这样stacking的第二层与神经网络的输出层使用简单模型就足够了。

不同之处:

stacking需要宽度,深度学习不需要

深度学习需要深度,而stacking不需要

我觉得stacking和深度学习有个区别,深度学习层与层之间梯度是能传回去的,所以所有层之间会“彼此协调”,stacking每层之间并没有之间的关联,训练后面的一层不会改变前面一层的权重值。

神经网络相比于Stacking的优势,神经网络能够通过迁移学习应用到先验知识。

转载于:https://www.cnblogs.com/dyl222/p/11086565.html

机器学习之集成学习(一)相关推荐

  1. 【机器学习】集成学习与模型融合方法举例

    [机器学习]集成学习与模型融合方法举例 文章目录 1 概述1.1 什么是集成学习 2 CrossValidation 交叉验证 3 stacking 4 Voting投票器 5 Bagging 1 概 ...

  2. 【机器学习】集成学习—Boosting—GBM(Gradient Boosting Machine)解析

    [机器学习]集成学习-Boosting-GBM(Gradient Boosting Machine)解析 文章目录 [机器学习]集成学习-Boosting-GBM(Gradient Boosting ...

  3. 【机器学习】集成学习投票法:投票回归器(VotingRegressor) 投票分类器(VotingClassifier)

    前言 投票回归器和投票分类器都属于集成学习.在[机器学习]集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法.投票法和学习法.sklearn.ensemble库中的Voting Clas ...

  4. 【机器学习】集成学习知识点总结一

    集成学习算法概述 严格意义上来说,集成学习算法不算是一种机器学习算法,而更像是一种优化手段或策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策.有人把它称为机器学习中的"屠龙刀&q ...

  5. 【机器学习】集成学习(Ensemble Learning)介绍

    1. 概述 在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好).集 ...

  6. 机器学习之集成学习概述

    目录 集成方法概述 学习器生成策略(串行)--boosting 学习器生成策略(并行)-- bagging.Random Forest 结合策略之学习法--堆叠法(Stacking) 传送门 集成方法 ...

  7. 百面机器学习 之 集成学习

    问题1. 什么是Boosting和Bagging,他们各自有什么特点 Boosting的主要思想就是 将基分类器层层叠加,每一层训练的时候对前一层基分类器分错的样本给予更高的权重进行训练,每个分类器之 ...

  8. 基于机器学习中集成学习的stacking方式进行的金线莲质量鉴别研究(python进行数据处理并完成建模,对品种进行预测)

    1.前言 金线莲为兰科开唇兰属植物,别名金丝兰.金丝线.金耳环.乌人参.金钱草等,是一种名贵中药材,国内主要产地为较低纬度地区如:福建.台湾.广东.广西.浙江.江西.海南.云南.四川.贵州以及西藏南部 ...

  9. 机器学习-机器学习之集成学习(ensemble learning)

    前面我们说了很多算法模型,当然有的时候我们为了让模型能有更好的泛化效果,我们会采用模型融合的方式来进行对模型的融合.先来讲讲基础: 什么是集成学习?集成学习就是通过多个个体学习器集合起来通过某种策略来 ...

最新文章

  1. 数据、人工智能和传感器按COVID-19新冠流感排列
  2. c# 计算点到线段的距离
  3. 把指定用户的命令写在/home/etc/rc.local中,系统开机时就会自动执行指定用户的命令。
  4. CTF-密码学-攻防世界-幂数加密(云影加密)解密脚本
  5. C++之error: cannot bind non-const lvalue reference of type ‘myString’ to an rvalue of type ‘myString
  6. ospf-cost-FR选路实验
  7. Factors of Factorial AtCoder - 2286 (N的阶乘的因子个数)(数论)
  8. 花一天时间踩了node npm的一个坑
  9. BP神经网络matlab程序运行问题
  10. 远程桌面连接-GPU加速
  11. Spring StringUtils#cleanPath method 浅析
  12. linux xfs 字体服务,Linux下Python和Tkin的字体管理
  13. C 语言 运算符 全网最全整理
  14. 空间变换与计算_04_4x4矩阵
  15. 智慧旅游监管平台建设方案
  16. RFC868--时间协议客户机与服务器的实现
  17. 粒子群算法理解+求解01背包问题
  18. Index out of range using input dim 2; input has only 2 dims
  19. Java_登录界面设计
  20. 基于TF-IDF的简单搜索引擎的实现

热门文章

  1. 在WPF中,如何得到任何Object对象的XAML代码?
  2. ​Mysql数据读写分离(多实例配置)
  3. 40种Lightbox效果收集
  4. jscript错误代码及相应解释大全
  5. Nexus 私服 3rd party 库被误删怎么办
  6. 最全 | Redis可视化工具横向评测
  7. 理清 WebSocket 和 HTTP 的关系
  8. 你真的理解零拷贝吗?
  9. 我作为开发者犯过的两次愚蠢的错误
  10. 15.赋值运算符为什么返回类的引用?不是引用怎么办?