有没有办法改变kmeans()$ cluster的索引?

时间:2017-11-28 21:40:32

标签: r cluster-analysis k-means rating

我正在使用kmeans()根据分数创建群组。目标是分配星级,以便得分最高的个人获得四颗星,得分最低的个人获得1星。我想基于kmeans()$ cluster值创建星形变量。但是,就目前而言,kmeans()$ cluster对集群进行索引,但索引与集团的相对位置不对应。

有没有办法手动分配集群索引,或者设置要按特定顺序分配的索引?我希望低分组有kmeans()$ cluster = 1,kmeans()$ cluster = 2为第二低等等。

id <- 1:500
set.seed(12); score <- runif(500, 0, 1)

dat <- data.frame(id, score)

km = kmeans(dat$score, 4, nstart=10)

plot(dat$score,
     col = c(km$cluster), 
     main="K-Means result with 4 clusters", 
     pch=20, 
     cex=0.8)

dat$star <- km$cluster

plot(dat$score, 
     dat$star, 
     main="Score v. cluster number")

2 个答案:

答案 0 :(得分:0)

是。您可以使用您想要的值的小表,并使用原始群集号来查找它们。这是一个例子。

set.seed(2017)
KM3 = kmeans(iris[,1:4], 3)
KM3$cluster

[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[39] 2 2 2 2 2 2 2 2 2 2 2 2 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[77] 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 1 1 1 3 1 1 1 1 1 1 3
[115] 3 1 1 1 1 3 1 3 1 3 1 1 3 3 1 1 1 1 1 3 1 1 1 1 3 1 1 1 3 1 1 1 3 1 1 3

群集处于尴尬的顺序。我希望低编号点在集群1中,集群2中间和集群3中的高编号点。所以我想将所有1改为3,将2改为1,将3改为2。 p>

Relabel = c(3,1,2)
KM3$cluster = Relabel[KM3$cluster]
KM3$cluster
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [39] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [77] 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 3 2
[115] 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2

只是一点额外的细节。它说Relabel = c(3,1,2)因为我希望1成为3,所以第一个位置有3个。我希望2成为1,所以第二个位置有1.我希望3成为2所以第三个位置有一个2.

答案 1 :(得分:0)

其中任何一个都会产生一个新的聚类分配向量,这样1指的是中心最小的聚类,下一个是2,依此类推。第一个仅以fitted(km)表示,而第二个以km$centerskm$cluster表示,最后一个以fitted(km)和{{1}表示}

km$center