都说XGBoost好用,为什么名气总不如深度学习?

supergxt 2017-06-04

都说XGBoost好用,为什么名气总不如深度学习?

来源|Quora

整理|AI100

AlphaGo大战柯洁、李世石后,所有人都能谈上几句深度学习。人工智能在围棋上的这场突破,最终还要归功于机器学习三巨头三十年如一日的长期研究。

相比之下,横扫Kaggle大赛的XGBoost(去年的29个获奖方案中,有17个是用XGBoost),名气可就小太多了。更何况,它的发起人还只是个名不见经传的年轻人。

有人打抱不平说,XGBoost要比深度学习更重要,这一点毫无疑问。

因为它好用,在很多情况下都更为可靠、灵活,而且准确;在绝大多数的回归和分类问题上,XGBoost的实际表现都是顶尖的。

当然,不买账的人也不少。

某Quora就撰文到,针对非常要求准确度的那些问题,XGBoost确实很有优势,同时它的计算特性也很不错。然而,相对于支持向量机、随机森林或深度学习,XGBoost的优势倒也没到那种夸张的程度。特别是当你拥有足够的训练数据,并能找到合适的深度神经网络时,深度学习的效果就明显能好上一大截。

还有用户打趣说,XGBoost的名气坏在它的名字上,深度学习一听就非常高大上,XGBoost再怎么包装也是书呆子气十足。

那么,XGBoost的发起人又是怎么说的呢?

XGBoost的发起人——陈天奇博士,他并不认可将深度学习和XGBoost截然对立起来。他谈到,这两种方法在其各自擅长领域的性能表现都非常好:

  • XGBoost专注于模型的可解释性,而基于人工神经网络的深度学习,则更关注模型的准确度。

  • XGBoost更适用于变量数较少的表格数据,而深度学习则更适用于图像或其他拥有海量变量的数据。

到底,XGBoost与深度学习孰优孰劣?

陈天奇在Quora上的解答如下:

不同的机器学习模型适用于不同类型的任务。深度神经网络通过对时空位置建模,能够很好地捕获图像、语音、文本等高维数据。而基于树模型的XGBoost则能很好地处理表格数据,同时还拥有一些深度神经网络所没有的特性(如:模型的可解释性、输入数据的不变性、更易于调参等)。

这两类模型都很重要,并广泛用于数据科学竞赛和工业界。举例来说,几乎所有采用机器学习技术的公司都在使用tree boosting,同时XGBoost已经给业界带来了很大的影响。

作为一名机器学习研究者,我一直在用深度学习和XGBoost。我相信,我们需要全面理解每一种模型,并能选出最适合你当前任务的那个。XGBoost、深度神经网络与其他经常要用的机器学习算法(如因子分解机、logistic回归分析等),值得机器学习行业的每一位从业者关注。这里没有一药能解百病的说法。

既然提到XGBoost在业界已经有广泛的应用,那么到底又有哪些呢?

XGBoost实际用例不完全列表

dmlc/xgboost(https://github.com/dmlc/xgboost/tree/master/demo#usecases)

  • 使用XGBoost的Kaggle获奖方案可在这里找到

    https://www.kaggle.com/kernels

  • 使用XGBoost的Seldon预测服务Iris

    http://docs.seldon.io/iris-demo.html

  • XGBoost的分布式版本被用于阿里云大数据计算服务ODPS

    https://yq.aliyun.com/articles/6355

  • 使用XGBoost的Graphlab Create

  • 腾讯数据平台把分布式版本的XGBoost用于微信内的购买点击预测

  • 汽车之家把分布式版本的XGBoost用于展示广告的点击率预测

谈了XGBoost的应用范围,再来客观聊聊XGBoost的性能。说到性能,就不得不说到它的一个突出特点——运行很快。

XGBoost运行很快

至于它为什么这么快,有人说C++和并行计算是主要原因,而陈天奇则一针见血说到,性能原本就是XGBoost最初的设计目标:

比如:

  • 内存优化,大部分的内存分配在第一次加载中就完成了,之后便不再涉及动态内存分配的问题。

  • 缓存线优化,训练模式尽可能善用缓存机制。

  • 模型自身的改善,我们开发出模型的各种变体,从而令算法本身更具强健性、更加准确。详见:Introduction to Boosted Trees(http://xgboost.readthedocs.org/en/latest/model.html) 。

另外,性能不仅仅意味着速度上的提升,在资源有限情况下你仍能对大型数据集使用该算法:

  • 我们不断探索该工具的极限,以最大限度地利用计算资源,让你在一个节点上就能运行多个实例。

  • 使用扩展内存的版本,允许数据存在硬盘上,不必把所有数据导入内存。

  • 分布式版本对XGBoost的每一个节点都进行过优化,让你可以有效地在更少节点上处理更大的数据集。

稀稀拉拉扯了这么多,您对XGBoost是什么观点呢?相比深度学习,XGBoost有什么优势和缺陷呢?欢迎在留言区写下你的宝贵观点哦。

原文链接:

https://www.quora.com/Why-is-xgboost-given-so-much-less-attention-than-deep-learning-despite-its-ubiquity-in-winning-Kaggle-solutions

https://github.com/dmlc/xgboost/tree/master/demo#usecases

https://www.quora.com/What-makes-xgboost-run-much-faster-than-many-other-implementations-of-gradient-boosting

相关推荐