我有一个对象列表,以及对象之间的距离度量。我可以使用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)
谢谢。
答案 0 :(得分:1)
您可以计算对象的压缩距离矩阵,并将其传递到scipy.cluster.hierarchy.linkage
以计算链接矩阵。然后将链接矩阵传递给scipy.cluster.hierarchy.fcluster
或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)