【发布时间】:2021-06-07 10:32:37
【问题描述】:
我有一个基因数据集,其中包含 600 行基因,包含 11 个特征,我在机器学习中使用回归分类来预测致病基因。
我正在尝试查看在 shap 包中执行的行的层次聚类。我专门运行 shap 热图 - shap.plots.heatmap(shap_values, max_display=11) - 并尝试查看在此图中聚集的行/基因的数据(此处显示的示例图: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))
但是,这在制作 D 对象的第 4 行给了我一个错误:
ValueError: setting an array element with a sequence.
如何更改shap_values[:,:-1] 以修复此错误?
作为参考,我的shap_values.shape 给出了一个 600x11 的数据集,type(shap_values) 给出了shap._explanation.Explanation,不幸的是,在这种情况下我无法给出示例数据。我已经尝试理解解决此错误的类似 stackoverflow 问题,但我无法弄清楚如何让它们具体为 shap_values 数据工作。
如何解决运行层次聚类的错误?难道shap_value不是二维标量,除非分类是二元的吗?
我看到了从 shap_values 运行的示例,使用笔记本 (https://github.com/suinleelab/treeexplainer-study/blob/master/notebooks/mortality/NHANES%20I%20Analysis.ipynb) 运行我在上面尝试的代码但仍然有效。
【问题讨论】:
-
scipy.spatial.distance.pdist 适用于二维标量数组,(不是 shap._explanation.Explanation)。
-
谢谢你,你知道如果我在做回归分类,我可以将 shap 值转换为二维标量数组还是这只适用于二进制分类?
-
不,我不知道这个 shap 包。您需要找到一些特征向量,然后为您的数据使用某种类型的嵌入。我不确定 shap Explanation 是否打算以这种方式使用。让我们等待知道图书馆的人。
-
@DN1 将
shap_values[:,:-1]更改为shap_values.values[:,:-1]后尝试
标签: python scipy hierarchical-clustering shap