1

そこでスレッドを読みましたが、このスレッドでは、答えはクラスター i の列平均を使用していると言っています (したがって、合計で 3 つのクラスターがある場合、i = 1,2,3; 全体で 2 つのクラスターがある場合、i = 1,2)。ここに回答をコピーして貼り付けます。

clusters = cutree(hclust(dist(USArrests)), k=5) # get 5 clusters

# function to find medoid in cluster i
clust.centroid = function(i, dat, clusters) {
    ind = (clusters == i)
    colMeans(dat[ind,])
}

sapply(unique(clusters), clust.centroid, USArrests, clusters)

              [,1]       [,2]   [,3]  [,4]  [,5]
Murder    11.47143   8.214286   5.59  14.2  2.95
Assault  263.50000 173.285714 112.40 336.0 62.70
UrbanPop  69.14286  70.642857  65.60  62.5 53.90
Rape      29.00000  22.842857  17.27  24.0 11.51

しかし、それは私には意味がありません!3 つの変数/列を含むデータ セットがあり、それらの方法を使用して 2 つのクラスターのみが必要な場合、列 1 と 2 の列平均のみが使用され、3 番目の列の列平均は計算されません!

そのようなデータテーブルを作成したとしましょう:

a = c(1,2,3,4,2,2,5,3,1)
b = c(4,5,2,2,1,1,1,1,3)
c = c(1,1,1,0,0,0,0,0,1)
abc = data.frame(a=a, b=b, c=c)
str(abc)

最後の行は、次のデータ テーブルを返します。

'data.frame':   9 obs. of  3 variables:
 $ a: num  1 2 3 4 2 2 5 3 1
 $ b: num  4 5 2 2 1 1 1 1 3
 $ c: num  1 1 1 0 0 0 0 0 1

次に、データをスケーリングします。

abc_scaled = scale(abc)

距離を計算し、階層クラスターを作成してツリーをカットします。

distance = dist(abc_scaled, method="euclidean")
hcluster = hclust(distance, method="ward.D")
clusters = cutree(hcluster, h = (max(hcluster$height) - 0.1))

結果として2つのクラスターが得られたとしましょう。2つのクラスターの重心を比較するにはどうすればよいですか? どうすればクラスターにラベルを追加できますか???

4

0 に答える 0