ZhuZhuWonder 2019-04-16
什么是 XGBoost?如何直观理解 XGBoost?它为什么这么优秀?
我对十五年前第一天工作的情况还记忆犹新。彼时我刚毕业,在一家全球投资银行做分析师。我打着领带,试图记住学到的每一件事。与此同时,在内心深处,我很怀疑自己是否可以胜任这份工作。感受到我的焦虑后,老板笑着说:
「别担心,你只需要了解回归模型就可以了。」
我当初想的是「我知道这个!」。我知道回归模型——线性回归和 logistic 回归都知道。老板是对的。我在任职期间仅仅构建了基于回归的统计模型。我并不是一个人。事实上,当时的回归模型在预测分析中独占鳌头。而十五年后的今天,回归模型的时代已经结束了。迟暮的女王已经退场,取而代之的是名字时髦、活力满满的新女王——XGBoost(Exterme Gradient Boosting,极限梯度提升)。
XGBoost 是基于决策树的集成机器学习算法,它以梯度提升(Gradient Boost)为框架。在非结构数据(图像、文本等)的预测问题中,人工神经网络的表现要优于其他算法或框架。但在处理中小型结构数据或表格数据时,现在普遍认为基于决策树的算法是最好的。下图列出了近年来基于树的算法的演变过程:
从决策树到 XGBoost 算法的演变。
XGBoost 算法最初是华盛顿大学的一个研究项目。陈天奇和 Carlos Guestrin 在 SIGKDD 2016 大会上发表的论文《XGBoost: A Scalable Tree Boosting System》在整个机器学习领域引起轰动。自发表以来,该算法不仅多次赢得 Kaggle 竞赛,还应用在多个前沿工业应用中,并推动其发展。许多数据科学家合作参与了 XGBoost 开源项目,GitHub 上的这一项目(https://github.com/dmlc/xgboost/)约有 350 个贡献者,以及 3600 多条提交。和其他算法相比,XGBoost 算法的不同之处有以下几点:
决策树是易于可视化、可解释性相对较强的算法,但是要建立下一代基于树的算法的直观理解可能就有些棘手了。为了更好地理解基于树的算法的演变过程,我对其做了简单的类比:
假设你是面试官,要面试几名资历非常优秀的求职者。基于树的算法演变过程的每一步都可以类比为不同版本的面试场景。
XGBoost 和梯度提升机(Gradient Boosting Machine,GBM)都是用梯度下降架构增强弱学习器(一般是 CART)的集成树方法。但 XGBoost 通过系统优化和算法增强改进了基础 GBM 框架。
XGBoost 是如何优化标准 GBM 算法的
我们用 Scikit-learn 中的「Make_Classification」(https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html)数据包创建包含 100 万个数据点的随机样本,其中包含 20 个特征(2 个是信息性的,2 个是冗余的)。我们测试了几种算法,比如 Logistic 回归、随机森林、标准梯度提升,以及 XGBoost。
使用 SKLearn 中 Make_Classification 数据集的 XGBoost 算法和其他 ML 算法。
如上图所示,和其他算法相比,结合预测性能和处理时间两项来看,XGBoost 是最好的。其他严格的基准研究(https://github.com/szilard/benchm-ml)也得到了类似的结果。这也难怪 XGBoost 广泛应用于近期的数据科学竞赛了。
「如有疑问,用 XGBoost 就好」——Owe Zhang,Kaggle Avito 上下文广告点击大赛冠军。
无论是机器学习还是生活,没有免费的午餐都是一条铁律。作为数据科学家,我们必须要测试所有能处理手头数据的算法,才能判断哪种算法是最好的。此外,只是选择正确的算法还不够。我们必须针对要处理的数据集调整超参数,从而选择合适的配置。此外,要选择合适的算法还要考虑其他因素,比如计算复杂度、可解释性以及易于实现性。这是机器学习从科学走向艺术的开始,但说实话,这也正是见证奇迹的时刻!