当前位置: 首页 > news >正文

beta 分布的简单理解

beta 分布的简单理解

二项分布和Beta分布


二项分布

在概率论和统计学中,二项分布是n个独立的[是/非]试验中成功的次数的离散概率分布,其中每次试验的成功概率为p。举两个例子就很容易理解二项分布的含义了:

  • 抛一次硬币出现正面的概率是0.5(p),抛10(n)次硬币,出现k次正面的概率。
  • 掷一次骰子出现六点的概率是1/6,投掷6次骰子出现k次六点的概率。

在上面的两个例子中,每次抛硬币或者掷骰子都和上次的结果无关,所以每次实验都是独立的。二项分布是一个离散分布,k的取值范围为从0到n,只有n+1种可能的结果。

n = 10
k = np.arange(n+1)
pcoin = stats.binom.pmf(k, n, 0.5)


[ 0.00097656,  0.00976563,  0.04394531,  0.1171875 ,  0.20507813, 0.24609375,  0.20507813,  0.1171875 ,  0.04394531,  0.00976563, 0.00097656 ]


下面是投掷6次骰子,出现6点的概率分布。


n = 6
k = np.arange(n+1)
pdice = stats.binom.pmf(k, n, 1.0/6)

[  3.34897977e-01,   4.01877572e-01,   2.00938786e-01,    5.35836763e-02,   8.03755144e-03,   6.43004115e-04,   2.14334705e-05]

Beta分布

对于硬币或者骰子这样的简单实验,我们事先能很准确地掌握系统成功的概率。然而通常情况下,系统成功的概率是未知的。为了测试系统的成功概率p,我们做n次试验,统计成功的次数k,于是很直观地就可以计算出p=k/n。然而由于系统成功的概率是未知的,这个公式计算出的p只是系统成功概率的最佳估计。也就是说实际上p也可能为其它的值,只是为其它的值的概率较小。

例如有某种特殊的硬币,我们事先完全无法确定它出现正面的概率。然后抛10次硬币,出现5次正面,于是我们认为硬币出现正面的概率最可能是0.5。但是即使硬币出现正面的概率为0.4,也会出现抛10次出现5次正面的情况。因此我们并不能完全确定硬币出现正面的概率就是0.5,所以p也是一个随机变量,它符合Beta分布。

Beta分布是一个连续分布,由于它描述概率p的分布,因此其取值范围为0到1。 Beta分布有α和β两个参数,其中α为成功次数加1,β为失败次数加1。

连续分布用概率密度函数描述,下面绘制实验10次,成功4次和5次时,系统成功概率p的分布情况。可以看出k=5时,曲线的峰值在p=0.5处,而k=4时,曲线的峰值在p=0.4处。
下面绘制n=10,k=4和n=20,k=8的概率分布。可以看出峰值都在p=0.4处,但是n=20的山峰更陡峭。也就是说随着实验次数的增加,p取其它值的可能就越小,对p的估计就更有信心,因此山峰也就更陡峭了。

MCMC

假设我们的知识库中没有Beta分布,如何通过模拟实验找出p的概率分布呢?pymc是一个用于统计估计的库,它可以通过 先验概率和 观测值 模拟出 后验概率 的分布。下面先解释一下这两个概率:

  • 先验概率:在贝叶斯统计中,某一不确定量p的先验概率分布是在考虑"观测数据"前,能表达p不确定性的概率分布。
  • 后验概率:在考虑相关证据或数据后所得到的不确定量p的概率分布。(概率的概率)

拿前面抛硬币的实验来说,如果在做实验之前能确信硬币出现正面的概率大概在0.5附近的话,那么它的先验概率就是一个以0.5为中心的山峰波形。而如果是某种特殊的硬币,我们对其出现正面的概率完全不了解,那么它的先验概率就是一个从0到1的平均分布。为了估计这个特殊硬币出现正面的概率,我们做了20次实验,其中出现了8次正面。通过这个实验,硬币出现正面的可能性的后验概率就如上图中的绿色曲线所示。

pymc库可以通过先验概率和观测值模拟出后验概率的分布,这对于一些复杂的系统的估计是很有用的。下面我们看看如何用pymc来对这个特殊硬币出现正面的可能性进行估计:

  • 首先pcoin是这个特殊硬币出现正面的概率,由于我们没有任何先验知识,因此它的先验概率是一个从0到1的平均分布(Uniform)。
  • 假设我们做了20次实验,其中8次为正面。根据前面的介绍可知,出现正面的次数符合二项分布(Binomial),并且这个二项分布的概率p为pcoin。这个通过value参数指定了实验的结果。因此experiment虽然是一个二项分布,但是它已经不能取其它值了。
import pymc
pcoin = pymc.Uniform("pcoin", 0, 1)
experiment = pymc.Binomial("experiment", 20, pcoin, value=8)

接下来通过MCMC对象模拟pcoin的后验概率。MCMC是Markov chain Monte Carlo(马尔科夫蒙特卡洛)的缩写,它是一种用马尔可夫链从随机分布取样的算法。通过调用MCMC对象的sample(),可以对pcoin的后验概率分布进行取样。这里30000为取样次数,5000表示不保存头5000次取样值。这时因为MCMC算法通常有一个收敛过程,我们希望只保留收敛之后的取样值。

mc = pymc.MCMC([pcoin])
mc.sample(30000, 5000)

[****************100%******************]  30000 of 30000 complete

通过MCMC对象trace()可以获得某个不确定量的取样值。下面的程序获得pcoin的25000次取样值,并用hist()显示其分布情况。由结果可知pcoin的分布与前面介绍的Beta分布一致。

pcoin_trace = mc.trace("pcoin")[:]
hist(pcoin_trace, normed=True, bins=30);
plot(p, pbeta, "r", label="n=20", lw=2)

pcoin_trace.shape
posted on 2014-12-10 15:50 cynorr 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/cyno/p/4155643.html

相关文章:

  • 二. Weinre 调试 IOS Hybrid APP
  • careercup-C和C++ 13.10
  • 冬吴相对论锦言佳句--0005.薄伽梵歌与“印度式管理”
  • 实用脚本 4 -- Makefile(不同文件下的多个可执行文件or静态库编译到同一目录下)...
  • C# dataGridView不显示默认行的解决办法
  • 微信宣布降低企业号认证门槛 1000人以下的企业无需规模证明
  • thinkphp3.2分页
  • 临时数据更改规范
  • [xPlugin] smartupload jsp图片上传
  • 【推荐】我们这一代人的困惑
  • WCF架构日记-1
  • 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
  • HOG特征-理解篇
  • 使用Hadoop的MapReduce与HDFS处理数据
  • [转]浅析360的危害 我为什么推荐卸载360
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • EOS是什么
  • ES10 特性的完整指南
  • PAT A1092
  • Puppeteer:浏览器控制器
  • Python爬虫--- 1.3 BS4库的解析器
  • Redis学习笔记 - pipline(流水线、管道)
  • scala基础语法(二)
  • 从PHP迁移至Golang - 基础篇
  • 面试总结JavaScript篇
  • 入门级的git使用指北
  • 深度学习入门:10门免费线上课程推荐
  • 一个SAP顾问在美国的这些年
  • No resource identifier found for attribute,RxJava之zip操作符
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (定时器/计数器)中断系统(详解与使用)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .mysql secret在哪_MySQL如何使用索引
  • .net Application的目录
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • ::什么意思
  • @RequestBody与@ModelAttribute
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] STL---stack与queue
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [BeginCTF]真龙之力
  • [BUUCTF]-Reverse:reverse3解析