gbdt 和random forest 效果非常好的思考!
链接:https://www.zhihu.com/question/51818176/answer/127637712
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
通常,解释一个机器学习模型的表现是一件很复杂事情,而这篇文章尽可能用最直观的方式来解释这一问题。
我主要从三个方面来回答楼主这个问题。
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 效果非常好的思考!相关推荐
- 为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?
北京 | 高性能计算之GPU CUDA课程 11月24-26日 3天密集学习 快速带你晋级阅读全文> 这是一个非常好,也非常值得思考的问题.换一个方式来问这个问题:为什么基于 tree-ense ...
- 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...
- 最常用的决策树算法(二)Random Forest、Adaboost、GBDT 算法
决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...
- 常用决策树集成模型Random Forest、Adaboost、GBDT详解
常用的集成学习策略 在之前的文章我有介绍过常用的基本决策树模型ID3.C4.5.CART算法,其中提到了一个关于基本决策树模型的缺点,那就是决策树模型学习一棵最优的决策树被认为是NP-Complete ...
- 决策树算法大家庭:Random Forest、Adaboost、GBDT 算法总结
本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习器的预测结果来改善单个基学习器的识别率和泛化性. 集成学习 常见的集成学习框架有三种:Bagging,Boosti ...
- 树模型系列之集成树(Random Forest、Adaboost、GBDT)
文章目录 树模型系列之集成树(Random Forest.Adaboost.GBDT) Random Forest 基本思想 优缺点 Adaboost 基本思想 细节 损失函数 正则化 优缺点 GBD ...
- 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?
随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...
- 基于集成学习方法Random Forest、Adaboost、GBDT、LightGBM、XGBoost的调参、建模、评估实现kaggle竞赛员工离职案例分析(2)
基于集成学习方法Random Forest.Adaboost.GBDT.LightGBM.XGBoost的调参.建模.评估实现kaggle竞赛员工离职案例分析(2) 引言 3. adaboost模型分 ...
- 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 ...
- [Machine Learning] Random Forest 随机森林
阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 袋外错误率(oob error) 6 随机森林工作原理解释的一个简单例子 7 随机森林的Pyth ...
最新文章
- ubuntu18.04.4 安装 qq x64 版本
- 这应该是最通俗易懂的一篇Spring知识点总结了
- cocosStudio制作ScrollView并在cocos2dx 3.0中使用。
- User Mode Driver Management 介绍(二)
- 10.热空气扭曲效果
- 修改结构体中成员的值
- kaili camera
- Flutter根据偏移量转换角度 Offset 的使用实例
- Java 是如何优雅地实现接口数据校验的?
- Socket API: setsockopt(), recvmsg(), sendmsg()函数
- catia 二次开发:查找点和面,代码label,listbox,textbox,右上角关闭失效,vb的第一个小程序
- 数学建模与数据分析中的主成分分析
- 【Excel2019(十七):数学函数】【Round函数+Roundup函数+Rounddown函数+Int函数+Mod函数】
- 使用EXCEL计算并绘制MACD指标
- 【测试开发】Python—zipfile库文件压缩封装
- 51单片机的智能灯光控制系统
- Cesium模拟雷达追踪卫星
- 前端自动化打包部署服务器
- 狂神redis笔记_狂神说redis笔记(三)
- R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
热门文章
- Chrome快捷键, Mac 下 Chrome 浏览器 快捷键
- 那些令人喷饭的代码注释:仅以此代码献给...it's realy ?
- Daily Scrum 10.23
- 进程调度算法--时间片轮转算法
- servlet-mapping_浅谈servletmapping的机制(二)
- python 实现 画图器_python实现画图工具
- c语言 入字符要中文状态吗,常见的HTTP状态码深入理解
- matlab fprintf_工程优化设计与Matlab实现——十进制编码遗传算法
- 【学习笔记】n皇后问题的解决方法+改进代码(回溯递归)
- jq 两个对象合并_Python 标准库实践之合并字典组成的列表