上一篇总结了bagging和boosting的区别以及相应的bagging算法,这篇总结boosting对应的算法

ADAboost

Adaboost算法是boosting算法之一,会更多的关注上一次分类器误分的样本。训练时将样本初始赋一个权重,用这些样本训练一个基分类器,根据这个基分类器对样本的表现调整样本的权重,如果样本分类器正确的话,权重降低,如果样本分类错误的话,权重上升。再用调整过的权重的样本训练基分类器,反复学习知道分类器个数达到指定个数。对预测样本的输出是结合所有基分类器的权重输出。最小化目标是指数损失函数。

模型评价(准确率,时间,空间,模型复杂度,过拟合,抗噪声,是否可并行化,调参)

  1. 准确率: 模型的实际效果一般, 我自己做多分类的时候选用ADAboost作为二分类效果并没有很好.
  2. 时间: 在小数据上, 模型选用简单的树模型, 有深度限制并且不需要大量的树, 所以时间很快
  3. 空间: 需要树的数量少, 消耗的空间也就小
  4. 模型复杂度:模型稍微优点复杂,主要是样本的权重调整计算公式上.
  5. 过拟合: 周志华的Margin理论:

    泛化错误(泛化错误可理解为测试错误) < 训练错误 + 学习算法容量相关项 (1)

    泛化错误 < 训练Margin项 + 学习算法容量相关项 (2) Margin:对的信心

    泛化错误 < 训练Margin的最小值 + 学习算法容量相关项 (3) 信心最不足的那个

    泛化错误 < 训练Margin的某个值 + 学习算法容量相关项 (3) 某个信心值

    现实的经验例子也证明了这一点,AdaBoost不容易过拟合。随着Margin变大,泛化误差会收敛
  6. 抗噪声: 容易受到噪声的污染
  7. 是否可并行化: 模型不可并行化, 特征可以并行化
  8. 调参: 树的个数和缩减率,调参是比较容易的.

优点

  1. 不改变训练数据,只是改变训练样本的权重分布,可以重复使用数据
  2. 需要的树模型个数比bagging少,训练时间更短,内存需求更小
  3. 吸收bagging的优点,在sklearn中可以随机选择样本和特征

缺点

  1. 过分关注容易错误分类的样本,如果错误分类样本是噪声点,那么算法容易产生过拟合。
  2. 需要调整每棵树的参数,确保单棵树不会过拟合(这也是所有Boosting算法的通病)

GBDT

GBDT是一种迭代的决策回归树算法,也是一种典型的Boosting算法。原始的工作流程是:初始化CART回归树,针对每个样本计算残差,将这个残差作为新的真实值,用新的数据去训练下一个CART树。不断迭代直到决策树的个数达到预定义的数量停止,结合所有基分类器的输出作为最后结果的输出。(现在已经有了一个模型F,但是觉得它做的不够好,希望在他的基础上得到一个更好的模型,所以就新加一个模型h(x), 这样最后得到的总结果就是F(x)+h(x))。用缩减率改进的工作流程:认为每次走一小步比走一大步更能获得好的效果,更能防止过拟合。工作流程:仍然以残差作为学习目标,但是每次只是用step*残差逐步逼近目标,step一般是0.001-0.1.和神经网络的的学习率是一样的。本质上缩减是给每棵树设置了一个权重系数。所以能取得良好的效果。

QA

  • 为什么要使用回归决策树?

    GBDT的核心在于累加所有树的结果.

     分类树用于分类, 最后的结果是类别, 如果男女, 这样累加类别是没有意义的.

     回归树用于预测数值, 最后的结果是实数, 累加起来依然是具有实际意义的.
  • 分类树和回归树的区别是什么?

      分类树使用信息增益/信息增益率/基尼指数来划分节点, 中间会穷举所有特征的所有阈值, 最后选择一个合适的划分特征,最后根据叶子节点的投票确定预测样本的类别

      回归树使用最小化均方差划分节点, 中间会穷举所有特征的所有划分点, 最后根据叶子节点的样本均值作为预测样本的回归预测值.
  • 为什么将残差做为真实值?

      GBDT算法本质是一种加法模型,它的目标函数是MSE,导数是\(\tilde{y_i}-y_i\)。所以残差就是下一步的最优化的反方向。

      每一步的残差计算其实变相的增大了分错样本的权重,而已经分对的样本则都趋向于0。这样后面就更加专注于那些分错的样本。

