0

Rのglmパッケージを使ってロジスティック回帰パラメータを計算したいです。私はpythonで作業しており、そのためにrpy2を使用しています。何らかの理由で、RI を使用して glm 関数を実行すると、rpy2 を使用するよりもはるかに高速な結果が得られます。rpy2 を使用した計算が非常に遅い理由を知っていますか? R - V2.13.1 および rpy2 - V2.0.8 を使用しています。使用しているコードは次のとおりです。

import numpy
from rpy2 import robjects as ro
import rpy2.rlike.container as rlc

def train(self, x_values, y_values, weights):
        x_float_vector = [ro.FloatVector(x) for x in numpy.array(x_values).transpose()]
        y_float_vector = ro.FloatVector(y_values)   
        weights_float_vector = ro.FloatVector(weights)
        names = ['v' + str(i) for i in xrange(len(x_float_vector))]
        d = rlc.TaggedList(x_float_vector + [y_float_vector], names + ['y'])
        data = ro.RDataFrame(d)
        formula = 'y ~ '
        for x in names:
            formula += x + '+'
        formula = formula[:-1]
        fit_res = ro.r.glm(formula=ro.r(formula), data=data, weights=weights_float_vector,  family=ro.r('binomial(link="logit")'))
4

1 に答える 1

1

ベンチマーク対象の完全な R コードがなければ、問題がどこにあるのかを正確に指摘することは困難です。

これを Python プロファイラーで実行して、ボトルネックがどこにあるかを確認することをお勧めします。

最後に、rpy2 の現在のリリースは 2.2.6 です。API の変更に加えて、2.0.8 よりも高速に実行され、(おそらく) バグが少なくなっています。

編集:あなたのコメントから、あなたが関数をループで呼び出しているのではないかと疑っています。時間の大部分はRベクトルの構築に費やされています(一度だけ構築する必要があるかもしれません)。

于 2012-06-20T10:52:32.740 に答える