素晴らしい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)
それは魅力のように機能します。Methods は、私が使用できる可能なアルゴリズムのリストです。
nmfアルゴリズム()
[1]「ブリュネ」「KL」「リー」「フロベニウス」「オフセット」
[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 アルゴリズム - キー「key=function (x、seed、scale.factor >= 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#offset', 'siNMF', '.siNMF', 'snmf/l', 'snmf/r'.
warnings.warn(x, RRuntimeWarning)
誰かがここで私を助けてくれるだろうか?