我想使用R的glm包计算逻辑回归参数。我正在使用python并使用rpy2。 出于某种原因,当我使用R运行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")'))
答案 0 :(得分:1)
如果没有完整的R代码进行基准测试,很难准确指出问题所在。
您可能希望通过Python分析器运行此命令,以查看瓶颈在哪里(。)。
最后,rpy2的当前版本是2.2.6。除了API更改之外,它运行得更快,并且(可能)比2.0.8更少的错误。
编辑:根据您的评论我现在怀疑您正在调用您的功能 在循环中,花费大部分时间来构建R向量(可能只需要构建一次)。