抛硬币问题可能是贝叶斯推断中最基础的一个入门问题,该问题简单来说就是对一枚硬币出现正面朝上的概率θ进行估计。不同于MLE, MAP等估计方法求出的是一个估计值,贝叶斯分析求出的是一个后验分布(用贝叶斯公式)。

θ的先验通常选用beta分布,n次观测正面朝上次数y的似然则可以用参数为n和θ二项分布来描述。用数学表达式描述如下θ ~ Beta(α, β),y~ Bin(n, p = θ).

这里顺便多说一下为什么先验用beta分布的原因:One of them is that the beta distribution is restricted to be between 0 and 1, in the same way our parameter θ is. Another reason is its versatility. As we can see in the preceding figure, the distribution adopts several shapes, including a uniform distribution, Gaussian-like distributions, U-like distributions, and so on. A third reason is that the beta distribution is the conjugate prior of the binomial distribution (which we are using as the likelihood). A conjugate prior of a likelihood is a prior that, when used in combination with the given likelihood, returns a posterior with the same functional form as the prior. Untwisting the tongue, every time we use a beta distribution as prior and a binomial distribution as likelihood, we will get a beta as a posterior. 也就是说在这里,后验分布可以直接求出解析解 θ|y ~ Beta(α_prior + α,β_prior + N -y). 当然,使用现代计算方法(如MCMC采样),我们进行贝叶斯推断时无需考虑是否使用共轭先验。(we can use modern computational methods to solve Bayesian problems whether we choose conjugate priors or not.)

代码如下:

# -*- coding: utf-8 -*-
import pymc3 as pm
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
if __name__ == "__main__":np.random.seed(123)n_experiments = 100theta_real = 0.35  # unkwon value in a real experimentalpha_prior = 1beta_prior = 1data = stats.bernoulli.rvs(p=theta_real, size=n_experiments)data_sum = data.sum()with pm.Model() as our_first_model:# a prioritheta = pm.Beta('theta', alpha=1, beta=1)# likelihoody = pm.Bernoulli('y', p=theta, observed=data)#y = pm.Binomial('theta',n=n_experimentos, p=theta, observed=sum(datos))start = pm.find_MAP()step = pm.Metropolis()trace = pm.sample(2000, step=step, start=start,  nchains = 1)burnin = 0  # no burninchain = trace[burnin:]pm.traceplot(chain, lines={'theta':theta_real});plt.figure()    x = np.linspace(.2, .6, 1000)func = stats.beta(a =alpha_prior+data_sum, b=beta_prior+n_experiments-data_sum)y = func.pdf(x)plt.plot(x, y, 'r-', lw=3, label='True distribution')plt.hist(chain['theta'], bins=30, normed=True, label='Estimated posterior distribution')

输出(采样轨迹和推断出的后验分布直方图):

【贝叶斯分析②】抛硬币问题相关推荐

  1. 贝叶斯分析:抛硬币的概率真的是1/2吗

    前言 前面两文介绍了贝叶斯学派的思想和先验分布.后验分布的相关知识,古典频率学派认为抛硬币的概率是常数,本文从贝叶斯学派的角度看待抛硬币的概率问题.本文详细介绍了 β分布,重述贝叶斯思想,对于抛硬币的 ...

  2. 有道概率题:一个有趣的抛硬币问题

    假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关.现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个 ...

  3. bzoj4830 hnoi2017 抛硬币

    题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...

  4. 抛硬币直到若干次(k次)连续正面向上的概率

    文章目录 问题描述 说明 解答过程 问题描述 问题描述:抛一枚硬币,当出现连续的三次(或k次)正面向上的时候停止,问抛硬币的次数期望是多少? 说明 这个问题网上有很多答案,解释都不清楚,很多解释都误导 ...

  5. 抛硬币 直到连续出现两次字为止

    题目: [plain] view plaincopy 假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关.现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止 ...

  6. boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序

    boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序 实现功能 C++实现代码 实现功能 boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序 C+ ...

  7. Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数

    5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数 题目 题目概述 破题 代码 运行示例 题目 题目概述 5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示 ...

  8. 用贝叶斯来看看抛硬币的概率

    前面介绍了贝叶斯学派的思想和先验分布.后验分布的相关知识,古典频率学派认为抛硬币的概率是常数,本文从贝叶斯学派的角度看待抛硬币的概率问题.本文详细介绍了  分布,重述贝叶斯思想,对于抛硬币的概率问题作 ...

  9. 从抛硬币试验看随机游走定义的基本概念错误

    全世界只有3.14 % 的人关注了 爆炸吧知识 随机游走(Random Walk)是<随机过程>教科书中用于描述动态随机现象的一种基本随机过程,许多重要的随机过程都可由它派生出来,其理论不 ...

最新文章

  1. java Hashtable的遍历方法
  2. Dubbo架构的特点
  3. 使用 Bridge to Kubernetes 简化云端开发
  4. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!
  5. 搜狐视频怎么开启青少年模式
  6. unity anim 组件的使用
  7. C语言取反(~)简单理解
  8. java word另存为_java实现页面另存为word
  9. 微软Surface笔记本电脑进入bios界面
  10. php文字转换为图片,图片转换成文字 把图片转换成可以编辑的文字,图片文字转换成文本文字的方法...
  11. 201621123068 Week03-面向对象入门
  12. RFC(请求注解)--各种协议-标准
  13. Maya vray 3S皮肤材质球设置与材质节点连接
  14. mybatis-plus lambda表达式学习笔记
  15. 人机交互基础教程-复习总结
  16. golang lint
  17. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...
  18. SafeIterableMap
  19. post提交数据返回404错误
  20. 加拿大曼尼托巴大学计算机专业几年,加拿大曼尼托巴大学专业

热门文章

  1. ThinkPHP框架安装介绍
  2. ROM定制开发入门-第三方ROM发展现状
  3. Win11 预览体验计划空白无显示的一种解决方案
  4. [C语言界面设计]EGE图形化界面简易版教程(适合初学者)
  5. 我的DBHELPER
  6. 【WP】Chrome主题diy
  7. 华为大数据平台凭什么成为行业领跑者?
  8. [转载]使用J2WTK2.2编译和运行第一个J2ME的HelloWorld程序
  9. 计量经济学导论-现代观点
  10. [转]netstat输出内容详解