gpt4 book ai didi

python - shap_values 和explainer.expected_value 的输出是什么?

转载 作者:行者123 更新时间:2023-11-30 09:16:56 24 4
gpt4 key购买 nike

我正在 XGBClassifier 模型上运行 shap 并尝试理解输出。我的代码:

params2 = {'n_estimators': 100,
'learning_rate': 0.5,
'seed': 0,
'subsample': 0.8,
'n_jobs': 50,
'colsample_bytree': 0.8,
'objective': 'binary:logistic',
'max_depth': 10,
'min_child_weight': 300,
'gamma': 2,
'max_delta_step': 6
}

estimator = xgb.XGBClassifier(**params2)
mapper = DataFrameMapper([(i, None) if j != 'object' and j != 'bool' else (i,
[CategoricalDomain(
missing_value_treatment="as_value",
invalid_value_treatment="as_missing",
missing_value_replacement=
train_x[i].value_counts().idxmax(),
invalid_value_replacement=
train_x[i].value_counts().idxmax()),
LabelEncoder()])
for i, j in zip(train_x.columns.values, train_x.dtypes.values)],
input_df=True, df_out=True)

pmml_pipeline = PMMLPipeline([("mapper", mapper),("classifier", estimator)])
pmml_pipeline.fit(train_x, train_y.as_matrix())
train_x_encode = pmml_pipeline.named_steps['mapper'].fit_transform(train_x)
explainer = shap.TreeExplainer(pmml_pipeline.named_steps['classifier'])
shap_values = explainer.shap_values(train_x_encode)
print explainer.expected_value

根据我的理解,explainer.expected_value 假设返回一个大小为 2 的数组,shap_values 应该返回两个矩阵,一个表示正值,一个表示负值值,因为这是一个分类模型。但 explainer.expected_value 实际上返回一个值,shap_values 返回一个矩阵

我的问题是:

  1. 我缺少什么,为什么 shap 的输出不像模型输出那样是二维的。
  2. 如果explainer.expected_value应该是一维的,那么它代表什么(我期望得到两个值 - 平均预测概率为1,平均预测概率为2)
  3. 关于shap_values矩阵:对于分类变量,我可以对每个变量值的所有shap值进行平均,并说我得到的平均值是该值对目标变量的影响吗?

最佳答案

我能想到的原因是你的真实标签只有一个独特的值(value)。在这种情况下,explainer.expected_value 不是一个数组,而是一个数字。此外,shap_values 仅包含一个矩阵。

  1. 如果我对真实标签的假设是正确的,那么你就不会错过任何东西。看一下源码,例如here
  2. 在这种情况下,它将是您标签中的唯一标签/类别的预期值
  3. 我不太确定我的理解是否正确,但据我了解,您不需要对值进行平均

关于python - shap_values 和explainer.expected_value 的输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com