xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(1)

作者 | LAVANYA

译者 | 陆离

责编 | Jane

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

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

一言不合就 Battle

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

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

Battle 规则

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

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

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

3、衡量指标:

a.训练和预测的时间;

b.预测得分;

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

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(2)

PK 结果揭晓

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

Top 1:LightGBM

Top 2:CatBoost

Top 3:XGBoost

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(3)

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

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

Round 1 ~ 3

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(4)

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(5)

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(6)

(二)可解释性

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

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

(a)特征的重要性

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

Round 1 ~ 3

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(7)

(b)SHAP值

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

Round 1 & 2

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(8)

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(9)

(c)绘制决策树

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

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

Round 1 & 2

xcinboost实战(大战三回合XGBoostLightGBM和Catboost一决高低)(10)

评测总结

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

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

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

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

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

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

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

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

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

(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

重要参数解读

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

XGBoost 参数 https://xgboost.readthedocs.io/en/latest/parameter.html LightGBM 参数 https://lightgbm.readthedocs.io/en/latest/Python-API.htmlCatBoost 参数 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)

,