0
我試圖建立一個簡單的貝葉斯網絡,其中雨水和噴灌是溼草的父母,但雨水和噴水器每個都有三個(模糊邏輯類型而不是通常的兩個布爾)狀態,而溼草有兩個狀態(真假)。我無法在pymc3文檔中的任何地方找到用於描述CPT的語法 - 我正在嘗試基於2狀態示例的以下內容,但它不是按照我認爲的方式推廣到三個狀態。任何人都可以顯示正確的方法來做到這一點? (也爲地方wetgrass有三種狀態也更普遍的情況)pymc3如何編碼多狀態離散貝葉斯網絡CPT?
rain = mc.Categorical('rain', p = np.array([0.5, 0. ,0.5]))
sprinker = mc.Categorical('sprinkler', p=np.array([0.33,0.33,0.34]))
wetgrass = mc.Categorical('wetgrass',
mc.math.switch(rain,
mc.math.switch(sprinker, 10, 1, -4),
mc.math.switch(sprinker, -20, 1, 3),
mc.math.switch(sprinker, -5, 1, -0.5)))
[給人以wetgrass定義錯誤: 爲Switch.make_node輸入號碼錯誤(GOT 4((,,,))預計3) ]
據我瞭解 - 開關是一個theano函數類似於(b?a:b)在C程序中;這只是進行雙向比較。也許可以使用像這樣的二進制開關的整個負載來設置CPT,但我真的只想給出一個3D矩陣CPT作爲BNT和其他bayes網絡庫中的輸入。目前這可能嗎?
感謝 - 這是工作到定義網絡,但是我在運行採樣和logp計算時遇到了麻煩 - 不過現在我會問這是一個單獨的問題。 –
新的問題和運行代碼,包括aseyboldt的答案是這裏:http://stackoverflow.com/questions/43540977/pymc3-mutli-category-bayesian-network-sampling-and-logp-calculate –