对对象使用 scipy 层次聚类

Using scipy hierarchical clustering with objects

我有一个对象列表,以及对象之间的距离度量。我可以使用 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)

谢谢。

您可以计算对象的压缩距离矩阵并将其传递给 scipy.cluster.hierarchy.linkage to compute the linkage matrix. Then pass the linkage matrix to, say, scipy.cluster.hierarchy.fcluster or scipy.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)