kaggle神器:教你简单部署XGBoost

itaquestion 2018-07-19

点击上方关注,All in AI中国

XGBoost现在是用于结构化数据的领先机器学习算法之一。它在众多的kaggle竞赛中大放异彩,并因其良好的表现而被业界广泛应用。

kaggle神器:教你简单部署XGBoost

但是,许多使用过XGBoost的人可能会遇到这些问题:

  1. 模型太复杂,就像一个黑盒子
  2. 很难解释结果
  3. 在生产环境中部署训练有素的模型是件令人头疼的事情

对于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只接受数字输入,所以让我们跳过分类变量编码并随机选择一些数字列进行建模。

kaggle神器:教你简单部署XGBoost

此XGBoost模型生成了3个决策树,每个决策树的最大高度为3。由于gamma(分割数的惩罚常数)设置为较大的值,因此可防止某些树节点的分裂。

决策树看起来是这样的:

kaggle神器:教你简单部署XGBoost

每个记录的预测分数由“基础分数+来自所有树木的最终叶子值”给出。

步骤2.将模型转换为.py文件

在XGBoost Python API中,您可以找到允许您将模型转储为字符串或.txt文件的函数,或保存模型以供以后使用。 但是没有API可以将模型转储为Python函数。有个诀窍:我们首先将模型转储为字符串,然后使用正则表达式解析长字符串并将其转换为.py文件。

kaggle神器:教你简单部署XGBoost

完成此工作的代码片段:

kaggle神器:教你简单部署XGBoost

通过模型训练中使用的基本分数和训练模型,我们能够将其转换为.py模型,该模型仅需要“numpy”包(用于缺失值处理)。

kaggle神器:教你简单部署XGBoost

生成的“xgb_model.py”的一部分如下所示:

kaggle神器:教你简单部署XGBoost

步骤3.使用.py文件预测测试数据。

我们现在可以导入刚刚创建的xgb_model.py,并且可以直接执行预测。

kaggle神器:教你简单部署XGBoost

让我们将它与XGBoost模型产生的预测进行比较。

kaggle神器:教你简单部署XGBoost

结果相符。

一些警告:

  • 这些代码在python 3.5.2 + xgboost 0.6下运行良好。 不保证为其他版本生成正确的结果。
  • 我的代码中没有进行任何错误处理。
  • .py用于对python字典进行评分,但您可以进行一些小修改以适合您的用例。
  • 在生成.py文件之前,请确保目标文件夹中没有与该名称相同的.py文件。

kaggle神器:教你简单部署XGBoost

运营:李佳惠

相关推荐