你自己不都说了吗,一个是随机bagging,一个是boosting。bagging就是大家都是学渣,每道题都由随机选出的一群学渣投票决定,这样需要的学渣比较多,而且每个学渣还都得很努力学习。boosting也是一群学渣,但每个人虽然总分菜,却是因为偏科导致的,每个学渣都贡献自己最擅长的那个题目。这样boosting需要的每个学渣都豪不费力,但是整体上更强了。xgb的学渣还通过预习,让自己偏科的科目学得更省力。所以整体上xgb看起来是非常省力的一群学渣组成,但是拿到的分数却很高。

这是一个非常好的问题,题主对各算法的学习非常细致透彻,问的问题也关系到这两个算法的本质。这个问题其实并不是一个很简单的问题,我尝试用我浅薄的机器学习知识对这个问题进行回答。

一句话的解释,来自周志华老师的机器学习教科书(机器学习-周志华):Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。

随机森林(random forest)和GBDT都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。

Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost, GBDT。

其实就机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance)。这个可由下图的式子导出(这里用到了概率论公式D(X)=E(X^2)-[E(X)]^2)。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。这个有点儿绕,不过你一定知道过拟合。

<img src="https://pic1.zhimg.com/bca1b7c915099702fd0e8a3a3e0b2cac_b.png" data-rawwidth="320" data-rawheight="108" class="content_image" width="320">如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。
<img src="https://pic4.zhimg.com/1cca0e32949ab02127e56636b0ff080f_b.png" data-rawwidth="455" data-rawheight="281" class="origin_image zh-lightbox-thumb" width="455" data-original="https://pic4.zhimg.com/1cca0e32949ab02127e56636b0ff080f_r.png">
也就是说,当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行。
对于Bagging算法来说,由于我们会并行地训练很多不同的分类器的目的就是降低这个方差(variance) ,因为采用了相互独立的基分类器多了以后,h的值自然就会靠近.所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以我们会采用深度很深甚至不剪枝的决策树。

对于Boosting来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择variance更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。

这几天我自己也在思考答案,想出了一些结果吧。

其实我想问的是,在gbdt算法调参的过程中,为什么把树的深度设定很小就能达到很高的预测或分类精度。
我的答案是,考虑这个简化的操作:试想把树的深度设为2,那么gbdt里面的基学习器都是二分类决策树,然后自己在二维坐标系上画很多点,然后不停的用boosting的方法用二分类决策树去进行分类,不同的是,我们简化权重的计算方式,初始化权重都为1,每次分错权重不变,分对则权重将为原来的一半,最终能用深度为2的树成功对很多不规则的点进行分类。
然而用深度为2的树,用类似RF的bagging方法也能成功对不规则的点分类。
所以到这里,我们实际操作了,用深度低的树通过ensemble对于不规则的点的分类这种“黑科技”。

那么为什么gbdt在树的深度很小的时候能很快达到很高的预测或分类精度呢?或者说,它比RF明显。
我的理解是,因为gbdt更多的是一种优化算法具体怎么优化的,期待牛人用公式解答

