我正在尝试编译以下群集算法列表:
- 在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))
以下算法值得一提:它们不是完全的聚类算法,而是在稀疏矩阵上运行。
先验:关联规则挖掘
从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
还有哪些其他功能?
您是说稀疏,如“大量零”还是“缺少许多值”?
—
cbeleites支持Monica 2014年
根据stats.stackexchange.com/help/dont-ask上的多个标准,这个问题似乎不合时宜:每个答案都同样有效,除了提供的答案之外,您还希望有更多答案,并且没有实际问题解决了。
—
Whuber
我意识到这个问题已经解决了,但是当我浏览类似的问题时,我浏览了所有关于此的问题;)我发现该库使用的亲和力倾向适用于稀疏矩阵:bioinf.jku.at /软件/ apcluster
—
标志着
@MarkeD非常感谢!实在太糟糕了,这里的软件建议不合时宜,因为我在网上找不到其他地方可以提出建议。
—
Zach 2015年
再次关闭了一个非常有用的问题:(如果您不知道答案,请不要投票关闭!
—
MonsterMMORPG '16