1. 集成算法 (Ensemble methods)

集成类算法是一个较大的概念,其主要原理在于组合一系列较弱的分类算法形成一个新的算法。根据PAC理论框架,新算法的效果一定会得到提升。比如对一个分类问题,我们首先采用不同的简单算法进行分类,比如之前介绍的逻辑回归和决策树等算法。然后所有简单的算法的分类结果再进行投票,从而决定最终的分类结果。

集成算法常用的策略有两类:Bagging和Boosting。

Bagging的运用过程描述如下:

  • 假设原始数据有n个数据点,我们首先从原始训练数据抽取多个训练集,每个训练集的样本大小同样为n。每一次从原始数据集中使用Bootstrapping(即有放回的抽样)得到n个数据点。一共进行k轮抽取,从而得到k个不完全相同的测试样本集。需要注意的是正是因为使用了有放回的抽样,每一个bootstrap 训练集里面有可能有数据点相同,但同时每一个bootstrap 训练集里,平均而言,会有36.8%的原始数据缺失。正是这个特点保证了每一个得到bootstrap训练集,虽然样本大小和原始数据相同,但他们和原始样本平均而言有36.8%的不同,并且彼此之间也不会完全相同。36.8%的得出是基于一个简单的概率计算。对于原始数据中的任意一个数据点,每一次不被抽中的概率为1-1/n

连续n次抽取,同一个数据点都被抽中的概率则为:

当n足够大,这个概率趋向于0.368。

  • 选定一个基本的算法,针对每一个bootstrap训练集得到一个模型结果。k个训练集会得出k个模型结果。如果是分类模型,模型结果为预测的类别;如果是回归模型,模型结果为预测的连续数值。

  • 对k个模型结果采用投票的方式,得票最多的结果为最终的结果。对于回归模型则计算所有模型的平均结果作为最终结果。

与Bagging方法的并行化思想不同,Boosting是序列化的方法。每一个新的模型试图去纠正之前模型的预测误差。Boosting方法的运用过程如下:

  • 选定一个训练数据集,所有相关模型都使用相同的数据集;数据集中每一个数据点给与相同的权重;选定一个基础模型算法。

  • 用基础模型第一次预测训练数据。

  • 根据第一次的预测误差,数据集中的每一个数据点被给予不同的权重。数据点误差越大权重越高。

  • 以此类推,模型不断训练调整过权重的数据集,每一次的新模型都对之前模型误判的数据给予更多的重视。

  • 最终的模型结果是所有模型的加权结果,因此效果更加理想。

Bagging方法里面具有代表意义的是随机森林算法,而Boosting方法里面具有代表意义的是梯度增强机(Gradient Boosting Machine)。下面两节我们主要介绍这两种算法。

2. 随机森林

