导航

  • Introduction
  • Features
  • Install
  • Coin toss
  • Estimating mean and standard deviation of normal distribution
  • Estimating parameters of a linear regression model
  • References

Introduction

PyMC is a python module that implements Bayesian statistical models and fitting algorithms, including Markov chain Monte Carlo. Its flexibility and extensibility make it applicable to a large suite of problems. Along with core sampling functionality, PyMC includes methods for summarizing output, plotting, goodness-of-fit and convergence diagnostics.

Features

PyMC provides functionalities to make Bayesian analysis as painless as possibleQ

Install

加入-c(channel)参数安装外来源的包

conda install -c pymc pymc

有些包在conda默认的channels中不包含,比如cudatoolkit-8.0,cudnn等,这时只需要在conda install指令后加上-c anaconda即可.

Coin toss

pymc库中进行Coin Toss实验, 似然函数为binomial,使用beta函数作为先验

def coin_toss_demo():n, h = 100, 61alpha, beta = 2, 2 p = pymc.Beta('p', alpha=alpha, beta=beta) # beta分布y = pymc.Binomial('y', n=n, p=p, value=h, observed=True)m = pymc.Model([p, y])mc = pymc.MCMC(m)mc.sample(iter=11000, burn=10000)plt.hist(p.trace(), 15, histtype='step', density=True, label='post')x = np.linspace(0, 1, 100)plt.plot(x, ss.beta.pdf(x, alpha, beta), label='prior') # 先验分布, betaplt.grid(True)plt.legend(loc='best')plt.show()

使用截断正态分布作为作为先验得到结果如下

Estimating mean and standard deviation of normal distribution


X ∼ N ( μ , σ 2 ) X\sim\mathcal{N}(\mu, \sigma^2) X∼N(μ,σ2)

def es_mean_std_normal_dist():# 观测数据N = 100y = np.random.normal(loc=10, scale=2, size=N) # 产生N个期望为10, 标准差为2的N个正态样本点# 定义先验mu = pymc.Uniform('mu', lower=0, upper=100)tau = pymc.Uniform('tau', lower=0, upper=1)# 定义似然y_obs = pymc.Normal('Y_obs', mu=mu, tau=tau, value=y, observed=True)# 推断m = pymc.Model([mu, tau, y])mc = pymc.MCMC(m)mc.sample(iter=11000, burn=10000)plt.figure(figsize=(10, 4))plt.subplot(121)plt.hist(mu.trace(), 15, histtype='step', density=True, label='post')plt.legend(loc='best')plt.grid(True)plt.subplot(122)plt.hist(np.sqrt(1.0/tau.trace()), 15, histtype='step', density=True, label='post')plt.legend(loc='best')plt.grid(True)plt.show()

Estimating parameters of a linear regression model

