这部分主要介绍Ensemble的方法

为什么我们需要Ensemble的方法

在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。

常见的Ensemble方法

Ensemble一般有下面的bagging、boosting,stacking的方法

Bagging


这张图横坐标代表模型的阶次,也可以看做模型的复杂度。红线是模型预测与真实值之间的bias,绿线是模型预测与真实值之间的variance,蓝线是观测误差。我们可以看到随着模型逐渐复杂,训练的结果从underfitting到overfitting。我们使用bagging主要是解决数据充足下的overfiting的问题。

Bagging的原理

使用多组数据,通过训练来得到若干个预测的训练模型,我们可以通过对复杂模型取平均来降低variance。

Bagging即套袋法,使用一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间,其算法过程如下:

A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同

下面介绍一种Bagging的方法

随机森林——random forest,在随机森林中,集成中的每棵树都是由从训练集中抽取的样本(即 bootstrap 样本)构建的。另外,与使用所有特征不同,这里随机选择特征子集,从而进一步达到对树的随机化目的。

因此,随机森林产生的偏差略有增加,但是由于对相关性较小的树计算平均值,估计方差减小了,导致模型的整体效果更好。

下图是一个例子:

我们给出一张图,这张图的人物处的像素值设置为类别1,其余为类别0
我们使用一棵决策树做决策的结果如上图所示,当深度越深效果越好,能够完好的表现出结果,需要大概深度为20.

上面是我们使用Random forest: Bagging of decision tree的方法对数据进行训练。但是仅仅只是随机采样训练数据是不够的。因为相似的数据可能会导致训练出的决策树很相似,从而影响结果。我们需要在每次决策树产生分支时,随机规定了在分支中可使用的分类特征,例如在这一层只能使用横坐标进行分类,或者下一层仅对纵坐标的范围进行分类。

最后使用Out-of-bag的方法进行测试,这个也叫oob方法。例如我们使用x1和x2训练f1,x1和x3训练f3,f2和f4没用使用x1,因此我们使用随机森林f2+f4来评估x1中数据的预测结果。

Boosting的方法

上面说完了Bagging的方法,下面介绍一种Boosting的方法。其主要思想是将弱分类器组装成一个强分类器。
对于这个模型,如果你的错误率可以达到0.5以下,那么就可以使用这种Boosting的方法使得错误率降低到0(理想状态下)。

运行框架是:

1、获得第一个分类器
2、重新选择训练数据集,使得分类器失效,错误率为0.5
3、使用新的训练集训练第二个分类器,循环2和3
4、最后将所有的分类器集合在一起

如何获得不同的训练数据集

1、直接对训练集采样,得到一个新的数据集
2、给训练数据不同的权重值,相当于改变数据分布的占比,来得到新的数据集
3、也可以只改变训练模型的损失函数

Idea of Adaboost

boost的方法有很多,这里介绍一种最经典Adaboost的算法。
其训练集的重现选择是上面的第二种方法:
首先给出错误率的计算公式:

可以简单验证得到上式小于0.5,
改变权重,使得误差到0.5,也就是对于f1,其结果是随机的。之后用这组权重来训练新的模型。

改变权重的方法


如果x会分类错误,倍乘一个系数d,如果不出错,则会除以系数d
利用错误率0.5,我们可以得到下面的等式

数学推导


对于训练误差有上面的不等式成立

我们先计算Zt是训练数据的权重之和,我们不妨先推导Zt+1的结果。
假设Z的初始值是1,之后每次都是原本的值数乘上一个参数。我们有每个样本的权重递推公式ut,因此我们可以得到Zt+1的表达式,进一步化简合并成后面的形式。

再利用右侧的条件,我们可以写出上面的公式的化简结果,用红框表示的结果

最后我们可以使用Zt的递推公式得到最后的结论,训练误差是无数小于1的值的乘积,随着T增加,逐渐减少

例子


使用Adaboost+Desicion Tree的方法,最后得到的判别结果。

总结通常的Boosting方法

每次寻找一个function f 和一个参数 a 去提高已有的预测模型function g,其输出是function g的结果的符号。

我们的总模型function g的学习目标是是损失函数最小化,也就是下面这个式子

这个式子要求标签 y 和预测值 g 尽可能同号,且乘机结果尽可能大

梯度提升Gradient Boosting

我们从梯度下降的角度看和从boosting的方法来看优化问题

在上面我们得到方向要尽可能一致
这样可以视作最大化下面的式子

极大化的式子前面部分,就是每一个example的adaboost weight

之后是a的值的确定,Gradient Boosting做法是已经确定了f,之后尝试a的值,来找出最好的a。这是因为在前面迭代 f 的过程比较费时间,在这里使用最优的参数a,可以加快整体的收敛时间。使用下面的损失函数,最后找到的结果。

我们可以得到其参数 a 的选择正好的 adaboost 的结果

Stacking

