【发布时间】:2022-11-05 04:33:49
【问题描述】:
我有以下数据框:
import pandas as pd
import random
import xgboost
import shap
foo = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10],
'var1':random.sample(range(1, 100), 10),
'var2':random.sample(range(1, 100), 10),
'var3':random.sample(range(1, 100), 10),
'class': ['a','a','a','a','a','b','b','c','c','c']})
我想为此运行分类算法以预测 3 classes
因此,我将数据集拆分为训练和测试,然后运行 xgboost
cl_cols = foo.filter(regex='var').columns
X_train, X_test, y_train, y_test = train_test_split(foo[cl_cols],
foo[['class']],
test_size=0.33, random_state=42)
model = xgboost.XGBClassifier(objective="binary:logistic")
model.fit(X_train, y_train)
现在我想获得平均 SHAP 值每个班级
以下代码产生了我想要的,但它使用绝对SHAP 值以计算平均值,但我只需要平均值
shap_values = shap.TreeExplainer(model).shap_values(X_test)
shap.summary_plot(shap_values, X_test)
此外,该图将class 标记为 0、1、2。我怎么知道 0,1 & 2 对应于原始的哪个class?
因为这段代码:
shap.summary_plot(shap_values, X_test,
class_names= ['a', 'b', 'c'])
给
和这段代码
shap.summary_plot(shap_values, X_test,
class_names= ['b', 'c', 'a'])
给
所以我不再确定这个传说了。 有任何想法吗 ?
【问题讨论】:
标签: python python-3.x machine-learning xgboost shap