16

SciPy の階層的凝集クラスタリング メソッドを使用して、機能の amxn マトリックスをクラスタリングしていますが、クラスタリングが完了した後、結果のクラスタから重心を取得する方法がわかりません。以下は私のコードに従います:

Y = distance.pdist(features)
Z = hierarchy.linkage(Y, method = "average", metric = "euclidean")
T = hierarchy.fcluster(Z, 100, criterion = "maxclust")

特徴のマトリックスを取得し、それらの間のユークリッド距離を計算してから、それらを階層的クラスタリング メソッドに渡します。そこから、最大 100 クラスターのフラット クラスターを作成しています。

では、フラット クラスター T に基づいて、各フラット クラスターを表す 1 xn セントロイドを取得するにはどうすればよいでしょうか?

4

2 に答える 2

1

次のようなことができます ( D= 次元数):

# Sum the vectors in each cluster
lens = {}      # will contain the lengths for each cluster
centroids = {} # will contain the centroids of each cluster
for idx,clno in enumerate(T):
    centroids.setdefault(clno,np.zeros(D)) 
    centroids[clno] += features[idx,:]
    lens.setdefault(clno,0)
    lens[clno] += 1
# Divide by number of observations in each cluster to get the centroid
for clno in centroids:
    centroids[clno] /= float(lens[clno])

これにより、クラスター番号をキーとし、特定のクラスターの重心を値とする辞書が得られます。

于 2012-06-30T12:55:14.733 に答える