专栏首页AI科技大本营的专栏大战三回合:XGBoost、LightGBM和Catboost一决高低 | 程序员硬核算法评测

大战三回合:XGBoost、LightGBM和Catboost一决高低 | 程序员硬核算法评测

作者 | LAVANYA

译者 | 陆离

责编 | Jane

出品 | AI科技大本营(ID: rgznai100)

【导读】XGBoost、LightGBM 和 Catboost 是三个基于 GBDT(Gradient Boosting Decision Tree)代表性的算法实现,今天,我们将在三轮 Battle 中,根据训练和预测的时间、预测得分和可解释性等评测指标,让三个算法一决高下!

一言不合就 Battle

GBDT 是机器学习中的一个非常流行并且有效的算法模型,2014 年陈天奇博士提出的 XGBoost 算法就是 GBDT 一个重要实现。但在大训练样本和高维度特征的数据环境下,GBDT 算法的性能以及准确性却面临了极大的挑战,随后,2017 年 LightGBM 应势而生,由微软开源的一个机器学习框架;同年,俄罗斯的搜索巨头 Yandex 开源 Catboost 框架。

  • XGBoost(eXtreme Gradient Boosting) 特点是计算速度快,模型表现好,可以用于分类和回归问题中,号称“比赛夺冠的必备杀器”。
  • LightGBM(Light Gradient Boosting Machine)的训练速度和效率更快、使用的内存更低、准确率更高、并且支持并行化学习与处理大规模数据。
  • Catboost( Categorical Features+Gradient Boosting)采用的策略在降低过拟合的同时保证所有数据集都可用于学习。性能卓越、鲁棒性与通用性更好、易于使用而且更实用。据其介绍 Catboost 的性能可以匹敌任何先进的机器学习算法。

三个都是基于 GBDT 最具代表性的算法,都说自己的性能表现、效率及准确率很优秀,究竟它们谁更胜一筹呢?为了 PK 这三种算法之间的高低,我们给它们安排了一场“最浪漫的 Battle”,通过三轮 Battle 让 XGBoost、Catboost 和 LightGBM 一绝高下!

  • Round 1:分类模型,按照数据集Fashion MNIST把图像分类(60000行数据,784个特征);
  • Round 2:回归模型,预测纽约出租车的票价(60000行数据,7个特征);
  • Round 3:通过海量数据集,预测纽约出租车票价(200万行数据,7个特征);

Battle 规则

在每一轮 PK 中,我们都遵循以下步骤:

1、训练 XGBoost、Catboost、LightGBM 三种算法的基准模型,每个模型使用相同的参数进行训练;

2、使用超参数自动搜索模块 GridSearchCV 来训练 XGBoost、Catboost 和 LightGBM 三种算法的微调整模型;

3、衡量指标:

a.训练和预测的时间;

b.预测得分;

c.可解释性(包括:特征重要性,SHAP 值,可视化树);

PK 结果揭晓

(一)运行时间& 准确度得分

Top 1:LightGBM

Top 2:CatBoost

Top 3:XGBoost

在训练和预测时间两方面,LightGBM 都是明显的获胜者,CatBoost 则紧随其后,而 XGBoost 的训练时间相对更久,但预测时间与其它两个算法的差距没有训练时间那么大。

在增强树(boosted trees)中进行训练的时间复杂度介于?(??log?)和?(?2?)之间,而对于预测,时间复杂度为?(log2 ?),其中? = 训练实例的数量,? = 特征数量,以及? = 决策树的深度。

Round 1 ~ 3

(二)可解释性

一个模型的预测得分仅反映了它的一方面,我们还想知道模型为什么要做出这个预测的。

在这里,我们描绘出了模型特征的重要性和 SHAP 值,还有一个实际的决策树,以便更准确地理解模型的预测。

  • (a)特征的重要性

这三个增强模型都提供了一个 .feature_importances_ attribute 属性,允许我们查看有哪些特征对模型预测的影响是最大的:

Round 1 ~ 3

  • (b)SHAP值

另外一种方法是 SHAP 摘要图,用来了解每个特性对模型输出的影响分布。SHAP 值是在这些特征之间的公平的信用分配,并且具有博弈论一致性的理论保证,这使得它们通常比整个数据集中的那些典型特征的重要性更值得信赖。

Round 1 & 2

  • (c)绘制决策树

最后,XGBoost 和 LightGBM 这两个算法还允许我们绘制用于进行预测的实际决策树,这对于更好地了解每个特征对目标变量的预测能力非常的有用。而 CatBoost 没有决策树的绘制功能。

