1

似乎NMFR 包(v0.22)还不允许开箱即用的加权非负矩阵分解(WNMF),但欢迎使用自定义算法(此处为第 25 页)。我正在尝试,但不确定我是否在正确的轨道上。有没有人已经实现了自定义算法nmf()?任何可以让我开始使用 WNMF 的草图示例?考虑:

set.seed(0)
X=runif(10) %*% t(runif(5))
X[missing <- X<.05] = 0
W = 1*(!missing)

WNMF 忽略X(通过 的零映射)的零值,并通过按元素将两边乘以权重矩阵(如 中W)来近似,即通过最小化 Frobenius(或其他一些)范数。XWW.X ~ W.BL|W.X - W.BL|

UPDATE1:创建了目标函数,但不知道如何传递W给它。我猜这个method论点现在需要采用自定义算法,但在线示例很少。欢迎提出想法。

WNMF_ObjFn = function(model, target, W, ...) {
  sum(W*(target - fitted(model))^2, na.rm=T) 
}

library(nmf)
res = nmf(X, rank=2, objective=WNMF_ObjFn, W=W)

Error in fun(y, x, ...) : 
  unused argument (W = c(1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))
Timing stopped at: 0 0 0 
4

1 回答 1

0

我忽略了一个简单的解决方案。ls-nmf算法基本上是加权 NMF,并且已经由nmfR 包实现。

nmf(X, rank=2, method="ls-nmf", weight=W)

尽管如此,我仍然重视任何人对早期创建自定义目标函数的练习的解决方案,这(我认为)需要一个自定义算法来配合它。

于 2016-08-16T03:42:36.330 回答