估计简单线性回归的参数
y ∼ a x + b y\sim ax+b y∼ax+b
可以将线性模型重新表示为
y = a x + b + ε y=ax+b+\varepsilon y=ax+b+ε
从分布中采样
y ∼ N ( a x + b , σ 2 ) y\sim \mathcal{N}(ax+b, \sigma^2) y∼N(ax+b,σ2)
可以使用pymc库对参数a, bσ进行估计,在pymc2中使用精度参数 τ = 1 / σ 2 \tau=1/\sigma^2 τ=1/σ2,使用如下先验假设
{ a ∼ N ( 0 , 100 ) b ∼ N ( 0 , 100 ) τ ∼ Γ ( 0.1 , 0.1 ) \left\{ \begin{aligned} &a\sim \mathcal{N}(0, 100)\\ &b\sim \mathcal{N}(0, 100)\\ &\tau\sim \Gamma(0.1, 0.1) \end{aligned} \right. ⎩⎪⎨⎪⎧​​a∼N(0,100)b∼N(0,100)τ∼Γ(0.1,0.1)​
在程序设计中需要让pymc知道均值为关于 a , b a, b a,b和 x x x的确定的函数

def obs_plot():n = 21a, b = 6, 2sigma = 2x = np.linspace(0, 1, n)# 均值为确定的函数@pymc.deterministicdef mu(a=a, b=b, x=x): return a*x+by_obs = a*x+b+np.random.normal(0, sigma, n) # 产生观测点data = DataFrame(np.array([x, y_obs]).T, columns=['x', 'y'])data.plot(x='x', y='y', kind='scatter', s=30)plt.grid(True)plt.show()

采样结果拟合得到直线为

def obs():n = 21a, b = 6, 2sigma = 2x = np.linspace(0, 1, n)y_obs = a*x+b+np.random.normal(0, sigma, n)data = DataFrame(np.array([x, y_obs]).T, columns=['x', 'y'])return x, y_obs, datadef linear_model_es_demo():# 定义先验a = pymc.Normal('slope', mu=0, tau=1.0/10**2) # 斜率参数b = pymc.Normal('intercept', mu=0, tau=1.0/10**2) # 截距参数tau = pymc.Gamma('tau', alpha=0.1, beta=0.1) # 误差项n = 21sigma = 2x, y_obs, data = obs()# 定义似然@pymc.deterministicdef mu(a=a, b=b, x=x): return a*x+by=pymc.Normal('y', mu=mu, tau=tau, value=y_obs, observed=True)# 推断m = pymc.Model([a, b, tau, x, y])mc = pymc.MCMC(m)mc.sample(iter=11000, burn=10000)# 统计参数结果abar = a.stats()['mean']bbar = b.stats()['mean']data.plot(x='x', y='y', kind='scatter', s=30)xp = np.array([x.min(), x.max()])plt.plot(a.trace()*xp.reshape(-1, 1)+b.trace(), c='red', linewidth=0.5, alpha=0.02)plt.plot(xp, abar*xp+bbar, linewidth=2, c='red')plt.show()

使用pymc库输出模型参数

pymc.Matplot.plot(mc)

References

Documentation for PyMC2
Computational Statistics in Python
截断正态分布tf.TurncatedNormal()

【MCMC】PyMC2库进行MCMC估计线性回归参数相关推荐

  1. 【算法】05 Gibbs采样估计线性回归参数

    目的 2022/3/18,复现博客 Gibbs sampling for Bayesian linear regression in Python,实现吉布斯采样估计线性回归参数 参考资料: MCMC ...

  2. MCMC法估计动力学模型参数

    MCMC算法估计动力学模型参数步骤 1设定参数的先验分布 2通过贝斯公式确定参数后验分布的PDF 3用MCMC方法,对未知参数进行随机抽样 以上图片内容总结自曹小群<MCMC方法在生物逆问题求解 ...

  3. 概率编程库Pymc3案例之线性回归

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

  4. 在 R 中估计 GARCH 参数存在的问题

    目录 在 R 中估计 GARCH 参数存在的问题 GARCH 模型基础 估计 GARCH 参数 fGarch 参数估计的行为 结论 译后记 在 R 中估计 GARCH 参数存在的问题 本文翻译自< ...

  5. MCMC详解2——MCMC采样、M-H采样、Gibbs采样(附代码)

    MCMC是一种随机采样方法,用来处理一些复杂运算的近似求解.在HMM.LDA等模型中都有重要应用. 上一篇 MCMC详解1--蒙特卡洛方法 目录 1,马尔科夫链模型 1.1 马尔科夫链转移矩阵的性质 ...

  6. 第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数

    标题 估计噪声参数 估计噪声参数 周期噪声的参数通常是通过检测图像的傅里叶谱来估计的. 只能使用由传感器生成的图像时,可由一小片恒定的背景灰度来估计PDF的参数. 来自图像条带的数据的最简单用途是,计 ...

  7. excel计算二元线性回归_用人话讲明白梯度下降Gradient Descent(以求解多元线性回归参数为例)...

    文章目录 1.梯度 2.多元线性回归参数求解 3.梯度下降 4.梯度下降法求解多元线性回归 梯度下降算法在机器学习中出现频率特别高,是非常常用的优化算法. 本文借多元线性回归,用人话解释清楚梯度下降的 ...

  8. matlab2018中变压器模块,利用MATLAB中Sim+Power+Systems模库时变压器模型的参数计算及其仿真结果比较...

    [实例简介] 变压器模型 matlab 仿真 参数计算 第21卷第1期向秋风,等:利用 MATLAB中 Sim Power System模库时变压器模型的参数计算及其仿真结果比较 17 其标幺值:R= ...

  9. 贝叶斯估计(概率密度函数的估计的参数方法)

    接上一篇文章:最大似估计 贝叶斯估计:    参数估计   是最随机变量,根据观测数据对参数的分布进行估计,还要考虑先验分布 最大似然估计:  参数估计  是未知的,根据观测数据来估计  的值. 贝叶 ...

最新文章

  1. Android之给图片添加涂鸦(文字)
  2. python 爬取贝壳网小区名称_利用python爬取贝壳网租房信息
  3. swift5 实现录音App
  4. 小学计算机制作表格教案,小学信息技术《表格的制作》教案
  5. Qt之模式、非模式、半模式对话框
  6. 生活大爆炸版石头剪刀布(洛谷-P1328)
  7. Android Studio Design界面不显示layout控件的解决方法
  8. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
  9. Javascript校验含中文的字符串长度
  10. 面向对象15:单例设计模式、main方法的使用
  11. 双人对战的球类游戏ios源码项目
  12. 2019CBA选秀大会最终结果
  13. PyCharm 的调试功能
  14. Java字符串基础语法
  15. Linux的命令回收站在哪,Trash-Cli:Linux 上的命令行回收站工具
  16. 重装win10之后谷歌chrome浏览器字体模糊的问题
  17. Maxent模型预测
  18. 华为云Stack智能进化,三大举措赋能政企深度用云
  19. 二叉树 html模板,用 DOM 与 CSS 展示二叉树
  20. 绝地求生游戏怎么转到计算机上玩,绝地求生大逃杀吃鸡游戏提示tslgame.exe 应用程序错误解决方法...

热门文章

  1. Python利用经纬度创建shpfile点图层并生成tif
  2. 词法分析——词法分析的任务
  3. Java Callable接口应用举例
  4. matlab 音频fft,在wav文件和FFT的matlab中的Audioread
  5. 软件测试的定义、分类、方法、生命周期
  6. C#和Java练习题--坐标求夹角
  7. VMware虚拟机网络连接的3种方式
  8. 备忘3:爬取博主热门信息以及所有热门微博的点赞的用户信息
  9. HTML5篮球弹跳运动规律,打篮球怎么练弹跳力 弹跳力怎么训练
  10. 北航3系 (自动化) 控制科学与工程 保研经历