Python中使用scipy/numpy进行相关性分层聚类?

12
我该如何在scipy/numpy中对相关矩阵运行分层聚类?我的矩阵大小为100行9列,我想通过每个条目在这9个条件下的相关性进行分层聚类。我希望使用1-pearson相关性作为聚类距离度量。假设我有一个包含100×9矩阵的numpy数组X,我该如何实现? 我尝试了使用hcluster库,基于这个例子:
Y=pdist(X, 'seuclidean')
Z=linkage(Y, 'single')
dendrogram(Z, color_threshold=0)

然而,pdist 不是我想要的,因为它是欧几里得距离。有什么建议吗?

谢谢。

1个回答

13

只需将度量标准更改为correlation,使得第一行变为:

Y=pdist(X, 'correlation')

然而,我认为代码可以简化为:

Z=linkage(X, 'single', 'correlation')
dendrogram(Z, color_threshold=0)

因为链接会代替你处理pdist。


1
这里的“相关性”是指皮尔逊相关系数还是斯皮尔曼等级相关系数?此外,为了成为一个有效的距离度量标准,应该是1-皮尔逊相关系数,这样做是否正确?pdist函数会自动处理吗?谢谢。 - user248237
2
在我看来,它似乎是1-pearson。你可以在site-packages/scipy/spatial/distance.py中自己查看。 - Justin Peel
5
如果单独提到“correlation”,通常意指皮尔逊相关性,而非斯皮尔曼相关性。若要表示斯皮尔曼相关性,则会明确使用该术语进行说明。 - dwf

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