python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成
我想建立一個(gè)離散的貝葉斯網(wǎng)絡(luò)(pymc.分類(lèi))依賴(lài)于其他分類(lèi)變量的變量。
作為一個(gè)simplest的例子,假設(shè)變量a和b是范疇的,并且b依賴(lài)于a
這里嘗試用pymc編碼它(假設(shè)a取三個(gè)值中的一個(gè),b取四個(gè)值中的一個(gè))。其想法是,CPT分布將從使用pymc的數(shù)據(jù)中學(xué)習(xí)。在import numpy as np
import pymc as pm
aRange = 3
bRange = 4
#make variable a
a = pm.Categorical('a',pm.Dirichlet('aCPT',np.ones(aRange)/aRange))
#make a CPT table as an array of
CPTLines = np.empty(aRange, dtype=object)
for i in range(aRange):
CPTLines[i] = pm.Dirichlet('CPTLine%i' %i,np.ones(bRange)/bRange)
#make a deterministic node that holds the relevant CPT line (dependent on state1)
@pm.deterministic
def selectedCPTLine(CPTLines=CPTLines,a=a):
return CPTLines[a]
#make a node for variable b
b=pm.Categorical('b', selectedCPTLine)
model = pm.MCMC([a, b, selectedCPTLine])
如果我們畫(huà)這個(gè)模型,它看起來(lái)像this
但是,運(yùn)行此代碼時(shí)會(huì)出現(xiàn)錯(cuò)誤:
^{pr2}$
顯然,pymc可以將Dirichlet變量作為范疇變量的參數(shù)。
當(dāng)范疇變量得到一個(gè)Dirichlet變量作為參數(shù)時(shí),它知道期望一個(gè)k-1概率向量,假設(shè)第k個(gè)概率和向量為1。然而,當(dāng)Dirichlet變量是一個(gè)確定性變量的輸出時(shí),這個(gè)問(wèn)題就失效了,我需要做一個(gè)CPT。在
我這樣做對(duì)嗎?如何解決表征不匹配問(wèn)題?我應(yīng)該提到,我對(duì)pymc和Python比較陌生。在
總結(jié)
以上是生活随笔為你收集整理的python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 绘制中国地图并利用经纬度标
- 下一篇: oracle 索引是否失效,oracle