有没有办法更改 kmeans()$cluster 上的索引?
Is there a way to change the index on kmeans()$cluster?
我正在使用 kmeans() 根据分数创建组。目标是分配星级,得分最高的个人获得四颗星,得分最低的个人获得一颗星。我想根据 kmeans()$cluster 值创建 star 变量。然而,就目前而言,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")
是的。您可以只使用一小部分 table 您想要的值,然后使用原始簇号来查找它们。这是一个例子。
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。
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 表示具有最小中心的聚类,2 表示下一个,依此类推。第一个仅用 fitted(km)
表示,第二个用 km$centers
和 km$cluster
表示,最后一个用 fitted(km)
和 [=15= 表示]
fit <- fitted(km)
factor(fit, labels = 1:nlevels(factor(fit)))
rank(km$centers)[km$cluster])
match(fitted(km), sort(km$centers))
我正在使用 kmeans() 根据分数创建组。目标是分配星级,得分最高的个人获得四颗星,得分最低的个人获得一颗星。我想根据 kmeans()$cluster 值创建 star 变量。然而,就目前而言,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")
是的。您可以只使用一小部分 table 您想要的值,然后使用原始簇号来查找它们。这是一个例子。
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。
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 表示具有最小中心的聚类,2 表示下一个,依此类推。第一个仅用 fitted(km)
表示,第二个用 km$centers
和 km$cluster
表示,最后一个用 fitted(km)
和 [=15= 表示]
fit <- fitted(km)
factor(fit, labels = 1:nlevels(factor(fit)))
rank(km$centers)[km$cluster])
match(fitted(km), sort(km$centers))