python-通过蒙特卡洛马尔可夫链的简单贝叶斯网络移植到PyMC3
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-通过蒙特卡洛马尔可夫链的简单贝叶斯网络移植到PyMC3,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1850字,纯文字阅读大概需要3分钟。
内容图文
![python-通过蒙特卡洛马尔可夫链的简单贝叶斯网络移植到PyMC3](/upload/InfoBanner/zyjiaocheng/666/ed11e4096960423b9680d7a16005459f.jpg)
我正在将Simple Bayesian Network via Monte Carlo Markov Chain的示例从PyMC2移植到PyMC3,并且可以正常工作.可以在GitHub上以下gist的pymc3_rain_sprinkler_grass_simple_bayesian_network.py文件中找到结果.
我想通过提供证据来扩展原始示例,例如知道草是湿的,然后让PyMC3给我答案,例如“给定的草是湿的,下雨的概率是多少?”.
似乎所得到的轨迹是“恒定的”,例如再也没有随机性的元素了.在主旨中查看pymc3_rain_sprinkler_grass_simple_bayesian_network_with_evidence.py并执行df.drop_duplicates()以了解我的意思.
我究竟做错了什么?
解决方法:
我设法解决了我的问题.要点是将testval设置为“ true”而不是“ false”.改善了将步进方法从Metropolis更改为BinaryGibbsMetropolis的情况.
供参考,这里是完整的解决方案.我还更新了要点.
import numpy as np
import pandas as pd
import pymc3 as pm
niter = 10000 # 10000
tune = 5000 # 5000
model = pm.Model()
with model:
tv = [1]
rain = pm.Bernoulli('rain', 0.2, shape=1, testval=tv)
sprinkler_p = pm.Deterministic('sprinkler_p', pm.math.switch(rain, 0.01, 0.40))
sprinkler = pm.Bernoulli('sprinkler', sprinkler_p, shape=1, testval=tv)
grass_wet_p = pm.Deterministic('grass_wet_p', pm.math.switch(rain, pm.math.switch(sprinkler, 0.99, 0.80), pm.math.switch(sprinkler, 0.90, 0.0)))
grass_wet = pm.Bernoulli('grass_wet', grass_wet_p, observed=np.array([1]), shape=1)
trace = pm.sample(20000, step=[pm.BinaryGibbsMetropolis([rain, sprinkler])], tune=tune, random_seed=124)
# pm.traceplot(trace)
dictionary = {
'Rain': [1 if ii[0] else 0 for ii in trace['rain'].tolist() ],
'Sprinkler': [1 if ii[0] else 0 for ii in trace['sprinkler'].tolist() ],
'Sprinkler Probability': [ii[0] for ii in trace['sprinkler_p'].tolist()],
'Grass Wet Probability': [ii[0] for ii in trace['grass_wet_p'].tolist()],
}
df = pd.DataFrame(dictionary)
p_rain = df[(df['Rain'] == 1)].shape[0] / df.shape[0]
print(p_rain)
p_sprinkler = df[(df['Sprinkler'] == 1)].shape[0] / df.shape[0]
print(p_sprinkler)
内容总结
以上是互联网集市为您收集整理的python-通过蒙特卡洛马尔可夫链的简单贝叶斯网络移植到PyMC3全部内容,希望文章能够帮你解决python-通过蒙特卡洛马尔可夫链的简单贝叶斯网络移植到PyMC3所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。