当我使用 SHAP 进行分类问题时,它显示的输出不是 0 或 1。我该如何克服这个问题?

数据挖掘 分类 xgboost
2022-03-06 19:13:57

我正在使用 Pima Indians 糖尿病数据库(https://www.kaggle.com/uciml/pima-indians-diabetes-database)。我使用 XGboost 进行了预测,并尝试使用 SHAP 分析这些功能。

但是,当我仅使用一个训练示例(一个 1x8 向量)的 force_plot 时,它显示我的输出为 -2.02。这是一个分类问题,我不应该看到这样的值。我是 SHAP 的新手,我不知道问题出在哪里。

这是我的代码:

import numpy as np
import xgboost as xgb
import sklearn as skl
import shap

dataset=np.loadtxt("diabetes.csv", delimiter=",")
X=dataset[:,0:8]
Y=dataset[:,8]
seed=7
test_size=0.33
X_train, X_test, y_train, y_test=skl.model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)

shap.initjs()
model=xgb.XGBClassifier()
model.fit(X_train, y_train)

predictions=model.predict(X_test)
accuracy=skl.metrics.accuracy_score(y_test, predictions)
print(accuracy*100)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_train)
shap.force_plot(explainer.expected_value, shap_values[0,:].reshape(1, 8), X_train[0,:].reshape(1, 8))

我的模型的准确度是:77,95。

这是我的情节的结果

1个回答

默认链接函数是身份,因此您看到的是对数赔率而不是概率。要查看概率,请尝试添加如下link='logit'调用force_plot

shap.force_plot(explainer.expected_value,
                shap_values[0,:].reshape(1, 8),
                X_train[0,:].reshape(1, 8),
                link='logit')

您可以在SHAP 文档站点上阅读更多内容。