作者:马超
链接:https://www.zhihu.com/question/51818176/answer/127637712
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

这是一个非常好,也非常值得思考的问题。换一个方式来问这个问题:为什么基于 tree-ensemble 的机器学习方法,在实际的 kaggle 比赛中效果非常好?

通常,解释一个机器学习模型的表现是一件很复杂事情,而这篇文章尽可能用最直观的方式来解释这一问题。

我主要从三个方面来回答楼主这个问题。

1. 理论模型 (站在 vc-dimension 的角度)
2. 实际数据
3. 系统的实现 (主要基于 xgboost)

通常决定一个机器学习模型能不能取得好的效果,以上三个方面的因素缺一不可。

(1)站在理论模型的角度

统计机器学习里经典的 vc-dimension 理论告诉我们:一个机器学习模型想要取得好的效果,这个模型需要满足以下两个条件:

1. 模型在我们的训练数据上的表现要不错,也就是 trainning error 要足够小。
2. 模型的 vc-dimension 要低。换句话说,就是模型的自由度不能太大,以防overfit.

当然,这是我用大白话描述出来的,真正的 vc-dimension 理论需要经过复杂的数学推导,推出 vc-bound.

vc-dimension 理论其实是从另一个角度刻画了一个我们所熟知的概念,那就是 bias variance trade-off.

好,现在开始让我们想象一个机器学习任务。对于这个任务,一定会有一个 “上帝函数” 可以完美的拟合所有数据(包括训练数据,以及未知的测试数据)。很可惜,这个函数我们肯定是不知道的 (不然就不需要机器学习了)。我们只可能选择一个 “假想函数” 来 逼近 这个 “上帝函数”,我们通常把这个 “假想函数” 叫做 hypothesis.

在这些 hypothesis 里,我们可以选择 svm, 也可以选择 logistic regression. 可以选择单棵决策树,也可以选择 tree-ensemble (gbdt, random forest). 现在的问题就是,为什么 tree-ensemble 在实际中的效果很好呢?

区别就在于 “模型的可控性”。

“模型的可控性” 这个词是我自己发明的,因为我没有从其它的机器学习的教科书或者课程中找到类似的术语。先说结论,tree-ensemble 这样的模型的可控性是好的,而像 LR 这样的模型的可控性是不够好的(或者说,可控性是没有 tree-ensemble 好的)。为什么会这样?别急,听我慢慢道来。

我们之前说,当我们选择一个 hypothsis 后,就需要在训练数据上进行训练,从而逼近我们的 “上帝函数”。我们都知道,对于 LR 这样的模型。如果 underfit,我们可以通过加 feature,或者通过高次的特征转换来使得我们的模型在训练数据上取得足够高的正确率。而对于 tree-enseble 来说,我们解决这一问题的方法是通过训练更多的 “弱弱” 的 tree. 所以,这两类模型都可以把 training error 做的足够低,也就是说模型的表达能力都是足够的。但是这样就完事了吗?没有,我们还需要让我们的模型的 vc-dimension 低一些。而这里,重点来了。在 tree-ensemble 模型中,通过加 tree 的方式,对于模型的 vc-dimension 的改变是比较小的。而在 LR 中,初始的维数设定,或者说特征的高次转换对于 vc-dimension 的影响都是更大的。换句话说,tree-ensemble 总是用一些 “弱弱” 的树联合起来去逼近 “上帝函数”,一次一小步,总能拟合的比较好。而对于 LR 这样的模型,我们很难去猜到这个“上帝函数”到底长什么样子(到底是2次函数还是3次函数?上帝函数如果是介于2次和3次之间怎么办呢?)。所以,一不小心我们设定的多项式维数高了,模型就 “刹不住车了”。俗话说的好,步子大了,总会扯着蛋。这也就是我们之前说的,tree-ensemble 模型的可控性更好,也即更不容易 overfit.

(2)站在数据的角度

除了理论模型之外, 实际的数据也对我们的算法最终能取得好的效果息息相关。kaggle 比赛选择的都是真实世界中的问题。所以数据多多少少都是有噪音的。而基于树的算法通常抗噪能力更强。比如在树模型中,我们很容易对缺失值进行处理。除此之外,基于树的模型对于 categorical feature 也更加友好。

除了数据噪音之外,feature 的多样性也是 tree-ensemble 模型能够取得更好效果的原因之一。通常在一个kaggle任务中,我们可能有年龄特征,收入特征,性别特征等等从不同 channel 获得的特征。而特征的多样性也正是为什么工业界很少去使用 svm 的一个重要原因之一,因为 svm 本质上是属于一个几何模型,这个模型需要去定义 instance 之间的 kernel 或者 similarity (对于linear svm 来说,这个similarity 就是内积)。这其实和我们在之前说过的问题是相似的,我们无法预先设定一个很好的similarity。这样的数学模型使得 svm 更适合去处理 “同性质”的特征,例如图像特征提取中的 lbp 。而从不同 channel 中来的 feature 则更适合 tree-based model, 这些模型对数据的 distributation 通常并不敏感。

(3)站在系统实现的角度

除了有合适的模型和数据,一个良好的机器学习系统实现往往也是算法最终能否取得好的效果的关键。一个好的机器学习系统实现应该具备以下特征:

