Соответствие дендрограммы с номером кластера в Python scipy.cluster.hierarchy
Следующий код генерирует простую иерархическую кластерную дендрограмму с 10 листовыми узлами:
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
X = scipy.randn(10,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
P =sch.dendrogram(Z)
plt.show()
Я генерирую три плоских кластера, например:
T = sch.fcluster(Z, 3, 'maxclust')
# array([3, 1, 1, 2, 2, 2, 2, 2, 1, 2])
Однако, я хотел бы видеть метки кластера 1,2,3 на дендрограмме. Мне легко визуализировать только 10 листовых узлов и три кластера, но когда у меня 1000 узлов и 10 кластеров, я не вижу, что происходит.
Как показать номера кластеров в дендрограмме? Я открыт для других пакетов. Спасибо.
Ответы
Ответ 1
Вот решение, которое соответствующим образом раскрашивает кластеры и маркирует листья дендрограммы соответствующим именем кластера (листья помечены как "номер точки, номер кластера" ). Эти методы могут использоваться независимо или вместе. Я изменил ваш оригинальный пример, чтобы включить оба:
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
n=10
k=3
X = scipy.randn(n,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
T = sch.fcluster(Z, k, 'maxclust')
# calculate labels
labels=list('' for i in range(n))
for i in range(n):
labels[i]=str(i)+ ',' + str(T[i])
# calculate color threshold
ct=Z[-(k-1),2]
#plot
P =sch.dendrogram(Z,labels=labels,color_threshold=ct)
plt.show()