0

素晴らしい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)

誰かがここで私を助けてくれるだろうか?

4

1 に答える 1