1. 正确高效的实现某种模型。我真的见过有些机器学习的库实现某种算法是错误的。而高效的实现意味着可以快速验证不同的模型和参数。
2. 系统具有灵活、深度的定制功能。
3. 系统简单易用。
4. 系统具有可扩展性, 可以从容处理更大的数据。

到目前为止,xgboost 是我发现的唯一一个能够很好的满足上述所有要求的 machine learning package. 在此感谢青年才俊 陈天奇。

在效率方面,xgboost 高效的 c++ 实现能够通常能够比其它机器学习库更快的完成训练任务。
在灵活性方面,xgboost 可以深度定制每一个子分类器,并且可以灵活的选择 loss function(logistic,linear,softmax 等等)。除此之外,xgboost还提供了一系列在机器学习比赛中十分有用的功能,例如 early-stop, cv 等等
在易用性方面,xgboost 提供了各种语言的封装,使得不同语言的用户都可以使用这个优秀的系统。
最后,在可扩展性方面,xgboost 提供了分布式训练(底层采用 rabit 接口),并且其分布式版本可以跑在各种平台之上,例如 mpi, yarn, spark 等等。

有了这么多优秀的特性,自然这个系统会吸引更多的人去使用它来参加 kaggle 比赛。

综上所述,理论模型,实际的数据,良好的系统实现,都是使得 tree-ensemble 在实际的 kaggle 比赛中“屡战屡胜”的原因。

gbdt 和random forest 效果非常好的思考!相关推荐

  1. 为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?

    北京 | 高性能计算之GPU CUDA课程 11月24-26日 3天密集学习 快速带你晋级阅读全文> 这是一个非常好,也非常值得思考的问题.换一个方式来问这个问题:为什么基于 tree-ense ...

  2. 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...

  3. 最常用的决策树算法(二)Random Forest、Adaboost、GBDT 算法

    决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...

  4. 常用决策树集成模型Random Forest、Adaboost、GBDT详解

    常用的集成学习策略 在之前的文章我有介绍过常用的基本决策树模型ID3.C4.5.CART算法,其中提到了一个关于基本决策树模型的缺点,那就是决策树模型学习一棵最优的决策树被认为是NP-Complete ...

  5. 决策树算法大家庭:Random Forest、Adaboost、GBDT 算法总结

    本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习器的预测结果来改善单个基学习器的识别率和泛化性. 集成学习 常见的集成学习框架有三种:Bagging,Boosti ...

  6. 树模型系列之集成树(Random Forest、Adaboost、GBDT)

    文章目录 树模型系列之集成树(Random Forest.Adaboost.GBDT) Random Forest 基本思想 优缺点 Adaboost 基本思想 细节 损失函数 正则化 优缺点 GBD ...

  7. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

  8. 基于集成学习方法Random Forest、Adaboost、GBDT、LightGBM、XGBoost的调参、建模、评估实现kaggle竞赛员工离职案例分析(2)

    基于集成学习方法Random Forest.Adaboost.GBDT.LightGBM.XGBoost的调参.建模.评估实现kaggle竞赛员工离职案例分析(2) 引言 3. adaboost模型分 ...

  9. Decision stump、Bootstraping、bagging、boosting、Random Forest、Gradient Boosting

    1)首先来看看 Decision stump https://en.wikipedia.org/wiki/Decision_stump A decision stump is a machine le ...

  10. [Machine Learning] Random Forest 随机森林

    阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 袋外错误率(oob error) 6 随机森林工作原理解释的一个简单例子 7 随机森林的Pyth ...

最新文章

  1. Huggingface及BERT代码介绍
  2. QT实现3D多个视口渲染场景。
  3. 从Windows计算机上完全删除iTunes和其他Apple软件
  4. 处理大并发之一 对epoll的理解,epoll客户端服务端代码
  5. c语言around用法,KET基础语法:介词among和around的用法及例句
  6. Logtail从入门到精通(三):机器分组配置
  7. IOS开发基础知识--碎片5
  8. IOS-简单WebView的使用
  9. 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
  10. vmlinux_32.lds.S
  11. python学习(八)----外星人入侵(项目篇)
  12. Echart饼图简单使用
  13. java common-lang_commons-lang.jar下载
  14. ubuntu20.04 3060 显卡 安装NVIDIA显卡驱动
  15. 双网卡上网冲突解决_产品介绍 | H3C 终端准入控制解决方案
  16. python手机桌面开发_将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#...
  17. am大学计算机科学,美国大学本科计算机科学专业排名一览
  18. 计算机系统盘制作,一步步教你怎样制作U盘电脑系统,以后电脑装系统不求人...
  19. 备战蓝桥杯—2014(4)史丰收速算
  20. 【总结整理】关于挪车和虚拟号的思考-转载v2ex

热门文章

  1. ORACLE RMAN备份--差异增量与累积增量的策略实例图
  2. 周鸿祎和马化腾对话,泄露曝光
  3. Spring的bean管理(xml方式)之Bean实例化的方式
  4. OpenCV-图像处理(19、Canny边缘检测)
  5. java 比较器_java比较器简略叙述
  6. 会场安排问题和NYOJ966
  7. c语言从栈分配地址函数,C语言 子函数return局部变量和栈地址 机制
  8. 【web前端】a只显示visited属性问题解决方法
  9. 【POJ3525】Most Distant Point from the Sea(半平面交+二分+直线平移)
  10. 【牛客练习44:C】小y的质数(求区间内k生互斥数对数---容斥原理+质因子分解)