我正在对XGBClassifier模型进行改进,并试图了解输出。 我的代码:
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
返回一个矩阵
我的问题是:
explainer.expected_value
应该是一维的,那么它代表什么(我希望得到两个值-平均预测概率为1,平均预测概率为2)shap_values
矩阵:对于分类变量,我可以对每个变量值的所有shap值求平均值,并说得到的平均值是该值对目标变量的影响吗? 答案 0 :(得分:0)
我能想到的原因是,您的真实标签只有一个唯一值。在这种情况下,explainer.expected_value
不是数组而是数字。另外,shap_values
仅包含一个矩阵。