如何将原始数据与聚类数据相关联



我有一个距离矩阵表示成对元素的距离矩阵如

    A B C D .....
A   n1 n2 n3
B n1    
C n2 n4
D n3 n5 ....... 
E.........

我输入数组,就像聚类一样

 arry=  [ 0 n1, n2, n3..
   n1.......
   n2 n4
   n3 n5 ]

Y=sch.linkage(arry,'single')
cutoff=1e-6
T=sch.fcluster(Y, cutoff,'distance')
print T
Z=sch.dendrogram(Y, color_threshold=cutoff)

我的 fcluster 输出就像[ 4 10 12 1 5 13 2 11 1 7 8 3 14 6 10 16 9 15 1 7]来自其他人以前的海报使用 scipy 进行聚类 - 通过距离矩阵进行聚类,如何取回原始对象

我理解输出 T[i] 仅显示集群中的元素数 ..我如何链接原始元素A,B,C,D,E.....具有聚类结果和树状图的元素?并将它们正确地实验室到我的图形中。

"我知道输出 T[i] 只显示集群中元素的数量......"

T[j]是第 j 个数据点的"聚类数"。 也就是说,fcluster提供向群集分配数据点。 因此,例如,如果有五个数据点,并且fcluster将第一个、第二个和最后一个放在聚类 1 中,将其他数据点放在聚类 2 中,则 fcluster 的返回值将为 array([1, 1, 2, 2, 1])

下面是一个演示,展示了如何将这些数据分开。 为了方便起见,我使用了fclusterdata而不是linkagefcluster的组合。 fclusterdata返回与fcluster相同的内容。

import numpy as np
def cluster_indices(cluster_assignments):
    n = cluster_assignments.max()
    indices = []
    for cluster_number in range(1, n + 1):
        indices.append(np.where(cluster_assignments == cluster_number)[0])
    return indices
if __name__ == "__main__":
    from scipy.cluster.hierarchy import fclusterdata
    # Make some test data.
    data = np.random.rand(15,2)
    # Compute the clusters.
    cutoff = 1.0
    cluster_assignments = fclusterdata(data, cutoff)
    # Print the indices of the data points in each cluster.
    num_clusters = cluster_assignments.max()
    print "%d clusters" % num_clusters
    indices = cluster_indices(cluster_assignments)
    for k, ind in enumerate(indices):
        print "cluster", k + 1, "is", ind

典型输出:

4 clusters
cluster 1 is [ 0  1  6  8 10 13 14]
cluster 2 is [ 3  4  5  7 11 12]
cluster 3 is [9]
cluster 4 is [2]

最新更新