Использование иерархической кластеризации scipy с объектами - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть список объектов и метрика расстояния между объектами.Могу ли я использовать иерархическую кластеризацию 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 голосов
/ 26 ноября 2018

Вы можете вычислить сжатую матрицу расстояний ваших объектов и передать ее в 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)
...