对对象使用scipy分层聚类

时间:2018-11-26 07:57:41

标签: scipy hierarchical-clustering

我有一个对象列表,以及对象之间的距离度量。我可以使用scipy的分层聚类对对象进行聚类(fclust1似乎仅接受浮点向量)吗?

或者,如果在scipy中不可能做到这一点,那么还有其他python库可以在其中完成吗?

示例:

 class MyObject(object):

     def __init__(self):
       self.vec1 = [random.choice(range(100)) for i in range(1000)]
       self.vec2 = [random.choice(range(100)) for i in range(1000)]

 def my_distance_metric(a1, a2):

      return some scalar function of a1.vec1, a1.vec2, a2.vec1, a2.vec2

 objects = [MyObject() for in in range(1000)]
 fclust1.cluster(objects, metric = my_distance_metric)

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以计算对象的压缩距离矩阵,并将其传递到scipy.cluster.hierarchy.linkage以计算链接矩阵。然后将链接矩阵传递给scipy.cluster.hierarchy.fclusterscipy.cluster.hierarchy.dendrogram

例如,

from scipy.cluster.hierarchy import linkage, dendrogram

n = len(objects)
condensed_dist = [my_distance_metric(objects[j], objects[k])
                      for j in range(n)
                          for k in range(j+1, n)]

Z = linkage(condensed_dist)
dendrogram(Z)