似乎NMF
R 包(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(或其他一些)范数。X
W
W.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