如何查看 shap 和 scipy 中的特定行聚类?

How to view specific rows clustering within shap and scipy?

我有一个遗传数据集,其中有 600 行基因和 11 个特征,我在机器学习中使用回归分类来预测致病基因。

我正在尝试查看在 shap 包中执行的行的层次聚类。我特别 运行 shap 热图 - shap.plots.heatmap(shap_values, max_display=11) - 并试图查看聚集在该图中的 rows/genes 的数据(此处显示的示例图:https://shap.readthedocs.io/en/latest/example_notebooks/api_examples/plots/heatmap.html)。

我 运行 尝试在 shap 中(在 shap.plots.heatmap() 函数中)执行聚类的代码是:

explainer = shap.Explainer(model, X)
shap_values = explainer(X)
import scipy.cluster
D = scipy.spatial.distance.pdist(shap_values[:,:-1], 'sqeuclidean')
clustOrder = scipy.cluster.hierarchy.leaves_list(scipy.cluster.hierarchy.complete(D))

然而,这在第 4 行生成 D 对象时出现错误:

ValueError: setting an array element with a sequence.

如何更改 shap_values[:,:-1] 以修复此错误?

作为参考,我的 shap_values.shape 给出了一个 600x11 的数据集,type(shap_values) 给出了 shap._explanation.Explanation,不幸的是我不能在这种情况下给出示例数据。我已经尝试理解解决此错误的类似 Whosebug 问题,但我无法弄清楚如何让它们具体针对 shap_values 数据工作。

如何解决 运行 层次聚类的错误?除非分类是二进制的,否则 shap_value 不是二维标量吗?

我已经看到 运行 来自 shap_values 的示例和笔记本 (https://github.com/suinleelab/treeexplainer-study/blob/master/notebooks/mortality/NHANES%20I%20Analysis.ipynb) 运行 我在上面尝试的代码仍然有效。

正如@user12750353 所指出的,scipy.spatial.distance.pdist takes ndarrayshap_valuesshap._explanation.Explanation

的类型

shap_values 对象作为属性 values 这是 ndarray format that can be used with scipy.spatial.distance.pdist

中的结果
explainer = shap.Explainer(model, X)
shap_values = explainer(X)
import scipy.cluster
D = scipy.spatial.distance.pdist(<b>shap_values.values</b>[:,:-1], 'sqeuclidean')
clustOrder = scipy.cluster.hierarchy.leaves_list(scipy.cluster.hierarchy.complete(D))