使用IntNMF包,我希望在数据集中查找聚类。我的数据是一个稀疏矩阵(80-90%的零),主题在行,特征在列。由于某些原因,我得到了一个错误,我不知道为什么或如何处理它。
library(IntNMF)
set.seed(4)
n <- 10
p <- 30
m <- matrix(sample(0:3, rep=T, size = n*p,
prob = c(5,1,1,1)), ncol=p)
any(rowSums(m) == 0) # no zero rows
any(colSums(m) == 0) # no zero columns
rankMatrix(m) == n # full row rank
# finding the optimal number of clusters
opt.k <- nmf.opt.k(dat=m, n.runs=5, n.fold=2, k.range=2:4,
result=TRUE, make.plot=TRUE,
progress=TRUE)我得到的错误是:
error in svd(X) : a dimension is zero我认为稀疏性不是问题,也许是。我对NMF或IntNMF包还不是很熟悉,所以任何提示都很感谢。
发布于 2016-08-12 08:29:37
不确定IntNMF的问题是什么,但对于其他种子,以及使用nmf.opt.k的默认参数时,它也会失败。
我建议在此期间查看NMF库。
我用你的测试矩阵测试了它,它工作得很好:
> nmf(m, rank=2)
<Object of class: NMFfit>
# Model:
<Object of class:NMFstd>
features: 10
basis/rank: 2
samples: 30
# Details:
algorithm: brunet
seed: random
RNG: 403L, 20L, ..., 961813654L [05ac8381a0361b9c9d54208dfe6a12cb]
distance metric: 'KL'
residuals: 162.3778
Iterations: 480
Timing:
user system elapsed
0.047 0.000 0.046 在NMF的vignette中也有一节估计因式分解的秩(选择一个k) (2.6节)。
https://stackoverflow.com/questions/38750696
复制相似问题