Я работаю над кластеризацией текстового корпуса, и я хочу сделать следующее: - Разделить корпус на произвольное количество кластеров. - Затем для каждого кластера снова разделить его на несколько кластеров, пока не будет нарушен какой-либо внутренний критерий.
Теперь я реализовал способ кластеризации набора документов, но мне было интересно, была ли какая-то предварительно реализованная оптимизированная структура данных для размещения всей иерархии в Python, например матрица связи в scipy.cluster.hierarchy
длявосходящая иерархическая кластеризация?
Спасибо!
РЕДАКТИРОВАТЬ: я начал реализовывать класс, разработанный для моей проблемы, но у меня есть проблема:
class ClustNode():
def __init__(self, indices, sons=[]):
self.sons = sons
self.indices = indices
def divide(self, X):
km = KMeans(n_clusters=2, max_iter=100, n_init=1)
km.fit(X[self.indices, :])
for k in range(km.n_clusters):
subclust_ind = self.indices[km.labels_ == k]
self.sons.append(ClustNode(subclust_ind))
У меня проблема вшаг деления: когда я добавляю нового сына на основе деления Kmeans (сейчас я выбираю количество кластеров вручную) в функции divide
, новый созданный сын будет иметь свой атрибут self.sons
!Например, следующий код:
X = np.random.random(size=(100, 5))
n = len(X)
z = ClustNode(np.arange(n))
z.divide(X)
, тогда z.sons
будет содержать 2 ClustNode
объектов, но также z.sons[0].sons
и z.sons[0].sons[0].sons
и так далее ...
Iне понимаю почему, вы, ребята, можете мне помочь?