필자가 작성한 모델의 한 단계에서 수량의 오차 함수를 계산해야합니다. 난 할 노력하고있어 다음과 같습니다 : erf
이 배열에서 작동하지 않기 때문에PyMC에서 변수에 사용자 정의 함수를 적용하는 방법은 무엇입니까?
from math import erf
import numpy as np
import pymc as pm
sig = pm.Exponential('sig', beta=0.1, size=10)
x = erf(sig ** 2)
이 실패합니다.
@pm.deterministic
def x(sig=sig):
return [erf(s) for s in sig]
을하지만 성공, 나는 그것이와 결과를 얻을 수 알고 : 나는 시도
np_erf = np.vectorize(erf)
x = np_erf((sig ** 2).value)
을하지만이 pm.Deterministic
를 생성하지 않기 때문에 이것은 올바른 방법은 아닌 것 같아 단지 np.array
일뿐입니다. 대신 어떻게 할 수 있습니까?
편집 (PyMC 버전 2.3) : 위의 예는 명확성을 위해 단순화하고, 여기에 관련된 구절이 실제 코드에서 보면 무엇입니다. 이상적으로, 나는 이것을 원합니다 :
mu = pm.LinearCombination('mu', [...], [...])
sig2 = pm.exp(mu) ** 2
f = 1/(pm.sqrt(np.pi * sig2/2.0) * erf(W/sig2))
TypeError: only length-1 arrays can be converted to Python scalars
과 함께 실패한 경우. np.vectorize
라우트
np_erf = np.vectorize(erf)
f = 1/(pm.sqrt(np.pi * sig2/2.0) * np_erf(W/sig2))
같은 오류 메시지가 표시되면서 충돌합니다. 목록의 이해는
@pm.deterministic
def f(sig2=sig2):
return [1/(pm.sqrt(np.pi * s/2.0) * erf(W/s)) for s in sig2]
같은 작동하지만 리드 나중에 코드에서 오류이 자리에서 :
@pm.observed(plot=True)
def y(value=df['dist'], sig2=sig2, f=f):
return (np.log(np.exp(-(value ** 2)/2.0/sig2) * f)).sum()
및 오류가 AttributeError: log
입니다.
숫자 근사값을 사용하여 오류 함수를 계산 했으므로 일반 설정이 올바른 것입니다. erf
함수를 직접 사용하는 것이 더 좋고 명확 할 것입니다.
아하! 다행 이네. 전자는 몇 가지 간단한 기능으로 작동하지만 전부는 아닙니다. –