我试图做的辉煌NMF包Python接口- https://cran.r-project.org/web/packages/NMF/NMF.pdf(因为它比Python的选项更灵活)。到现在为止还挺好。
我想出了这样的东西:
# Python rpy2
__NMF = importr("NMF")
n_comp_R = robjects.IntVector(n_components)
nmf_ro = self.__NMF.nmf(data, n_comp_R, methods, self.seed, nrun=10)
它像一种魅力。方法是我可以使用的可能算法的列表:
nmfAlgorithm()
[1]“ brunet”“ KL”“ lee”“ Frobenius”“ offset”
[6]“ nsNMF”“ ls-nmf”“ pe-nmf”“ siNMF”“ snmf / r”
[11]“ snmf / l”
另一种可能性是使用自定义算法,如NMF文档中所述
# R code
my.algorithm <- function(x, seed, param.1, param.2) {
# do something with starting point ...
# return updated starting point
return(seed)
}
res <- nmf(data, n_comp, my.algorithm)
如何使用来重现此内容rpy2
?
我已经尝试过类似的方法:
import rpy2.robjects as robjects
my_algorithm = robjects.r('''
function (x, seed, scale.factor = 1)
{
pca <- prcomp(t(x), retx = TRUE)
factorization.rank <- nbasis(seed)
cat(seed)
basis(seed) <- abs(pca$rotation[, 1:factorization.rank])
coef(seed) <- t(abs(pca$x[, 1:factorization.rank]))/scale.factor
return(seed)
}
''')
nmf_ro = __NMF.nmf(data, n_comp_R, my_algorithm.r_repr(), nrun=1)
但这并没有使魔术=(
NMF算法-键“功能=键(x,种子,比例因子> = 1)没有匹配条目”
{
pca <-prcomp(t(x),retx = TRUE)
factorization.rank <-nbasis(种子)
猫(种子)
基础(种子)<-abs(pca $ rotation [,1:factorization.rank])
coef(种子)<-t(abs(pca $ x [,1:factorization.rank]))/ scale.factor
退货(种子)
}”。
请使用以下之一:'brunet','Frobenius','KL','lee','ls-nmf','。M#brunet','nsNMF','offset','pe-nmf','。R #brunet','.R#lee','.R#nsNMF','.R#偏移量','siNMF','.siNMF','snmf / l','snmf / r'。
warnings.warn(x,RRuntimeWarning)
我想知道是否有人可以在这里帮助我?
最初的提问者在Github上的NMF项目上回答了他的问题。如此处所述,您将新算法定义为一个函数,然后使用setNMFMethod将函数添加到执行非负矩阵分解的算法注册表中,然后可以按名称进行调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句