我需要对数据行向量的相关性进行聚类,也就是说,我打算使用数据行之间变量向量之间的相关性,而不是使用单个变量作为聚类预测变量。
R中是否有一个函数可以进行基于向量的聚类。如果不是,我需要手动完成,那么输入 cmeans 或 kmeans 等函数的正确数据格式是什么?假设我有 m 个变量和 n 个数据行,m 个变量构成每个数据行的一个向量。所以我有一个用于相关或余弦的 X n 矩阵。这个矩阵可以直接插入聚类功能还是需要一定的处理?
非常感谢。
我需要对数据行向量的相关性进行聚类,也就是说,我打算使用数据行之间变量向量之间的相关性,而不是使用单个变量作为聚类预测变量。
R中是否有一个函数可以进行基于向量的聚类。如果不是,我需要手动完成,那么输入 cmeans 或 kmeans 等函数的正确数据格式是什么?假设我有 m 个变量和 n 个数据行,m 个变量构成每个数据行的一个向量。所以我有一个用于相关或余弦的 X n 矩阵。这个矩阵可以直接插入聚类功能还是需要一定的处理?
非常感谢。
您可以将相关矩阵转换为相异矩阵,例如1-cor(x)
(或2-cor(x)
或1-abs(cor(x))
)。
# Sample data
n <- 200
k <- 10
x <- matrix( rnorm(n*k), nr=k )
x <- x * row(x) # 10 dimensions, with less information in some of them
# Clustering
library(cluster)
r <- pam(1-cor(x), diss=TRUE, k=5)
# Check the results
plot(prcomp(t(x))$x[,1:2], col=r$clustering, pch=16, cex=3)
R 聚类通常有点受限。这是 R 的设计限制,因为它严重依赖低级 C 代码来提高性能。R 中包含的快速 kmeans 实现是这种低级代码的一个示例,它又与使用欧几里得距离相关。
围绕 R 的社区中有十几个可用的扩展和替代方案。例如,有 PAM、CLARA 和 CLARANS。它们不完全是k-means,但密切相关。某处应该有一个“球形k-means”,这对于余弦距离是有意义的。有整个系列的层次聚类(其扩展性相当差 - 通常O(n^3)
,有O(n^2)
一些例外 - 但在概念上很容易理解)。
如果您想探索更多聚类选项,请查看ELKI,它应该允许通过基于相关的距离进行聚类(使用各种方法,包括 k-means)(并且它还包括这样的距离函数)。不过,它不是 R,而是 Java。因此,如果您一定要使用 R,它对您不起作用。