【发布时间】:2012-04-21 22:32:10
【问题描述】:
我有一组数据(4 个维度的 5000 个点),我在 R 中使用 kmeans 进行了聚类。
我想按每个聚类中的点到聚类中心的距离对它们进行排序。
很简单,数据看起来像这样(我正在使用一个子集来测试各种方法):
id Ans Acc Que Kudos
1 100 100 100 100
2 85 83 80 75
3 69 65 30 29
4 41 45 30 22
5 10 12 18 16
6 10 13 10 9
7 10 16 16 19
8 65 68 100 100
9 36 30 35 29
10 36 30 26 22
首先,我使用以下方法将数据集聚类为 2 个聚类:
(result <- kmeans(data, 2))
这将返回一个 kmeans 对象,该对象具有以下 methods: cluster, centers etc.
但我不知道如何比较每个点并生成有序列表。
其次,我尝试了另一个SO用户here建议的序列化方法
我使用这些命令:
clus <- kmeans(scale(x, scale = FALSE), centers = 3, iter.max = 50, nstart = 10)
mns <- sapply(split(x, clus$cluster), function(x) mean(unlist(x)))
result <- dat[order(order(mns)[clus$cluster]), ]
这似乎产生了一个有序列表,但如果我将它绑定到标记的集群(使用以下 cbind 命令):
result <- cbind(x[order(order(mns)[clus$cluster]), ],clus$cluster)
我得到以下结果,似乎没有正确排序:
id Ans Acc Que Kudos clus
1 3 69 65 30 29 1
2 4 41 45 30 22 1
3 5 10 12 18 16 2
4 6 10 13 10 9 2
5 7 10 16 16 19 2
6 9 36 30 35 29 2
7 10 36 30 26 22 2
8 1 100 100 100 100 1
9 2 85 83 80 75 2
10 8 65 68 100 100 2
我不想随便写命令,但要了解这种方法的工作原理。如果有人可以对此提供帮助或传播一些信息,那就太好了。
编辑:::::::::::
由于可以轻松绘制集群,我想有一种更直接的方法来获取和排列点与中心之间的距离。
上述聚类的中心(使用 k = 2 时)如下。但我不知道如何获取并将其与每个单独的点进行比较。
Ans Accep Que Kudos
1 83.33333 83.66667 93.33333 91.66667
2 30.28571 30.14286 23.57143 20.85714
注意:::::::::
我不需要 top use kmeans 但我想指定集群的数量并从这些集群中检索点的有序列表。
【问题讨论】:
-
这是一个很好的问题...检查您是否没有使用 ID 进行集群(我猜有些情况您可能想要,但不太可能)
-
酷,我不想集群 id,代表我监督。我会修改问题。谢谢..j
-
我相信
kmeans()也会返回最终的聚类中心。从那里开始,计算每个点到其集群中心的距离应该不会太难。 -
嗨@Jack Maney,你是对的,它用集群表示例如:集群表示:X.Ans X.Accep X.Ques X.Kudos 1 83.33333 83.66667 93.33333 91.66667 2 30.28571 30.14286 23.57143 20.85714 但我不知道如何访问聚类数据点来比较距离。我觉得这很简单,但我不确定如何进行。
-
您拥有数据点(即与您输入
kmeans()的数据相同)。您拥有每个集群的集群分配和中心。究竟是什么让您对计算每个点与该点的集群中心之间的距离感到困惑?
标签: r cluster-analysis k-means