随机森林是一种Bagging算法,其中应用的基础模型是决策树。单独使用决策树算法容易造成过拟合,因而随机森林可以有效的解决这个问题,从而极大的提高模型效果。结合上节的Bagging过程,随机森林模型中的每一棵树的建立有下面几步组成:

  • 从训练数据中bootstrap一份随机样本,随机样本大小和训练数据大小一致。

  • 如果数据有M个输入变量,在建立决策树的每一个节点,随机挑选m个变量(m<

随机森林模型效果的提升主要依赖于下面两点:

  • 随机森林中树与树之间的相关性。相关性越小,总的效果越好。Bootstrapping方法和m个变量的选取都是在减小相关性。

  • 随机森林中每一个树各自的预测能力。单个决策树的预测能力越好,模型总的效果越好。

当然上面两点是互相依赖的,比如减小m的大小有助于降低树之间相关性,但是会降低单棵树的预测能力。增加单棵树的深度会增加预测能力,但又会增加树与树之间相关性。因此实践中如何选取最佳的超参数,需要用交叉验证等技术来确定。另一方面,随机森林不容易过拟合,因此在确定树的具体数量时候可以尽可能的大。

随机森林算法的交叉验证其实可以用自身的out-of-bag(oob) 误差估计来代替。因为在每一棵树的训练过程中,有大概36.8%的数据不会被挑选到,因此对于任何一个数据点而言,在大概36.8%的决策树中不会用于训练。或者说,对于任意一个数据点我们可以没有偏差的获得该数据在36.8%的数据中的预测结果。最终,这些无偏差的预测结果可以同样根据每一棵树的结果,采用投票方式来获得最终的预测结果。

3. 梯度增强机

Boosting方法最早的实现其实是Adaptive Boosting 或者AdaBoost,梯度增强机是AdaBoost在统计框架下的一个延申。AdBoost和梯度增强机使用的基础模型都是决策树。并且梯度增强机中的决策树只需要是回归树,即对连续数值的预测。这和问题是否是分类问题还是回归问题没有关系,这是由梯度增强机的性质决定的。

通常我们讨论的梯度下降通常是指在参数空间寻找最佳参数从而使得模型的损失函数降低。在梯度增强机的运用中,梯度下降则是在损失方程空间中寻找最佳方向,比如对于回归问题,优化过程会使得当前所有迭代模型的预测结果和目标变量的残差尽量变得最小。

在梯度增强机实现过程中,假设经过m次迭代以后的预测函数为Fm(x), 而相应的损失函数为L(y,Fm(x))。为了达到使损失函数减小最快的目的,那么应该沿着损失函数的梯度下降的方向构造第m+1次迭代子模型函数。此时的梯度下降方向为:

如果损失函数采用 ,即平方差的形式

那么

我们用决策树构建第 m+1次迭代,-gm(x)作为待预测的目标变量(在L2损失函数的情况下,新的目标变量即为最近一次预测函数和原始目标变量的残差)。获得新的决策树模型以后的所有数据的预测值假设为h(x)。那么经过第m+1迭代后,总的预测函数应为:

这里βm+1为每一次迭代的步长,可以通过最小二乘法找到每一次迭代的最佳步长,即下式的最优解:

为了防止过拟合,可以让步长乘以一个学习速率λ,取值在0到1之间,从而起到降低收敛速率,防止过拟合的现象:

上节中的随机森林算法Bagging过程是一个降低方差的过程,但是梯度增强机算法则是对减小模型的方差和偏差均有帮助,因此效果通常更加明显。但是另一方面,和随机森林不会过拟合的特性相比,梯度增强则容易造成过拟合。因此实践中一定要通过交叉验证等手段加以检查和预防。

随机森林算法原理_集成算法,随机森林和梯度增强机相关推荐

  1. java排序算法原理_排序算法原理与实现(java)

    排序算法原理与实现(java) Java程序员必知的8大排序 [来源:本站 | 日期:2012年12月24日 | 浏览173 次] 字体:[大 中 小] 8种排序之间的关系: 1, 直接插入排序 (1 ...

  2. bagging算法_集成算法——三个“臭皮匠”级算法优于一个“诸葛亮”级算法

    最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们.集成算法核心思想集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就是通 ...

  3. RF(随机森林)算法原理及其派生算法

    1.前言 集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Ba ...

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

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

  5. 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)

    作者:SovietPower✨ 链接:https://ac.nowcoder.com/discuss/186584 来源:牛客网 度数序列 对于无向图, 为每个点的度数.有 (每条边被计算两次).有偶 ...

  6. python迭代算法含义_迭代算法原理及其Python编程实现

    黄旭 摘 要:迭代算法是数学算法在计算机中应用的一个热点,也是计算机解决问题的一般思路,本文结合数学中二分法求根的原理,阐述了数学迭代算法的一般原理,并采用了Python加以实现,为进一步对数学算法理 ...

  7. 深度学习算法原理_用于对象检测的深度学习算法的基本原理

    深度学习算法原理 You just got a new drone and you want it to be super smart! Maybe it should detect whether ...

  8. 线性回归算法数学原理_线性回归算法-非数学家的高级数学

    线性回归算法数学原理 内部AI (Inside AI) Linear regression is one of the most popular algorithms used in differen ...

  9. otsu阈值分割算法原理_大津二值化算法OTSU的理解

    otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...

  10. dijkstra算法原理_这 10 大基础算法,程序员必知必会!

    来源:博客园原文地址:http://kb.cnblogs.com/page/210687/算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次 ...

最新文章

  1. LeetCode Unique Binary Search Trees II(递归或者dp)
  2. 1.5 为什么正则化有利于预防过拟合-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  3. oracle索引图文解析,oracle索引介绍(图文详解)
  4. mysql中用HEX和UNHEX函数处理二进制数据的导入导出
  5. Android自己定义DataTimePicker(日期选择器)
  6. 【java】java 关键字: final详解
  7. mysql数据库运维_开源数据库MySQL DBA运维实战3
  8. Linux文件描述符和输入输出重定向
  9. php把日期转成时间戳,php如何把日期转为时间戳
  10. Maven的依赖(Dependency)
  11. RawData是Bayer转RGB格式代码分析和NEON单元加速方法
  12. 联想微型计算机q190怎么拆,联想q190迷你小主机上网怎?
  13. 计算机英语词汇电子书,计算机英语词汇-打印版.pdf
  14. 【转】地址线和数据线的计算
  15. 相机光学(五)——对运动物体的曝光时间的计算
  16. 卷积神经网络demo
  17. IM多人聊天-群聊头像合成方法
  18. java文件输出流,写到.txt文件,如何实现换行
  19. [Python|Clothoid]Clothoid曲线(回旋曲线)与直角坐标求解的python实现
  20. XAG聚合细节举例说明

热门文章

  1. 论文笔记_S2D.32-2019-TIP_HMS-Net:用于稀疏深度补全的分层多尺度稀疏不变网络
  2. 斯坦福大学深度学习公开课cs231n学习笔记(3)最优化方法:梯度下降
  3. python数据分析之(3)pandas
  4. 柱状图之最大矩形面积
  5. linux 设置时间
  6. django初体验 学习笔记
  7. 关于UIColor这个类的一些不知道的事
  8. Nginx中的upstream轮询机制介绍
  9. 学习document.location.href和document.location.replace 区别
  10. libvirt 创建的文件