有没有一种方法可以自定义SHAP beeswarm图中特征的顺序?

4
我想知道是否有一种方法可以更改SHAP beeswarm图中功能显示的顺序。文档描述了“转换”,例如使用shap_values.absshap_values.abs.mean(0)来更改计算顺序的方式,但我实际上想做的是输入一个功能列表或索引,并按照该列表排序。从文档中可以看到:
shap.plots.beeswarm(shap_values, order=shap_values.abs)

这是生成的图表

1个回答

2

这是默认的排序实现:

import xgboost
import shap

X, y = shap.datasets.adult()
model = xgboost.XGBClassifier().fit(X, y)

explainer = shap.Explainer(model, X)
shap_values = explainer(X)

shap.plots.beeswarm(shap_values, max_display=12, order=shap.Explanation.abs.mean(0))

enter image description here

然后,如果您想手动定义输出列的顺序:

order = [
    "Country",
    "Workclass",
    "Education-Num",
    "Marital Status",
    "Occupation",
    "Relationship",
    "Race",
    "Sex",
    "Capital Gain",
    "Capital Loss",
    "Hours per week",
    "Age",
]
col2num = {col: i for i, col in enumerate(X.columns)}

order = list(map(col2num.get, order))

shap.plots.beeswarm(shap_values, max_display=12, show=False, color_bar=False, order=order)
plt.colorbar()
plt.show()

enter image description here


太好了,谢谢!我认为您忘记放入第二个图形的修改代码了,但是我尝试了:shap.plots.beeswarm(shap_values, max_display=12, show=False, color_bar=False, order=order),它可以正常工作。 - Eich Varkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接