马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo),简称MCMC,产生于20世纪50年代早期,是在贝叶斯理论框架下,通过计算机进行模拟的蒙特卡洛方法(Monte Carlo)。该方法将马尔科夫(Markov)过程引入到Monte Carlo模拟中,实现抽样分布随模拟的进行而改变的动态模拟,弥补了传统的蒙特卡罗积分只能静态模拟的缺陷。MCMC是一种简单有效的计算方法,在很多领域到广泛的应用,如统计物、贝叶斯(Bayes)问题、计算机问题等。
pyMC简介
PyMC是一个实现贝叶斯统计模型和马尔科夫链蒙塔卡洛采样工具拟合算法的Python库。PyMC的灵活性及可扩展性使得它能够适用于解决各种问题。除了包含核心采样功能,PyMC还包含了统计输出、绘图、拟合优度检验和收敛性诊断等方法。
安装
PyMC可以运行在Mac OS X,Linux和Windows系统中。安装一些其他预装库可以更大程度地提高PyMC的性能和功能。
本文以Linux系统安装为例进行说明。
依赖库
Python2.6及以上版本
NumPy(1.6版本及以上)
Matplotlib(1.0版本及以上)
SciPy(可选)
pyTables(可选)
pydot(可选)
IPython(可选)
nose(可选)
pip安装
pip install pymc3
依赖python3
pyMC3官方文档说明
官方文档地址
pyMC3官方API
官方API地址
示例代码
# Import relevant modules
import pymc
import numpy as np
# Some data
n = 5*np.ones(4,dtype=int)
x = np.array([-.86,-.3,-.05,.73])
# Priors on unknown parameters
alpha = pymc.Normal('alpha',mu=0,tau=.01)
beta = pymc.Normal('beta',mu=0,tau=.01)
# Arbitrary deterministic function of parameters
@pymc.deterministic
def theta(a=alpha, b=beta):
"""theta = logit^{-1}(a+b)"""
return pymc.invlogit(a+b*x)
# Binomial likelihood for data
d = pymc.Binomial('d', n=n, p=theta, value=np.array([0.,1.,3.,5.]),\
observed=True)
import pymc
import mymodel
S = pymc.MCMC(mymodel, db='pickle')
S.sample(iter=10000, burn=5000, thin=2)
pymc.Matplot.plot(S)