12

次のコードは、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()

次のように 3 つのフラット クラスターを生成します。

T = sch.fcluster(Z, 3, 'maxclust')
# array([3, 1, 1, 2, 2, 2, 2, 2, 1, 2])

ただし、樹形図でクラスター ラベル 1、2、3 を確認したいと思います。10 個のリーフ ノードと 3 つのクラスターだけを視覚化するのは簡単ですが、1000 個のノードと 10 個のクラスターがあると、何が起こっているのかわかりません。

デンドログラムにクラスター番号を表示するにはどうすればよいですか? 私は他のパッケージを受け入れています。ありがとう。

4

1 に答える 1

6

これは、クラスターを適切に色付けし、適切なクラスター名で樹状図の葉にラベルを付けるソリューションです (葉には「ポイント番号、クラスター番号」というラベルが付けられています)。これらの手法は、単独で使用することも、一緒に使用することもできます。元の例を変更して、両方を含めました。

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()
于 2013-11-04T23:29:09.070 に答える