1

使用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包还不是很熟悉,所以任何提示都表示赞赏。

4

1 回答 1

1

不确定 . 的问题是什么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 的小插图(第 2.6 节)中还有一个估计分解等级的部分(选择 a k)。

于 2016-08-12T00:29:37.060 回答