【贝叶斯分析②】抛硬币问题
抛硬币问题可能是贝叶斯推断中最基础的一个入门问题,该问题简单来说就是对一枚硬币出现正面朝上的概率θ进行估计。不同于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/2吗
前言 前面两文介绍了贝叶斯学派的思想和先验分布.后验分布的相关知识,古典频率学派认为抛硬币的概率是常数,本文从贝叶斯学派的角度看待抛硬币的概率问题.本文详细介绍了 β分布,重述贝叶斯思想,对于抛硬币的 ...
- 有道概率题:一个有趣的抛硬币问题
假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关.现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个 ...
- bzoj4830 hnoi2017 抛硬币
题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...
- 抛硬币直到若干次(k次)连续正面向上的概率
文章目录 问题描述 说明 解答过程 问题描述 问题描述:抛一枚硬币,当出现连续的三次(或k次)正面向上的时候停止,问抛硬币的次数期望是多少? 说明 这个问题网上有很多答案,解释都不清楚,很多解释都误导 ...
- 抛硬币 直到连续出现两次字为止
题目: [plain] view plaincopy 假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关.现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止 ...
- boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序
boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序 实现功能 C++实现代码 实现功能 boost::math模块二项式分布来预测概率 抛硬币时的正面和反面的测试程序 C+ ...
- Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数
5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数 题目 题目概述 破题 代码 运行示例 题目 题目概述 5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示 ...
- 用贝叶斯来看看抛硬币的概率
前面介绍了贝叶斯学派的思想和先验分布.后验分布的相关知识,古典频率学派认为抛硬币的概率是常数,本文从贝叶斯学派的角度看待抛硬币的概率问题.本文详细介绍了 分布,重述贝叶斯思想,对于抛硬币的概率问题作 ...
- 从抛硬币试验看随机游走定义的基本概念错误
全世界只有3.14 % 的人关注了 爆炸吧知识 随机游走(Random Walk)是<随机过程>教科书中用于描述动态随机现象的一种基本随机过程,许多重要的随机过程都可由它派生出来,其理论不 ...
最新文章
- java Hashtable的遍历方法
- Dubbo架构的特点
- 使用 Bridge to Kubernetes 简化云端开发
- python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!
- 搜狐视频怎么开启青少年模式
- unity anim 组件的使用
- C语言取反(~)简单理解
- java word另存为_java实现页面另存为word
- 微软Surface笔记本电脑进入bios界面
- php文字转换为图片,图片转换成文字 把图片转换成可以编辑的文字,图片文字转换成文本文字的方法...
- 201621123068 Week03-面向对象入门
- RFC(请求注解)--各种协议-标准
- Maya vray 3S皮肤材质球设置与材质节点连接
- mybatis-plus lambda表达式学习笔记
- 人机交互基础教程-复习总结
- golang lint
- python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...
- SafeIterableMap
- post提交数据返回404错误
- 加拿大曼尼托巴大学计算机专业几年,加拿大曼尼托巴大学专业