2013-11-01 4 views
1

(20 분 전) 오후 1시 23분 안녕, 후방 샘플링

이 pymc3을 배우려고 노력 (그래서 새로운 물건에 뛰어 배운 적이 pymc2), 나는 아주 간단한 예제가 의심/내가하려고하는 것에 대한 의사 코드. 누군가가 나를 도와 줄 수 있는지 궁금합니다. 지난 몇 시간 동안 나는 많은 진전을 이루지 못했습니다 ...

제 문제는 다소 간단한 방법으로 후부에서 샘플을 채취하는 것입니다. "x"는 벡터, "t (x)"는 벡터의 함수 (R^n -> R^n map), "D"는 관측 된 데이터 라하자. \ propto의 P (D | x)는 P (x)를

보통 베이지안 물건 | 나는

P (D X)에서 벡터 X를 샘플링하고자합니다. NUTS를 사용하여이를 수행하는 방법의 예가 훌륭합니다! 내 주요 문제는 함수 t (x)가 적절하게 작동하도록하는 것으로 보이고 모델은 후방 (이전보다는)에서 샘플을 반환해야합니다.

모든 도움말/힌트가 감사하겠습니다. 그 동안 나는 계속 물건을 시험해 볼 것입니다.

보다도,

TJ

+0

* 지금까지 시도한 것은 무엇입니까? –

답변

1

귀하의 표기는 나에게 약간의 혼란이지만, 내가 제대로 이해한다면, 당신은 가능성 번 이전을 (매개 변수와 데이터의 일부 기능)에서 샘플링합니다. 그리고 저는 그것이 전형적인 베이지안의 것에 동의합니다.

저는 베이지안 로지스틱 회귀 분석이 분석적으로 풀리지 않아 좋은 예라고 생각합니다. | (- p_i 1)^{1 - y_i}

(B y_i) = p_i^{y_i}

B ~ 정상 (0, 시그마 2 * I)

P : 우리의 모델은 다음과 같다 가정 해 봅시다 y_i 관찰하고

p_i = 1/(1 + 특급 (-z_i)) 및

z_i = B_0 + B_1 * x_i로부터

우리는 시그마 2를 알고 가정합니다. 우리는 NumPy와 배열의 x와 y로 데이터를로드 한 후, 우리는 다음과 후방에서 맛볼 수 있습니다

with pm.Model() as model: 
    #Priors 
    b0 = pm.Normal("b0", mu=0, tau=1e-6) 
    b1 = pm.Normal("b1", mu=0, tau=1e-6) 
    #Likelihood 
    yhat = pm.Bernoulli("yhat", 1/(1 + t.exp(-(b0 + b1*x))), observed=y) 
    # Sample from the posterior 
    trace = pm.sample(10000, pm.NUTS(), progressbar=False) 

전체 예를 보려면,이 iPython 노트북 체크 아웃 :

http://nbviewer.ipython.org/gist/jbencook/9295751c917941208349

pymc3을 또한 좋은 glm 구문을 가지고 있습니다. 어떻게 작동하는지 여기에서 볼 수 있습니다 :

http://jbencook.github.io/portfolio/bayesian_logistic_regression.html