2014-11-02 2 views
0

아주 간단한 질문 : @pm.stochastic을 어떻게 사용해야합니까?PyMC에서 @ pm.stochastic을 어떻게 사용해야합니까?

@pm.stochastic(observed=True) 
def loglike(value=data): 
    # some calculations that generate a numeric result 
    return -np.log(result) 

내가 최근에 시도했지만 정말 나쁜 결과를 찾았 : 나는 @pm.stochastic가 음의 로그 값을 기대 주장 일부 블로그 게시물을 읽었습니다. 또한 어떤 사람들은 -np.log 대신 np.log를 사용했음을 알게되었으므로 나는 그것을 시도하고 훨씬 잘 작동했습니다. 무엇이 실제로 @pm.stochastic을 기대하고 있습니까? 이 장식은 value 인수하고있다 무엇을 : 나는 인해 -np.log(1+t_1-t_0)

또 다른 질문으로 작성되었습니다 np.log(1/(1+t_1-t_0)) 같은 것을 사용하여 매우 인기있는 예에 사인 요구에 작은 혼란이 있었다 같은데요? 내가 이해할 수있는대로, 우리는 가능성에 들어가야하는 사전사들에게 제안 된 가치로 시작하고 @pm.stochastic이라는 아이디어는 기본적으로 샘플링 과정에서 이전 반복에 의해 생성 된 수와이 가능성을 비교하기위한 숫자를 생성합니다. 가능성은 value 인수와 사도에 대한 몇 가지 값을 받아야하지만이 그 유일한 필수 인수이기 때문에 모든 value이하고있는 경우 잘 모르겠어요 아직 내가 쓸 수 있습니다 :까지로

@pm.stochastic(observed=True) 
def loglike(value=[1]): 
    data = [3,5,1] # some data 
    # some calculations that generate a numeric result 
    return np.log(result) 

을 그리고 나는 그것이 이전과 같은 결과를 만들어 낸다고 말할 수 있습니다. 어쩌면, 장식 자에게 observed=True을 추가했기 때문에 이런 방식으로 작동합니다. 이 값을 기본적으로 observed=False이라는 확률 변수로 시도한 경우 각 반복마다 더 나은 가능성을 얻기 위해 value이 변경됩니다.

답변

2

@pm.stochastic은 데코레이터이므로 예상되는 기능입니다. 그것을 사용하는 가장 간단한 방법은 그것의 인수 중 하나로서 value을 포함하는 함수를주고, log-likelihood를 반환하는 것입니다.

모델의 매개 변수보다 먼저 사용자 정의를 정의하려면 @pm.stochastic 데코레이터를 사용해야합니다. @pm.observed 데코레이터를 사용하여 데이터에 대한 맞춤 확률을 정의해야합니다. 이 두 데코레이터는 pm.Stochastic 오브젝트를 작성합니다.이 오브젝트는 데코 레이팅하는 함수에서 이름을 가져오고 익숙한 메소드와 속성 (여기서는 a nice article on Python decorators)을 모두 갖습니다.

예 :

A A 삼각 분포에게 선험적 갖는 파라미터 a :

@pm.stochastic 
def a(value=.5): 
    if 0 <= value < 1: 
     return np.log(1.-value) 
    else: 
     return -np.inf 
여기

value=.5 변수의 초기 값으로 사용되는, 그리고 value=1로 변경하기 때문에, 예외가 발생 그것은 배포판의 지원을 벗어난 것입니다.

정규 분포가 일정한 정밀도로, a에 중심이있는 가능성 b : 여기

@pm.observed 
def b(value=[.2,.3], mu=a): 
    return pm.normal_like(value, mu, 100.) 

value=[.2,.3] 관찰 된 데이터를 나타내는 데 사용된다.

나는 이것을 a notebook that shows it all in action here에 넣었습니다.

+0

감사합니다. 당신의 대답에서'@ pm.stochastic'은 함수가 np.log 값을 반환 할 것으로 기대합니다. 이 올바른지? 첫 번째 예제 인'@ pm.stochastic'에서'a'를 샘플링하기 위해 어떤 배포판을 사용 했습니까?샘플링 프로세스가'1'을 선택하면, 변수'a'는 예외를 발생시킬 것입니까? –

+0

Q1 : 올바른, 로그 가능도 값. Q2 : 첫 번째 분포는 정규화되지 않은 삼각형 분포입니다. Q3 : 예, 대립 가능성이 - 무한하기 때문입니다. –

+0

좋아요. 고맙습니다! –

관련 문제