【问题标题】:Slow glm calculation when using rpy2使用rpy2时glm计算慢
【发布时间】:2012-06-19 15:24:42
【问题描述】:

我想使用 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")'))

【问题讨论】:

    标签: python r rpy2 glm


    【解决方案1】:

    如果没有完整的 R 代码进行基准测试,就很难准确指出问题可能出在哪里。

    您可能希望通过 Python 分析器运行此程序,以查看瓶颈在哪里。

    最后,rpy2 的当前版本是 2.2.6。除了 API 更改之外,它的运行速度更快,并且(可能)比 2.0.8 更少的错误。

    编辑:从您的 cmets 我现在怀疑您正在调用您的函数 在一个循环中,大部分时间都花在构建 R 向量上(可能只需要构建一次)。

    【讨论】:

    • 我正在使用:glm(y~v1+v2+..., data=data)(在这种情况下,数据是从 CSV 文件上传的数据框,包含与被发送到python中的“train”函数。
    • 我也会尝试检查新版本
    • 我们已经尝试使用新版本并获得相同的结果(相同的速度)。此外,分析器显示大部分时间都花在最后一行 (fit_res = ro.r.glm(formula=ro.r(formula), data=data, weights=weights_float_vector, family=ro.r('binomial (link="logit")')))
    • 没有 R 代码比较,很难帮助确定原因。
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2023-03-17
    • 2018-01-19
    相关资源
    最近更新 更多