kaggle神器:教你简单部署XGBoost
点击上方关注,All in AI中国
XGBoost现在是用于结构化数据的领先机器学习算法之一。它在众多的kaggle竞赛中大放异彩,并因其良好的表现而被业界广泛应用。
但是,许多使用过XGBoost的人可能会遇到这些问题:
- 模型太复杂,就像一个黑盒子
- 很难解释结果
- 在生产环境中部署训练有素的模型是件令人头疼的事情
对于1,要很好地理解XGBoost背后的算法,一个好方法是阅读本文(由XGBoost的创建者所写),你可能会发现这个演示很有用。对于2,这是迄今为止我发现的最好的文章(Scott Lundberg) https://towardsdatascience.com/interpretable-machine-learning-with-xgboost-9ec80d148d27,它解释了XGBoost计算整体特征重要性的三种不同方式,并且还解释了使用SHAP算法来计算每个单独记录的特征重要性。
本文的重点是3,将向读者展示如何使用一些简单的编码将XGBoost模型转换为.py文件,这个.py文件的唯一依赖是“numpy”包。因此,在您训练XGB模型之后,您可以轻松地将模型部署在另一个不需要XGBoost包的环境中。
本教程分为几个部分:下载数据并训练模型→将模型转换为.py文件→使用.py文件预测测试数据。
步骤0.下载jupyter笔记本
此笔记本包含以下所有代码。将它放在目标文件夹中。
步骤1.下载数据并训练模型
让我们使用著名的泰坦尼克号数据集来构建玩具模型。从链接下载train.csv和test.csv。创建一个子文件夹“/ data”并将.csv放在那儿。
因为XGBoost只接受数字输入,所以让我们跳过分类变量编码并随机选择一些数字列进行建模。
此XGBoost模型生成了3个决策树,每个决策树的最大高度为3。由于gamma(分割数的惩罚常数)设置为较大的值,因此可防止某些树节点的分裂。
决策树看起来是这样的:
每个记录的预测分数由“基础分数+来自所有树木的最终叶子值”给出。
步骤2.将模型转换为.py文件
在XGBoost Python API中,您可以找到允许您将模型转储为字符串或.txt文件的函数,或保存模型以供以后使用。 但是没有API可以将模型转储为Python函数。有个诀窍:我们首先将模型转储为字符串,然后使用正则表达式解析长字符串并将其转换为.py文件。
完成此工作的代码片段:
通过模型训练中使用的基本分数和训练模型,我们能够将其转换为.py模型,该模型仅需要“numpy”包(用于缺失值处理)。
生成的“xgb_model.py”的一部分如下所示:
步骤3.使用.py文件预测测试数据。
我们现在可以导入刚刚创建的xgb_model.py,并且可以直接执行预测。
让我们将它与XGBoost模型产生的预测进行比较。
结果相符。
一些警告:
- 这些代码在python 3.5.2 + xgboost 0.6下运行良好。 不保证为其他版本生成正确的结果。
- 我的代码中没有进行任何错误处理。
- .py用于对python字典进行评分,但您可以进行一些小修改以适合您的用例。
- 在生成.py文件之前,请确保目标文件夹中没有与该名称相同的.py文件。
运营:李佳惠