为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?相关推荐

  1. 如何使用hyperopt对xgboost进行自动调参

    本教程重点在于传授如何使用Hyperopt对xgboost进行自动调参.但是这份代码也是我一直使用的代码模板之一,所以在其他数据集上套用该模板也是十分容易的. 同时因为xgboost,lightgbm ...

  2. XGBoost实战与调参优化

    本篇主要内容包括XGBoost的入门教学.调参优化,将之前自己遇到的问题细心的整理一遍:XGBoost参数繁多,所以如果要调参,就一定要知道每个参数的作用于意义,因此本人十分建议在实战之前对XGBoo ...

  3. XGBoost 重要参数(调参使用)

    XGBoost 重要参数(调参使用) 数据比赛Kaggle,天池中最常见的就是XGBoost和LightGBM. 模型是在数据比赛中尤为重要的,但是实际上,在比赛的过程中,大部分朋友在模型上花的时间却 ...

  4. XgBoost使用及调参教程

    Kaggle比赛利器XGBboost 数据,决定了机器学习的上限,而算法,只是逼近这个上限. 简介 如果你的机器学习集成模型表现得不是那么尽如人意,那就使用XGBoost吧.XGBoost算法现在已经 ...

  5. 使用贝叶斯优化工具实践XGBoost回归模型调参

    0. 关于调参 0.1. 超参数 在机器学习的上下文中,超参数(hyper parameters)是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据.通常情况下,需要对超参数进行优化,给学 ...

  6. 调参侠的自我修养——深度学习调参秘籍

    这是一篇写给萌新的"科学炼丹"手册 前言 近期在订阅号后台和文章评论区review了一下大家的问题,发现很多小伙伴现在已经把机器学习.深度学习的理论基础打好了,但是真正要解决一个现 ...

  7. 【机器学习基础】XGBoost、LightGBM与CatBoost算法对比与调参

    机器学习 Author:louwill Machine Learning Lab 虽然现在深度学习大行其道,但以XGBoost.LightGBM和CatBoost为代表的Boosting算法仍有其广阔 ...

  8. 机器学习算法总结之XGBoost(下) 实战与调参

    写在前面 XGBoost原理已在前一篇有过说明:机器学习算法总结之XGBoost(上) 本文思路与之前一篇GBDT调参( 基于scikit-learn的梯度提升树GBDT调参学习)思路相同,先遍历xg ...

  9. Xgboost调参小结

      XGBoost全称是eXtreme Gradient Boosting,由陈天奇所设计,和传统的梯度提升算法相比,XGBoost进行了许多改进,它能够比其他使用梯度提升的集成算法更加快速.关于xg ...

  10. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

最新文章

  1. php正则替换%3cbr%3e_php利用正则替换过滤掉js(script)代码
  2. 严重推荐文献管理软件 Mendeley
  3. if else复合语句
  4. 华为热设计工程师待遇_沃得分享 | 华为校招青睐哪些江浙沪高校?
  5. Scala:访问修饰符、运算符和循环
  6. .NET 判断进程是否存在
  7. Android 四大组件学习之Activity二
  8. html页面 关键字高亮,HTML高亮关键字的完美解决方案
  9. 用VMware克隆CentOS 6.4后修改HWaddr
  10. bat自动输入密码_如何给电脑文件夹设置密码?一学就会
  11. oracle数据库连接时报12514_Oracle数据库之Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务...
  12. LeetCode刷题时遇到error: control reaches end of non-void function [-Werror=return-type]的解决方法
  13. python验证角谷_角谷猜想-随心随性无为而为-51CTO博客
  14. 多智能体强化学习-G2ANet
  15. Mature程序员演讲-二十年后的自己
  16. Windows自动恢复报错:无法加载操作系统,原因是关键系统驱动程序丢失或包含错误
  17. 2022年全球市场薄膜厚度测量系统总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. 省赛题目(4月23日)
  19. Oracle数据更新,表结构,约束
  20. 恬淡,禅意里开出的花

热门文章

  1. React Component里的状态机Pattern
  2. CABasicAnimation添加动画离开屏幕就动画停止的问题
  3. IOS 获取软件版本号的方法
  4. 【转】临界区、互斥对象
  5. Windows7+Ubuntu12.04双系统 重装Win7后的grub修复
  6. 关于Backup Exec的Agent启动失败的解决办法
  7. mongodb 3.4 安装_【云服务器Centos7.x建站】MongoDB 3.4安装、使用、错误总结
  8. a4b5笔记本大小对比_【玩码】全新升级MX350独显 小米笔记本Pro 15 2020款为创造力而生...
  9. ispalpha函数与islower
  10. react 获取url参数_十分钟上手 React+MirrorX,从此前端大神代码不再难懂