2012-06-19 2 views
0

R 's glm 패키지를 사용하여 로지스틱 회귀 매개 변수를 계산하고 싶습니다. 나는 python을 사용하고 rpy2를 사용하고있다. 어떤 이유로 r을 사용하여 glm 기능을 실행할 때 rpy2를 사용하는 것보다 훨씬 빠른 결과를 얻습니다. rpy2를 사용한 계산이 왜 더 느린 지 아십니까? V2.13.1 및 RPY2 - - 내가 R을 사용하고 여기에 V2.0.8 입니다 내가 사용하고 코드 : 당신에 대해 벤치마킹하는 전체 R 코드없이rpy2를 사용할 때 느린 glm 계산

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")')) 

답변

1

를, 정확하게 지적하기가 어렵다 문제가있는 곳.

파이썬 프로파일 러를 통해 이것을 실행하여 병목 현상이 어디인지 확인할 수 있습니다.

마지막으로 rpy2의 현재 릴리스는 2.2.6입니다. API 변경 사항 외에, 2.0.8보다 더 빨리 버그가 실행됩니다 (아마도).

편집 : 귀하의 의견 나는 지금 루프에서 함수 를 호출하는 것으로 의심하고, 시간의 많은 부분 (즉, 한 번만 구축해야 할 수도 있습니다) 건물 R 벡터를 쓰인다에서.

+0

glm (y ~ v1 + v2 + ..., data = data) (이 경우 데이터는 CSV 파일에서 업로드 된 데이터 프레임이며 전송 된 데이터와 동일 함) – user5497

+0

새로운 버전을 확인하려고합니다. – user5497

+0

새 버전을 사용해 보았는데 동일한 결과 (같은 속도)를 얻었습니다. 또한 프로파일 러는 대부분의 시간이 마지막 행 (fit_res = ro.r.glm (수식 = ro.r (수식), 데이터 = 데이터, 가중치 = weights_float_vector, family = ro.r ('이항식 (링크 = "로짓")))) – user5497

관련 문제