【发布时间】:2014-01-04 10:53:03
【问题描述】:
我在数据框 df1 上运行 k-means 聚类,我正在寻找一种简单的方法来计算新数据框 df2(具有相同的变量名称)中每个观察值的最近聚类中心。将 df1 视为训练集,将 df2 视为测试集;我想在训练集上进行聚类并将每个测试点分配给正确的聚类。
我知道如何使用 apply 函数和一些简单的用户定义函数来做到这一点(以前有关该主题的帖子通常提出类似的内容):
df1 <- data.frame(x=runif(100), y=runif(100))
df2 <- data.frame(x=runif(100), y=runif(100))
km <- kmeans(df1, centers=3)
closest.cluster <- function(x) {
cluster.dist <- apply(km$centers, 1, function(y) sqrt(sum((x-y)^2)))
return(which.min(cluster.dist)[1])
}
clusters2 <- apply(df2, 1, closest.cluster)
但是,我正在为一门课程准备此聚类示例,在该课程中学生将不熟悉 apply 函数,因此如果我可以使用内置函数将聚类分配给 df2,我会更喜欢。有没有方便的内置函数来查找最近的集群?
【问题讨论】:
-
向学生介绍
apply()(他们最终会反复使用)并使用您相对简单的方法似乎比向他们介绍他们必须使用的一堆不同的包更明智记住特殊场合(如果他们再次使用它们)。