example of Bayesian correlation for PyMC2을 PyMC3으로 변환하려고했지만 완전히 다른 결과를 얻습니다. 가장 중요한 점은 다변량 정규 분포의 평균은 빠르게 0으로 떨어지는 반면 PyMC2의 경우는 약 400 일 것입니다. 결과적으로, 추정 된 상관 관계는 빠르게 1로 향하는 데, 이는 잘못된 것이다.베이지안 상관 관계 (PyMC3 포함)
전체 코드는 notebook for PyMC2과 notebook for PyMC3에서 사용할 수 있습니다. 예상 된 결과를 반환하지 않습니다 명확하게
def precision(sigma, rho):
C = T.alloc(rho, 2, 2)
C = T.fill_diagonal(C, 1.)
S = T.diag(sigma)
return T.nlinalg.matrix_inverse(T.nlinalg.matrix_dot(S, C, S))
def analyze(data):
with pm.Model() as model:
# priors might be adapted here to be less flat
mu = pm.Normal('mu', mu=0., sd=0.000001, shape=2, testval=np.mean(data, axis=1))
sigma = pm.Uniform('sigma', lower=1e-6, upper=1000., shape=2, testval=np.std(data, axis=1))
rho = pm.Uniform('r', lower=-1., upper=1., testval=0)
prec = pm.Deterministic('prec', precision(sigma, rho))
mult_n = pm.MvNormal('mult_n', mu=mu, tau=prec, observed=data.T)
return model
model = analyze(data)
with model:
trace = pm.sample(50000, tune=25000, step=pm.Metropolis())
PyMC3 버전이 실행되지만 : PyMC3은 다음과 같습니다에
PyMC2의 관련 코드는 위의 코드의
def analyze(data):
# priors might be adapted here to be less flat
mu = pymc.Normal('mu', 0, 0.000001, size=2)
sigma = pymc.Uniform('sigma', 0, 1000, size=2)
rho = pymc.Uniform('r', -1, 1)
@pymc.deterministic
def precision(sigma=sigma,rho=rho):
ss1 = float(sigma[0] * sigma[0])
ss2 = float(sigma[1] * sigma[1])
rss = float(rho * sigma[0] * sigma[1])
return np.linalg.inv(np.mat([[ss1, rss], [rss, ss2]]))
mult_n = pymc.MvNormal('mult_n', mu=mu, tau=precision, value=data.T, observed=True)
model = pymc.MCMC(locals())
model.sample(50000,25000)
내 포트입니다. 어떤 도움을 주시면 감사하겠습니다.
바보 같은 실수를 생산하고 있습니다. 이 점을 지적 해 주셔서 감사합니다. – sebp