1、基本知识点介绍

  • RandomForest、XGBoost、GBDT和LightGBM都属于集成学习。

  • 集成学习通过构建并结合多个分类器来完成学习任务,也称为多分类系统,集成学习的目的是通过结合多个机器学习分类器的预测结果来改善基本学习器的泛化能力和鲁棒性。

  • 集成学习方法大致分为两类:

    • 基本学习器之间存在强依赖关系、必须串行生成的序列化方法,即Boosting提升方法。

    • 基本学习器之间不存在强依赖关系、可同时生成的并行化方法,即Bagging方法。

2、各个算法原理

2.1 随机森林 -- RandomForest

  • RF原理:RF是Bagging的扩展变体,它在以决策树为基础学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,其流程大概分为四个步骤:

    1. 随机选择样本(放回抽样)。

    2. 随机选择特征属性。

    3. 构建决策树。

    4. 随机森林投票(平均)。

因此防止过拟合能力更强,降低方差。

  • Bagging,即套袋法,算法过程如下:

    1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本,共进行k轮抽取,得到k个训练集。

    2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(模型可以根据具体问题具体选取,如决策树,SVM,感知机。)

    3. 对于分类问题:将上面得到的k个模型采用投票的方式得到分类结果;

      对于回归问题:计算上述模型的均值作为最后的结果。(因为所有模型的重要性是相同的)
  • RF和Bagging对比: RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’特征数,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。

2.2 XGBoost算法

  • XGBoost原理:XGBoost属于集成学习Boosting,是在GBDT的基础上对Boosting算法进行的改进,并加入了模型复杂度的正则项。GBDT是用模型在数据上的负梯度作为残差的近似值,从而拟合残差。XGBoost也是拟合数据残差,并用泰勒展开式对模型损失残差的近似,同时在损失函数上添加了正则化项。

\[Obj^{t} = \sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)} + f_{t}(x_{i})) + \Omega (f_{t}) + constant
\]

其中\(\sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)})\)为损失函数,红色方框为正则项,包括L1、L2;红色圆圈为常数项。

  • L1正则化项:$$L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{1}$$

  • L2正则化项:$$L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{2}$$

  • XGBoost与GBDT算法的区别:

    • 传统的GBDT在优化的时候只用到了一阶导数信息,而XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数,并且XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。

    • 另外XGBoost还支持线性分类器,通过在代价函数中加入正则项,降低了模型的方差,使学习出来的模型更加简单,避免过拟合。

  • GBDT的基本原理是Boosting里面的boosting tree(提升树),并使用gradient boost。其关键是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一颗CART回归树(classification and regression tree)。

2.3 GBDT算法(Gradient Boosting Decision Tree)

  • GBDT算法原理:指通过在残差减小的梯度方向建立boosting tree(提升树),即gradient boosting tree(梯度提升树)。每次建立新模型都是为了使之前模型的残差往梯度方向下降。

