PDR*_*DRX 5 python numpy cluster-analysis hierarchical-clustering scipy
我正在使用Python的fastcluster包来计算大量观测值上的分层聚类过程的链接矩阵。
到目前为止,fastcluster 的方法表现良好,它能够对一组观测值进行聚类,这比使用相同内存量进行计算的情况要linkage_vector()大得多。scipy.linkage()
完成此操作后,我现在想要检查聚类结果并计算相对于原始数据的共表相关系数。通常的过程是首先计算共表距离矩阵,然后检查与原始数据的相关性。使用 scipy 的cophenet()方法,它看起来像这样:
import fastcluster as fc
import numpy as np
from scipy.cluster.hierarchy import cophenet
X = np.random.random((1000,10)) # Original data (1000 observations)
Z = fc.linkage_vector(X) # Clustering
orign_dists = fc.pdist(X) # Matrix of original distances between observations
cophe_dists = cophenet(Z) # Matrix of cophenetic distances between observations
# What I really want at the end of the day is
corr_coef = np.corrcoef(orign_dists, cophe_dists)[0,1]
Run Code Online (Sandbox Code Playgroud)
然而,当观察集非常大时,这不起作用(只需将 1000 替换为 100000 左右,您就会看到)。Fastcluster 的算法在聚类方面没有问题,但 scipy 的算法cophenet()在生成的链接矩阵方面遇到了内存问题。
对于这些观察集太大而无法由标准 scipy 函数处理的情况,我不知道有其他方法可以计算由 fastcluster 或任何其他包提供的共表相关性。你?如果是这样,怎么办?如果没有,您能想出一种聪明且内存高效的迭代方法来通过定制函数来实现这一目标吗?我在这里收集一些想法,甚至可能是解决方案。