如果想看 CatBoost 的结果,这里推荐给大家一个可视化工具: https://blog.csdn.net/l_xzmy/article/details/81532281

Round 1 & 2

评测总结

  • CatBoost

(1)CatBoost 提供了比 XGBoost 更高的准确性和和更短的训练时间;

(2)支持即用的分类特征,因此我们不需要对分类特征进行预处理(例如,通过 LabelEncoding 或 OneHotEncoding)。事实上,CatBoost 的文档明确地说明不要在预处理期间使用热编码,因为“这会影响训练速度和最终的效果”;

(3)通过执行有序地增强操作,可以更好地处理过度拟合,尤其体现在小数据集上;

(4)支持即用的 GPU 训练(只需设置参数task_type =“GPU”);

(5)可以处理缺失的值;

  • LightGBM

(1)LightGBM 也能提供比 XGBoost 更高的准确性和更短的训练时间;

(2)支持并行的树增强操作,即使在大型数据集上(相比于 XGBoost)也能提供更快的训练速度;

(3)使用 histogram-esquealgorithm,将连续的特征转化为离散的特征,从而实现了极快的训练速度和较低的内存使用率;

(4)通过使用垂直拆分(leaf-wise split)而不是水平拆分(level-wise split)来获得极高的准确性,这会导致非常快速的聚合现象,并在非常复杂的树结构中能捕获训练数据的底层模式。可以通过使用 num_leaves 和 max_depth 这两个超参数来控制过度拟合;

  • XGBoost

(1)支持并行的树增强操作;

(2)使用规则化来遏制过度拟合;

(3)支持用户自定义的评估指标;

(4)处理缺失的值;

(5)XGBoost 比传统的梯度增强方法(如 AdaBoost)要快得多;

如果想深入研究这些算法,可以阅读下面相关文章的链接:

LightGBM: 一种高效的梯度增强决策树 https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf CatBoost: 支持分类特征的梯度增强 http://learningsys.org/nips17/assets/papers/paper_11.pdf XGBoost: 一个可扩展的树增强系统 https://arxiv.org/pdf/1603.02754.pdf

重要参数解读

下面列出的是模型中一些重要的参数,以帮助大家更好学习与使用这些算法!

  • Catboost
    • n_estimators:表示用于创建树的最大数量;
    • learning_rate:表示学习率,用于减少梯度的级别;
    • eval_metric:表示用于过度拟合检测和最佳模型选择的度量标准;
    • depth:表示树的深度;
    • subsample:表示数据行的采样率,不能在贝叶斯增强类型设置中使用;
    • l2_leaf_reg:表示成本函数的L2规则化项的系数;
    • random_strength:表示在选择树结构时用于对拆分评分的随机量,使用此参数可以避免模型过度拟合;
    • min_data_in_leaf:表示在一个叶子中训练样本的最小数量。CatBoost不会在样本总数小于指定值的叶子中搜索新的拆分;
    • colsample_bylevel, colsample_bytree, colsample_bynode — 分别表示各个层、各棵树、各个节点的列采样率;
    • task_type:表示选择“GPU”或“CPU”。如果数据集足够大(从数万个对象开始),那么在GPU上的训练与在CPU上的训练相比速度会有显著的提升,数据集越大,加速就越明显;
    • boosting_type:表示在默认情况下,小数据集的增强类型值设置为“Ordered”。这可以防止过度拟合,但在计算方面的成本会很高。可以尝试将此参数的值设置为“Plain”,来提高训练速度;
    • rsm:对于那些具有几百个特性的数据集,rsm参数加快了训练的速度,通常对训练的质量不会有影响。另外,不建议为只有少量(10-20)特征的数据集更改rsm参数的默认值;
    • border_count:此参数定义了每个特征的分割数。默认情况下,如果在CPU上执行训练,它的值设置为254,如果在GPU上执行训练,则设置为128;
  • LightGBM
    • num_leaves:表示一棵树中最大的叶子数量。在LightGBM中,必须将num_leaves的值设置为小于2^(max_depth),以防止过度拟合。而更高的值会得到更高的准确度,但这也可能会造成过度拟合;
    • max_depth:表示树的最大深度,这个参数有助于防止过度拟合;
    • min_data_in_leaf:表示每个叶子中的最小数据量。设置一个过小的值可能会导致过度拟合;
    • eval_metric:表示用于过度拟合检测和最佳模型选择的度量标准;
    • learning_rate:表示学习率,用于降低梯度的级别;
    • n_estimators:表示可以创建树的最大数量;
    • colsample_bylevel, colsample_bytree, colsample_bynode — 分别表示各个层、各棵树、各个节点的列采样率;
    • boosting_type — 该参数可选择以下的值:
      • ‘gbdt’,表示传统的梯度增强决策树;
      • ‘dart’,缺失则符合多重累计回归树(Multiple Additive Regression Trees);
      • ‘goss’,表示基于梯度的单侧抽样(Gradient-based One-Side Sampling);
      • ‘rf’,表示随机森林(Random Forest);
    • feature_fraction:表示每次迭代所使用的特征分数(即所占百分比,用小数表示)。将此值设置得较低,来提高训练速度;
    • min_split_again:表示当在树的叶节点上进行进一步的分区时,所需最小损失值的减少量;
    • n_jobs:表示并行的线程数量,如果设为-1则可以使用所有的可用线程;
    • bagging_fraction:表示每次迭代所使用的数据分数(即所占百分比,用小数表示)。将此值设置得较低,以提高训练速度;
    • application :default(默认值)=regression, type(类型值)=enum, options(可选值)=
      • regression : 表示执行回归任务;
      • binary : 表示二进制分类;
      • multiclass:表示多个类的类别;
      • lambdarank : 表示lambdarank 应用;
    • max_bin:表示用于存放特征值的最大容器(bin)数。有助于防止过度拟合;
    • num_iterations:表示增强要执行的迭代的迭代;

