2017-04-21 17 views
0

私は以下のようにノードごとに3つの状態を持つBayesネットを設定しており、コードから特定の状態についてlogpを読むことができます。pymc3マルチカテゴリーベイジアンネットワーク - サンプル方法

次はそれからサンプルしたいと思います。以下のコードでは、サンプリングは実行されますが、出力の3つの状態の分布は表示されません。むしろ、私はそれらが連続ノードであるかのように平均と分散を見ます。どのように私は3つの州の後部を取得するのですか?

NP 輸入MC 輸入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(スプリンクラー))を使用します:-)

関連する問題