这是用来将不同的model的训练结果结合在一起的方法。
Stacking方法是指训练一个模型用于组合其他各个模型。
首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。
理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。

机器学习21:Ensemble相关推荐

  1. 入门机器学习 21 天后 , 高薪 Offer 就在眼前

    今天,没有套路,只想真诚的讲个故事,分享给大家一个来自<极简机器学习入门>的学员天明同学的真实学习事例. 天明在 2013 年毕业,做过并行计算开发.嵌入式底层,目前在游戏创业公司做服务器 ...

  2. 【机器学习】Ensemble Learning 集成学习 + Python代码实战

    文章目录 一.集成学习概述 二.Bagging模型 2.1 随机森林 2.1.1 随机森林介绍 2.2.1 随机森林优势 2.2 KNN 2.3 软投票 2.4 硬投票 2.5 Bagging模型实战 ...

  3. 机器学习之Ensemble(Bagging、AdaBoost、GBDT、Stacking)

    集成学习,其实就是通过构建并结合多个学习器来完成学习任务. 前面刚学的随机森林就是一种集成学习方法,随机森林(广义上的)就是由多个分类器,比如决策树,SVM等集合而成的一种模型. 本文借助了李宏毅机器 ...

  4. 【机器学习】ensemble learning

    0. ensemble leaning集成学习 0.1核心思想 集成学习的核心思想是:"三个臭皮匠赛过诸葛亮". 我们大部分解除的分类器classifier,很多时候效果不一定是好 ...

  5. 独家 | 使用Python实现机器学习特征选择的4种方法(附代码)

    作者:Sugandha Lahoti 翻译:李洁 校对:杨光 本文约3500字,建议阅读13分钟. 本文中,我们将研究从数据集中选择特征的不同方法;同时通过使用Python中Scikit-learn  ...

  6. dataframe 选择输出_使用 Python 实现机器学习特征选择的 4 种方法

    (给数据分析与开发加星标,提升数据技能) 英文:Sugandha Lahoti,转自:数据派(ID:datapi),翻译:李洁 注:本文节选自Ankit Dixit所著的<集成机器学习>( ...

  7. 随机森林原理_机器学习(29):随机森林调参实战(信用卡欺诈预测)

    点击"机器学习研习社","置顶"公众号 重磅干货,第一时间送达 回复[大礼包]送你机器学习资料与笔记 回顾 推荐收藏>机器学习文章集合:1-20 机器学习 ...

  8. 机器学习简介及学习思维导图

    什么是机器学习 机器学习是人工智能的一个分支.人工智能的研究是从以"推理"为重点到以"知识"为重点,再到以"学习"为重点,一条自然.清晰的脉 ...

  9. 机器学习综述——机器学习理论基础与发展脉络

    机器学习综述 摘要 本文主要参考中科院自动化研究所复杂系统与智能科学实验室王珏研究员<关于机器学习的讨论>,讨论机器学习的描述,理论基础,发展历史以及研究现状. 关键字:机器学习,科学依据 ...

最新文章

  1. oracle 触发器的实例(转)
  2. python --- 基础多线程编程
  3. 计算机组成801pan,计算机组成06801.ppt
  4. java 向上抛异常_java throws 向上抛出的概念问题
  5. jsp中设置自动换行_办公技巧—Word中如何设置自动生成序号
  6. K-近邻算法(KNN)概述
  7. 前端局部自动刷新_jQuery实现AJAX定时刷新局部页面实例
  8. 吴恩达CNN卷积神经网络第2周作业ResNets
  9. 话里话外:谁才是流程的主人
  10. 亚信安全“双引擎”AI技术 亮相2017华为全联接大会
  11. ios uiview动画_iOS UIView动画
  12. 人工智能生物学深度解析,附源代码
  13. Git和Cmake下载超级慢的解决方案
  14. 试用钉钉内网映射工具
  15. 阅读小结:NIC模型
  16. 调焦、变焦的原理和清晰度的关系
  17. 常用的18大学术搜索引擎
  18. Hadoop基本命令(记一次Hadoop课后实验)
  19. 输入一个正整数,判断它是否是回文数。要求定义和调用函数:int isPalindrome(int n),如果n是回文数,该函数返回1,否则返回0。回文数是指正读和反读都相同的数。
  20. 笔记本不能用无线网策略服务器,笔记本不能上网的解决方法适用于使用无线路由器上网...

热门文章

  1. 淘宝无人直播实操经验
  2. 怎压缩html文件夹,如何利用koala压缩合并js文件?
  3. 上半年企业营销案例总结
  4. 谷歌浏览器的无痕窗口
  5. 信息产业的生产关系变革
  6. 设置flash的背景为透明
  7. 国际贸易中结算方式结汇
  8. input type=file accept=.zip上传文件响应慢的问题解决办法
  9. 用CSS画圆和三角形
  10. 不同的神经网络训练函数training function的比较