\[r_{ti} = -[\frac{\partial L(y_{i}, f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{t-1}(x)}
\]

\[c_{tj} = arg \ \min\limits_{c} \sum\limits_{x_{i} \in R_{tj}} L(y_{i}, f_{t-1}(x_{i}) + c)
\]

  • GBDT缺点:GBDT会累加所有树的结果,此过程无法通过分类完成,因为GBDT需要按照损失函数的梯度近似地拟合残差,这样拟合的是连续数据,因此只能是CART回归树,而不能是分类树。

2.4 LightGBM提升学习模型

  • lightGBM,它是微软出的新的boosting框架,基本原理与XGBoost一样,使用基于学习算法的决策树,只是在框架上做了一优化(重点在模型的训练速度的优化)。

  • 直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

  • lightGBM与XGBoost的区别:

    • xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略。

      • level-wise:指对每一层所有节点做无差别分裂,可能有些节点的增益非常小,带来了没必要的开销。
      • leaf-wise:指在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,容易出现过拟合,因此需要做最大深度限制,从而避免过拟合。
    • lightGBM使用了基于histogram(直方图)的决策树算法,而XGBoost使用了exact算法(需要提前预排序)。
      • 能减少内存消耗(#data* #features * 1Bytes),降低计算代价,因为其只需要保存特征离散化之后的值。
      • 而XGBoost使用exact算法,内存消耗为(2 * #data * #features* 4Bytes),因为XGBoost既要保存原始feature的值,也要保存这个值的顺序索引。
      • XGBoost的预排序算法在选择好分裂特征计算分裂受益时,需要遍历所有样本的特征值,时间复杂度为(#data),与数据量成正比。而lightGBM的直方图只需要遍历分区的直方桶即可,时间复杂度为(#bin)。
    • lightGBM的直方图还能做减差加速作用。
      • 一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图即可得到,从而实现加速。
    • lightGBM支持直接输入类别categorical的特征feature。
      • 在对离散特征分裂时,每个取值都当作一个桶,分裂时的增益为“是否属于某个类别category”的gain。类似与one-hot编码。
    • lightGBM实现可多线程优化。(即能够在同一时间执行多个线程,提升整体性能)
    • lightGBM做了并行处理。
      • feature parallel(特征并行处理):一般的feature parallel就是对数据做垂直分割(partiion data vertically,就是对属性分割),然后将分割后的数据分散到各个worker上,各个workers计算其拥有的数据的best splits point, 之后再汇总得到全局最优分割点。lightgbm的做法是每个worker都拥有所有数据,再分割。——我也没懂
      • data parallel(数据并行处理):传统的data parallel是将对数据集进行划分,也叫 平行分割(partion data horizontally), 分散到各个workers上之后,workers对得到的数据做直方图,汇总各个workers的直方图得到全局的直方图。 lightgbm的做法是使用”Reduce Scatter“机制,不汇总所有直方图,只汇总不同worker的不同feature的直方图(原理?),在这个汇总的直方图上做split,最后同步。

参考

1、牛人:https://blog.csdn.net/zwqjoy/article/details/82150528

2、周志华《机器学习》

3、刘建平GBDT:https://www.cnblogs.com/pinard/p/6140514.html

4、大牛XGBoost:https://www.cnblogs.com/zhouxiaohui888/p/6008368.html

随机森林RF、XGBoost、GBDT和LightGBM的原理和区别的更多相关文章

  1. 用随机森林分类器和GBDT进行特征筛选

    一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...

  2. Bagging与随机森林(RF)算法原理总结

    Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...

  3. 【机器学习】随机森林RF

    随机森林(RF, RandomForest)包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定.通过自助法(boot-strap)重采样技术,不断生成训练样本和测试样本,由训练样本 ...

  4. 随机森林RF

    bagging 随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的.在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决 ...

  5. RF、GBDT、XGBOOST常见面试算法整理

    1.  RF(随机森林)与GBDT之间的区别 相同点: 1)都是由多棵树组成的 2)最终的结果都是由多棵树一起决定 不同点: 1)  组成随机森林的树可以是分类树也可以是回归树,而GBDT只由回归树组 ...

  6. 04-10 Bagging和随机森林

    目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...

  7. 机器学习总结(二)bagging与随机森林

    一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...

  8. SIGAI机器学习第十九集 随机森林

    讲授集成学习的概念,Bootstrap抽样,Bagging算法,随机森林的原理,训练算法,包外误差,计算变量的重要性,实际应用 大纲: 集成学习简介 Boostrap抽样 Bagging算法 随机森林 ...

  9. rf, xgboost和GBDT对比;xgboost和lightGbm

    1. RF 随机森林基于Bagging的策略是Bagging的扩展变体,概括RF包括四个部分:1.随机选择样本(放回抽样):2.随机选择特征(相比普通通bagging多了特征采样):3.构建决策树:4 ...

随机推荐

  1. 基础SQL注入

    预备知识对mysql数据库有一定了解:对基本的sql语句有所了解:对url编码有了解:空格=‘%20’,单引号=‘%27’,双引号=‘%22’,井号=‘%23’等 基本步骤1. 判断是什么类型注入,有 ...

  2. 解决web资源跨域请求问题

    参考地址: http://my.oschina.net/lichaoqiang/blog/317823 在浏览器请求中,出现跨域访问资源的问题,我们肯定会遇到.如果跨域请求被阻止,有可能导致css.j ...

  3. Redis入门到高可用(十九)——Redis Sentinel

    一.Redis  Sentinel架构     二.redis sentinel安装与配置 四.客户端连接Sentinel            四.实现原理—— 故障转移演练(客户端高可用) 五.实 ...

  4. openshift 容器云从入门到崩溃之五《部署应用》

    1.配置部署模板 配置好用户权限之后就可以部署应用了oc常用的两种部署方式: Deploy Image方式 优点:这种方式是最简单的部署方式,你只需要有一个容器镜像就行了或者公开的docker hub ...

  5. 在vue2.x项目中怎么引入Element UI

    参考:https://blog.csdn.net/u014054437/article/details/79862793 Element使用方法:https://element.eleme.cn/#/ ...

  6. python 爬虫-2

    小白新手完全不懂的什么,还有一个robots.txt限制文件,稀里糊涂的    还是百度   可以看一下:http://www.baidu.com/robots.txt 里面会有一些限制,常见的一些配 ...

  7. 把vim插入状态的光标改为竖线

    和终端有关系,如果是Konsole的终端,把下面两行加到.vimrc文件里就可以 let &t_SI = "\<Esc>]50;CursorShape=1\x7" ...

  8. fcrackzip (zip密码破解工具)

    现在做一个例子,首先生成一个带有密码的zip的包 zip -P hujhh test.zip test1.txt test2,txt 可以看到密码是5位的纯字母 现在就用我们的这个软件开始破解 fcr ...

  9. 聊聊return false

    最近在做一些关于视频切换的时候.由于是用a标签做的会有默认的跳转.这时候我就想到了,return flase.阻止默认行为,也达到了预期的效果.后来就详细查了查.让我们来看看 “return fals ...

  10. 记录在tiny6410平台上采用4GSD卡来启动uboot和烧写nand flash uboot

    下面这种方法是从网上转的 没有验证 环境:ubuntu 13.04一.首先制作sd启动盘: 插入SD卡    sudo dd iflag=dsync oflag=dsync if=tiny210v2- ...