Как получить не синглтонные идентификаторы кластера в скучной иерархической кластеризации

В соответствии с этим мы можем получить метки для не-одиночных кластеров.

Я попробовал это на простом примере.

import numpy as np
import scipy.cluster.hierarchy
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage

mat = np.array([[ 0. , 1. , 3.  ,0. ,2.  ,3.  ,1.],
 [ 1. , 0. , 3. , 1.,  1. , 2. , 2.],
 [ 3.,  3. , 0.,  3. , 3.,  3. , 4.],
 [ 0. , 1. , 3.,  0. , 2. , 3.,  1.],
 [ 2. , 1.,  3. , 2.,  0. , 1.,  3.],
 [ 3. , 2.,  3. , 3. , 1. , 0. , 3.],
 [ 1. , 2.,  4. , 1. , 3.,  3. , 0.]])

def llf(id):
    if id < n:
        return str(id)
    else:
        return '[%d %d %1.2f]' % (id, count, R[n-id,3])


linkage_matrix = linkage(mat, "complete")

dendrogram(linkage_matrix,
           p=4,
           leaf_label_func=llf,
           color_threshold=1,
           truncate_mode='lastp',
           distance_sort='ascending')

plt.show()

Что такое n и что здесь считается? На схеме, подобной следующей, мне нужно знать, кто перечислен в пунктах (3) и (2)?введите описание изображения здесь

1 ответ

Я думаю, что документ не очень ясен в этой части, и пример кода в нем даже не работает. Но ясно, что 1 означает 2-е наблюдение и (3) означает, что в этом узле есть 3 наблюдения.

Если вы хотите знать, какие 3 ак. во втором узле, если это ваш вопрос:

In [51]:
D4=dendrogram(linkage_matrix,
              color_threshold=1,
              p=4,
              truncate_mode='lastp',
              distance_sort='ascending')
D7=dendrogram(linkage_matrix,
              color_list=['g',]*7,
              p=7,
              truncate_mode='lastp',
              distance_sort='ascending', no_plot=True)  
from itertools import groupby
[list(group) for key, group in groupby(D7['ivl'],lambda x: x in D4['ivl'])]
Out[51]:
[['1'], ['6', '0', '3'], ['2'], ['4', '5']]

2-й узел содержит обс. 7-й, 1-й и 4-й, а 2-й узел содержит 5-е и 6-е наблюдения.

Другие вопросы по тегам