## 用Python入门不明觉厉的马尔可夫链蒙特卡罗（附案例代码）

2018 年 3 月 19 日 大数据文摘 文摘菌

《写给开发者的贝叶斯方法》

https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers

https://github.com/WillKoehrsen/ai-projects/blob/master/bayesian/bayesian_inference.ipynb

• 为logistic函数的系数alpha 和beta选择初始值。

• 基于当前状态值随机分配给alpha 和beta新的值。

• 检查新的随机值是否与观察数据吻合。如果不是，舍弃掉这个值，并回到上一状态值。如果吻合，接受这个新的值作为当前状态值。

• 重复步骤2和3（重复次数提前设置好）。

• 这个算法会给出所有它所生成的alpha 和beta值。我们可以用这些值的平均数作为alpha 和beta在logistic函数中可能性最大的终值。MCMC不会返回“真实”的数值，而是函数分布的近似值。睡眠状态概率分布的最终模型将会是以alph和beta均值作为系数的logistic函数。

Python实施

`with pm.Model() as sleep_model:        # Create the alpha and beta parameters    # Assume a normal distribution    alpha = pm.Normal('alpha', mu=0.0, tau=0.05, testval=0.0)    beta = pm.Normal('beta', mu=0.0, tau=0.05, testval=0.0)        # The sleep probability is modeled as a logistic function    p = pm.Deterministic('p', 1. / (1. + tt.exp(beta * time + alpha)))        # Create the bernoulli parameter which uses observed data to inform the algorithm    observed = pm.Bernoulli('obs', p, observed=sleep_obs)        # Using Metropolis Hastings Sampling    step = pm.Metropolis()        # Draw the specified number of samples    sleep_trace = pm.sample(N_SAMPLES, step=step);`

`pm.traceplot(sleep_trace, ['alpha', 'beta'])pm.autocorrplot(sleep_trace, ['alpha', 'beta'])`

`9:30  PM probability of being asleep: 4.80%.10:00 PM probability of being asleep: 27.44%.10:30 PM probability of being asleep: 73.91%.The probability of sleep increases to above 50% at 10:14 PM.`

`Probability of being awake at 5:30 AM: 14.10%. Probability of being awake at 6:00 AM: 37.94%. Probability of being awake at 6:30 AM: 69.49%.The probability of being awake passes 50% at 6:11 AM.`

`with pm.Model() as duration_model:    # Three parameters to sample    alpha_skew = pm.Normal('alpha_skew', mu=0, tau=0.5, testval=3.0)    mu_ = pm.Normal('mu', mu=0, tau=0.5, testval=7.4)    tau_ = pm.Normal('tau', mu=0, tau=0.5, testval=1.0)        # Duration is a deterministic variable    duration_ = pm.SkewNormal('duration', alpha = alpha_skew, mu = mu_,                               sd = 1/tau_, observed = duration)        # Metropolis Hastings for sampling    step = pm.Metropolis()    duration_trace = pm.sample(N_SAMPLES, step=step)`

`Probability of at least 6.5 hours of sleep = 99.16%.Probability of at least 8.0 hours of sleep = 44.53%.Probability of at least 9.0 hours of sleep = 10.94%.The most likely duration of sleep is 7.67 hours.`

https://towardsdatascience.com/markov-chain-monte-carlo-in-python-44f7e609be98

【今日机器学习概念】

Have a Great Definition

### 相关内容

• 掌握概率论和图论的基本知识
• 使用马尔可夫网络
• 实现贝叶斯网络
• 图模型中的精确推理技术，如变量消除算法
• 了解图模型中的近似推理技术，如消息传递算法

19+阅读 · 2019年5月13日

21+阅读 · 2018年12月26日
Python开发者
7+阅读 · 2018年12月18日

3+阅读 · 2018年1月5日
36大数据
8+阅读 · 2017年12月6日

8+阅读 · 2017年8月10日

92+阅读 · 2020年6月29日

73+阅读 · 2020年5月19日

94+阅读 · 2020年5月14日

150+阅读 · 2020年3月15日

87+阅读 · 2020年3月12日

77+阅读 · 2019年10月28日

Hao Wang,Dit-Yan Yeung
40+阅读 · 2020年7月2日
Bryan Wilder,Eric Ewing,Bistra Dilkina,Milind Tambe
4+阅读 · 2019年5月31日
Edward Collins,Nikolai Rozanov,Bingbing Zhang
4+阅读 · 2018年11月5日
Sergey Edunov,Myle Ott,Michael Auli,David Grangier,Marc'Aurelio Ranzato
5+阅读 · 2018年5月24日
Hao Ge,Yin Xia,Xu Chen,Randall Berry,Ying Wu
3+阅读 · 2018年3月23日
Patrick Jähnichen,Florian Wenzel,Marius Kloft,Stephan Mandt
7+阅读 · 2018年3月21日
Pengkai Zhu,Hanxiao Wang,Tolga Bolukbasi,Venkatesh Saligrama
5+阅读 · 2018年3月19日
Zhirui Zhang,Shujie Liu,Mu Li,Ming Zhou,Enhong Chen
4+阅读 · 2018年3月1日
Arthur Mensch,Mathieu Blondel
55+阅读 · 2018年2月20日
Han Zhu,Pengye Zhang,Guozheng Li,Jie He,Han Li,Kun Gai
7+阅读 · 2018年1月8日
Top