如何找到&;标记由hclust()在R中创建的簇的质心?

如何找到&;标记由hclust()在R中创建的簇的质心?,r,cluster-analysis,centroid,hclust,R,Cluster Analysis,Centroid,Hclust,我读了这个线程,但在这个线程中,答案是使用集群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 = (

我读了这个线程,但在这个线程中,答案是使用集群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
最后一行将返回以下数据表:

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))

假设得到两个簇,如何比较这两个簇的质心?如何将标签添加到集群?

但这里您使用的是data.frame的三列?这一部分我不清楚“假设我有一个数据集,有3个变量/列,第4列是响应变量(我不会在聚类过程中使用),我只想要2个聚类,使用它们的方法,我只使用第1列和第2列的列平均值(因为只有2个聚类),第3列的列平均值永远不会被使用!”嗨,文森博霍姆。因此,数据集总共有4列,第4列是响应变量,因此不包括在聚类过程中。因此,在我的示例中,我只有3列数据。这现在更有意义了吗?但我仍然不清楚=“只使用了第1列和第2列的列平均值,第3列的列平均值永远不会计算!”嗨@VincentBonhome,如果你阅读了我链接到的线程,你就会明白我在说什么。也许我应该把他们的答案抄到我的帖子上,这样你就更容易理解了?我现在就可以。我确实读过,但还是不明白。也许我是问题所在;-)但是这里您使用的是data.frame的三列?这一部分我不清楚“假设我有一个数据集,有3个变量/列,第4列是响应变量(我不会在聚类过程中使用),我只想要2个聚类,使用它们的方法,我只使用第1列和第2列的列平均值(因为只有2个聚类),第3列的列平均值永远不会被使用!”嗨,文森博霍姆。因此,数据集总共有4列,第4列是响应变量,因此不包括在聚类过程中。因此,在我的示例中,我只有3列数据。这现在更有意义了吗?但我仍然不清楚=“只使用了第1列和第2列的列平均值,第3列的列平均值永远不会计算!”嗨@VincentBonhome,如果你阅读了我链接到的线程,你就会明白我在说什么。也许我应该把他们的答案抄到我的帖子上,这样你就更容易理解了?我现在就可以。我确实读过,但还是不明白。也许我是问题所在;-)