2017-04-21 6 views
0

다음과 같이 노드 당 3 개의 상태로 베이 스넷을 설정했으며 코드에서와 같이 특정 상태에 대한 logp를 읽을 수 있습니다.pymc3 멀티 카테고리 베이지안 네트워크 - 샘플 방법?

다음으로 샘플을보고 싶습니다. 아래의 코드에서는 샘플링이 실행되지만 출력의 세 가지 상태에 대한 분포는 표시되지 않습니다. 오히려, 나는 그들이 연속 노드 인 것처럼 평균과 분산을 본다. 어떻게하면 3 개 주에서 뒷부분을 얻을 수 있습니까?

NP 수입 엠씨 수입 pylab로 pymc3, 수학

모델 = mc.Model() 모델 로

수입 NumPy와 :

rain = mc.Categorical('rain', p = np.array([0.5, 0. ,0.5])) 

sprinkler = mc.Categorical('sprinkler', p=np.array([0.33,0.33,0.34])) 

CPT = mc.math.constant(np.array([ [ [.1,.2,.7], [.2,.2,.6], [.3,.3,.4] ],\ 
            [ [.8,.1,.1], [.3,.4,.3], [.1,.1,.8] ],\ 
            [ [.6,.2,.2], [.4,.4,.2], [.2,.2,.6] ] ])) 

p_wetgrass = CPT[rain, sprinkler] 
wetgrass = mc.Categorical('wetgrass', p_wetgrass) 

#brute force search (not working) 
for val_rain in range(0,3): 
    for val_sprinkler in range(0,3): 
     for val_wetgrass in range(0,3): 
      lik = model.logp(rain=val_rain, sprinkler=val_sprinkler, wetgrass=val_wetgrass) 
      print([val_rain, val_sprinkler, val_wetgrass, lik]) 

#sampling (runs but don't understand output) 
if 1: 
    niter = 10000 # 10000 
    tune = 5000 # 5000 
    print("SAMPLING:") 
    #trace = mc.sample(20000, step=[mc.BinaryGibbsMetropolis([rain, sprinkler])], tune=tune, random_seed=124) 
    trace = mc.sample(20000, tune=tune, random_seed=124) 

    print("trace summary") 
    mc.summary(trace) 

답변

0

자신의 질문에 대답은 : 추적이 이산 포함되어 있습니까 mc.summary (trace) 함수는 연속 평균 및 분산 통계를 계산하도록 설정됩니다. 불연속 상태의 막대 그래프를 만들려면 h = hist (trace.get_values ​​(스프링클러))를 사용하십시오 .-)