我正在尝试编译以下聚类算法列表:
- 在 R 中实现
- 对稀疏数据矩阵(不是(不)相似矩阵)进行操作,例如由sparseMatrix函数创建的矩阵。
CV 上还有其他几个问题讨论了这个概念,但没有一个链接到可以直接在稀疏矩阵上操作的 R 包:
到目前为止,我已经在 R 中找到了一个可以对稀疏矩阵进行聚类的函数:
skmeans:球形kmeans
来自skmeans 包。kmeans 使用余弦距离。对 dgTMatrix 对象进行操作。为遗传 k 均值算法、pclust、CLUTO、gmeans 和 kmndirs 提供接口。
例子:
library(Matrix)
set.seed(42)
nrow <- 1000
ncol <- 10000
i <- rep(1:nrow, sample(5:100, nrow, replace=TRUE))
nnz <- length(i)
M1 <- sparseMatrix(i = i,
j = sample(ncol, nnz, replace = TRUE),
x = sample(0:1 , nnz, replace = TRUE),
dims = c(nrow, ncol))
M1 <- M1[rowSums(M1) != 0, colSums(M1) != 0]
library(skmeans)
library(cluster)
clust_sk <- skmeans(M1, 10, method='pclust', control=list(verbose=TRUE))
summary(silhouette(clust_sk))
以下算法得到了尊敬的提及:它们不是完全聚类算法,而是在稀疏矩阵上运行。
apriori : 关联规则挖掘
来自arules 包。对“事务”对象进行操作,可以从 ngCMatrix 对象强制执行。可用于提出建议。
例子:
library(arules)
M1_trans <- as(as(t(M1), 'ngCMatrix'), 'transactions')
rules <- apriori(M1_trans, parameter =
list(supp = 0.01, conf = 0.01, target = "rules"))
summary(rules)
irlba : 稀疏 SVD
来自irlba 包。对稀疏矩阵进行 SVD。可用于在使用传统 R 包进行聚类之前降低稀疏矩阵的维数。
例子:
library(irlba)
s <- irlba(M1, nu = 0, nv=10)
M1_reduced <- as.matrix(M1 %*% s$v)
clust_kmeans <- kmeans(M1, 10)
summary(silhouette(clust_kmeans$cluster, dist(M1_reduced)))
apcluster:亲和传播聚类
library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while
还有哪些其他功能?