首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非负矩阵分解(IntNMF)进行聚类:如何处理“维度为零”错误

使用非负矩阵分解(IntNMF)进行聚类:如何处理“维度为零”错误
EN

Stack Overflow用户
提问于 2016-08-04 02:01:34
回答 1查看 1.5K关注 0票数 1

使用IntNMF包,我希望在数据集中查找聚类。我的数据是一个稀疏矩阵(80-90%的零),主题在行,特征在列。由于某些原因,我得到了一个错误,我不知道为什么或如何处理它。

代码语言:javascript
复制
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)

我得到的错误是:

代码语言:javascript
复制
error in svd(X) : a dimension is zero

我认为稀疏性不是问题,也许是。我对NMF或IntNMF包还不是很熟悉,所以任何提示都很感谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-12 08:29:37

不确定IntNMF的问题是什么,但对于其他种子,以及使用nmf.opt.k的默认参数时,它也会失败。

我建议在此期间查看NMF库。

我用你的测试矩阵测试了它,它工作得很好:

代码语言:javascript
复制
> 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节)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38750696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档