模型评价(准确率,时间,空间,模型复杂度, 过拟合,抗噪声, 是否可并行化,调参)

  1. 准确率: 针对分类和回归任务都有很好的性能
  2. 时间: 小型的数据上,不需要训练大量的树, 模型也比较简单, 时间复杂度较小。但是在大数据上, 需要对数据进行无数次的遍历,不能用类似mini batch的方式来训练。如果想要速度,就需要把数据都预加载在内存中,但这样数据就会受限于内存的大小;如果想要训练更多的数据,就要使用外存版本的决策树算法。虽然外存算法也有较多优化,SSD也在普及,但在频繁的IO下,速度还是比较慢的。
  3. 空间: 需要较少
  4. 模型复杂度: 模型最后的公式很简单
  5. 过拟合: 和ADAboost的过拟合效果差不多.
  6. 抗噪声: 引入样本随机和列随机后可以抵抗噪声带来的影响
  7. 是否可并行化:主要是在生成每一颗树的时候:并行的计算最佳分裂点。每个节点负责一些特征.
  8. 调参:树的棵树,缩减率, 采样率(不放回采样), 损失函数

Adaboost vs. GBDT

本质来说唯一的差别是Adaboost算法使用log损失函数,GBDT使用平方差损失函数

LR、SVM、RF、GBDT、XGBoost和LightGbm比较的更多相关文章

  1. RF,GBDT,XGBoost,lightGBM的对比

    转载地址:https://blog.csdn.net/u014248127/article/details/79015803 RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensem ...

  2. RF/GBDT/XGBoost/LightGBM简单总结(完结)

    这四种都是非常流行的集成学习(Ensemble Learning)方式,在本文简单总结一下它们的原理和使用方法. Random Forest(随机森林): 随机森林属于Bagging,也就是有放回抽样 ...

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

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

  4. Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  5. XGBoost、LightGBM的详细对比介绍

    sklearn集成方法 集成方法的目的是结合一些基于某些算法训练得到的基学习器来改进其泛化能力和鲁棒性(相对单个的基学习器而言)主流的两种做法分别是: bagging 基本思想 独立的训练一些基学习器 ...

  6. XGBoost、LightGBM、Catboost总结

    sklearn集成方法 bagging 常见变体(按照样本采样方式的不同划分) Pasting:直接从样本集里随机抽取的到训练样本子集 Bagging:自助采样(有放回的抽样)得到训练子集 Rando ...

  7. 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主

    总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...

  8. XGBoost、LightGBM参数讲解及实战

    本文链接:https://blog.csdn.net/linxid/article/details/80785131XGBoost一.API详解xgboost.XGBClassifier1.1 参数1 ...

  9. GBDT && XGBOOST

                                  GBDT && XGBOOST Outline Introduction GBDT Model XGBOOST Model ...

  10. L2R 三:常用工具包介绍之 XGBoost与LightGBM

    L2R最常用的包就是XGBoost 和LightGBM,xgboost因为其性能及快速处理能力,在机器学习比赛中成为常用的开源工具包, 2016年微软开源了旗下的lightgbm(插句题外话:微软的人 ...

随机推荐

  1. 【原】 python中? : 三元表达式的使用介绍

    python 三元表达式 之前学习的Python提到了对于类似C语言的三元条件表达式condition ? true_part : false_part,虽然Python没有三目运算符(?:),但也有 ...

  2. 解决CentOS7用yum安装软件显示错误:cannot find a valid baseurl for repo: base/7/x86_64

    使用yun安装软件时有时会报repo文件的错误,, 主要问题出自于CentOS-Base.repo文件 解决方案:将这个文件后缀名修改使这个文件无效 [root@localhost ~]# cd /e ...

  3. Lucene学习笔记一

    Lucene课件 1.全文检索 1.1常见的全文检索 在window系统中,可以指定磁盘中的某一个位置来搜索你想要得到的东西.这个功能是windows比较常用的功能.在这个界面中能搜索的内容有*.*, ...

  4. pta 7-1 找出不是两个数组共有的元素

    给定两个整型数组,本题要求找出不是两者共有的元素. 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔. 输出格式: 在一行中按照数字给出的顺序 ...

  5. 3_05_MSSQL课程_Ado.Net_SQLDataAdapter

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Configurat ...

  6. 02-05Android学习进度报告五

    今天主要学习了关于Android 开发的关于进度条和拖动条的知识. 主要学习了一些关于进度条的基本属性: android:max:进度条的最大值 android:progress:进度条已完成进度值 ...

  7. java获取指定月份有几个星期x,获取指定月份跨了多少个星期

    例如获取2020年5月一共有多少个星期二,一共跨了多少个星期 public class MainTest { public static void main(String[] args) throws ...

  8. 学习不一样的vue实战(2): 项目分析

    学习不一样的vue实战(2): 项目分析 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) 项目预览: 预览 上一章: <学习不一样的vue(1)实战:环境搭建> 我的Q群: ...

  9. 使用 CocoaPods 遇到的问题记录

    1. 在 Terminal 输入 Cocoapods 命令时,有时会一直等待,出现“Performing a deep fetch of the `master` specs repo to impr ...

  10. freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]

    FreeMarker template error:The following has evaluated to null or missing:==> product  [in templat ...