如何查看 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 ndarray 和 shap_values
是 shap._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))
我有一个遗传数据集,其中有 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 ndarray 和 shap_values
是 shap._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))