XGBoost 参数 https://xgboost.readthedocs.io/en/latest/parameter.html LightGBM 参数 https://lightgbm.readthedocs.io/en/latest/Python-API.html CatBoost 参数 https://catboost.ai/docs/concepts/python-reference_parameters-list.html#python-reference_parameters-list

上面三个文件可以查看这些模型所有超参数。

如果想详细本文的代码和原文,可访问下面的地址:

https://www.kaggle.com/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost https://lavanya.ai/2019/06/27/battle-of-the-boosting-algorithms/

(*本文为 AI科技大本营编译文章,转载请联系 1092722531)

本文分享自微信公众号 - AI科技大本营(rgznai100),作者:CSDN App

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度学习在自动驾驶感知领域的应用

    本次直播课程是由深度学习资深研究者-杨阳博士从百度Apollo自动驾驶感知技术出发,讲解环境感知中深度学习的实用性与高效性。

    AI科技大本营
  • AI 技术讲座精选:菜鸟学深度学习(一)

    【AI100 导读】在本系列中,你将会学习如何利用深度学习解决那些比较简单的问题。在解决问题的过程中,你不仅会学到深度学习中的某一种类型,也可以在 Keras ...

    AI科技大本营
  • 结构化数据上的机器学习大杀器XGBoost

    XGBoost是一个机器学习算法工具,它的原理本身就并不难理解,而且你并不需要彻底搞懂背后的原理就能把它用得呼呼生风。 它的威力有多强? 自从2014年9月份在...

    AI科技大本营
  • 深度解读8分+围绕免疫治疗对泛癌展开建模和分析

    今天分享的是2020年6月份发表于Clinical Cancer Research的一篇文章,标题是Multifactorial deep learning r...

    百味科研芝士
  • 平滑回归模型及其常见应用举例及R操作

    本篇简介一种特殊的回归类型,平滑回归,它以非参数的方式获得平滑的拟合曲线。由于平滑曲线的走势可能规律性不明显或波动性较大,因此平滑回归模型很少直接用于预测响应变...

    用户7585161
  • 十个很酷的数据可视化项目

    数据可视化是科学、艺术和设计的结合,当枯燥隐晦的数据被数据科学家们以优雅、简明、直观的视觉方式呈现时,带给人们的不仅仅是一种全新的观察世界的方法,而且往往具备艺...

    CDA数据分析师
  • 【报告】2016-2020年Edtech创业趋势预测(80页完整版)

    【新智元导读】教育科技(EdTech)行业投资火热,2015年,中国教育投资总额已经超过美国居世界第一,近四年复合增长率达32%。人工智能等前沿科技对严重依赖技...

    新智元
  • MSBuild入门(续)

    MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见...

    blackheart
  • Qt官方示例-文本查找器

    Qt君
  • 2017年数据可视化的七大趋势!

    Groeger表示,目前的可视化技术水平已经远远超出了Google Maps,而且每天都会出现很多实验性的技术。 “现在你可以用地图来讲故事。例如,蒂姆·华莱士...

    华章科技

扫码关注云+社区

领取腾讯云代金券