我有以下数据框:
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']})
我想运行一个分类算法来预测 3class
es
所以我将数据集分成训练和测试,然后运行 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)
现在我想得到平均形状值每个班级,而不是平均值absolute从此代码生成的 SHAP 值:
shap_values = shap.TreeExplainer(model).shap_values(X_test)
shap.summary_plot(shap_values, X_test)
此外,该图标记了class
为 0,1,2。我怎么知道哪个class
从原来的0,1 & 2 对应吗?
因为这段代码:
shap.summary_plot(shap_values, X_test,
class_names= ['a', 'b', 'c'])
gives
和这段代码:
shap.summary_plot(shap_values, X_test,
class_names= ['b', 'c', 'a'])
gives
所以我对这个传说已经不太确定了。
有任何想法吗 ?