Sagemaker 中 XGBoost 的功能重要性

Posted

技术标签:

【中文标题】Sagemaker 中 XGBoost 的功能重要性【英文标题】:Feature Importance for XGBoost in Sagemaker 【发布时间】:2019-04-10 22:06:42 【问题描述】:

我已经使用 Amazon Sagemaker 构建了一个 XGBoost 模型,但是我找不到任何可以帮助我解释模型并验证它是否学习了正确的依赖关系的东西。

一般来说,我们可以通过 python API (https://xgboost.readthedocs.io/en/latest/python/python_api.html) 中的 get_fscore() 函数看到 XGBoost 的功能重要性,我在 sagemaker api(https://sagemaker.readthedocs.io/en/stable/estimators.html) 中看不到这种类型。

我知道我可以构建自己的模型,然后使用 sagemaker 进行部署,但我很好奇是否有人遇到过这个问题以及他们是如何克服它的。

谢谢。

【问题讨论】:

【参考方案1】:

截至 2019 年 6 月 17 日,Sagemaker XGBoost 模型以名为 model.tar.gz 的存档形式存储在 S3 上。该存档由名为xgboost-model 的单个腌制模型文件组成。

要直接从 S3 加载模型而不下载,可以使用以下代码:

import s3fs
import pickle
import tarfile
import xgboost

model_path = 's3://<bucket>/<path_to_model_dir>/xgboost-2019-06-16-09-56-39-854/output/model.tar.gz'

fs = s3fs.S3FileSystem()

with fs.open(model_path, 'rb') as f:
    with tarfile.open(fileobj=f, mode='r') as tar_f:
        with tar_f.extractfile('xgboost-model') as extracted_f:
            xgbooster = pickle.load(extracted_f)

xgbooster.get_fscore()

【讨论】:

【参考方案2】:

SageMaker XGBoost 目前不提供从模型中检索特征重要性的接口。您可以编写一些代码来从 XGBoost 模型中获取特征重要性。您必须从 S3 中的模型中获取助推器对象工件,然后使用以下 sn-p

import pickle as pkl
import xgboost
booster = pkl.load(open(model_file, 'rb'))
booster.get_score()
booster.get_fscore()

请参阅 XGBoost doc 以获取从 Booster 对象(例如 get_score()get_fscore())获取特征重要性的方法。

【讨论】:

【参考方案3】:

虽然您可以像 rajesh 和 Lukas 建议的那样编写自定义脚本并使用 XGBoost 作为框架来运行脚本(请参阅 How to Use Amazon SageMaker XGBoost 了解如何使用“脚本模式”),SageMaker 最近推出了 SageMaker Debugger,它允许您从 XGBoost 中实时检索特征重要性。

Notebook demonstrates how to use SageMaker Debugger to retrieve feature importance.

【讨论】:

以上是关于Sagemaker 中 XGBoost 的功能重要性的主要内容,如果未能解决你的问题,请参考以下文章

XGBoost 功能重要性:编码后如何获取原始变量名

在 sagemaker 中进行预测之前,如何预处理输入数据?

Xgboost中特征重要性计算方法详解

如何从 xgboost 或随机森林中区分重要特征的方向?

使用 XGBoost 特征重要性分数打印出特征选择中使用的特征

xgboost 特征重要性计算