代码源自:

https://github.com/PacktPublishing/Bayesian-Analysis-with-Python

===========================================================

本图可能稍微复杂一些,故给出一些说明。

由贝叶斯定理可知,先验分布乘以似然分布便得到后延分布。由于beta分布为二项分布的共轭先验,也就是说以beta分布为先验,以二项分布为似然分布,所得到的后验分布依然是一种beta分布。

具体的公式说明参见书《Bayesian Analysis with Python》。

代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
import seaborn as sns
palette = 'muted'
sns.set_palette(palette); sns.set_color_codes(palette) theta_real = 0.35
trials = [0, 1, 2, 3, 4, 8, 16, 32, 50, 150]
data = [0, 1, 1, 1, 1, 4, 6, 9, 13, 48] beta_params = [(1, 1), (0.5, 0.5), (20, 20)]
dist = stats.beta
x = np.linspace(0, 1, 100) for idx, N in enumerate(trials):
if idx == 0:
plt.subplot(4,3, 2)
else:
plt.subplot(4,3, idx+3)
y = data[idx]
for (a_prior, b_prior), c in zip(beta_params, ('b', 'r', 'g')):
p_theta_given_y = dist.pdf(x, a_prior + y, b_prior + N - y)
plt.plot(x, p_theta_given_y, c)
plt.fill_between(x, 0, p_theta_given_y, color=c, alpha=0.6) plt.axvline(theta_real, ymax=0.3, color='k')
plt.plot(0, 0, label="{:d} experiments\n{:d} heads".format(N, y), alpha=0)
plt.xlim(0,1)
plt.ylim(0,12)
plt.xlabel(r"$\theta$")
plt.legend()
plt.gca().axes.get_yaxis().set_visible(False)
plt.tight_layout()
plt.savefig('B04958_01_05.png', dpi=300, figsize=(5.5, 5.5)) plt.show()

该部分代码意思是判断一个硬币投掷后正面朝上的概率为多少。当然如果一个硬币制作时如果保证质量均匀肯定是正面朝上的概率为0.5,但是如果硬币的质量不是均匀的那么情况就不一定了,这里的背景就是如此。

如果投掷后正面100%朝上则记概率为1,如果正面100%朝向则记概率为0,本文代码中假设正面朝上的概率为0.35,也就是theta_real = 0.35,也就意味着投掷100次会有35次正面朝上。

代码中的

beta_params = [(1, 1), (0.5, 0.5), (20, 20)]

里面的每一个元组代表着一种beta先验分布中的α和β,比如(1,1)则代表着一种beta先验分布中α=1和β=1。

代码中的

trials = [0, 1, 2, 3, 4, 8, 16, 32, 50, 150]
data = [0, 1, 1, 1, 1, 4, 6, 9, 13, 48]

代表着二项分布实验的样本数据,trials意味着投掷硬币的次数,data代表着硬币正面朝上的次数,在这里该二项分布作为似然分布。

用贝叶斯的思想来解释,就是说在投掷实验开始之前我们有一个先验,也就是有个主观的猜测,这个猜测硬币正面朝上的概率其概率本身作为beta分布中的自变量,也就是说先验假设正面朝上的概率服从beta分布,而beta分布中的自变量本身取值范围为0到1,也就是说beta分布是概率的概率分布。

先验分布用beta分布表示,似然分布则服从二项分布,这样先验概率乘以似然概率便能得到后验概率,这里的后验概率仍为一种beta分布。

绘图:

从上面的绘图结果可以看出,在试验次数(投掷次数)较少的情况下先验概率的好坏对后验概率的影响最大,也就是说在试验次数(投掷次数)(似然概率相同的情况)较少的情况下好的假设(好的先验)所得到的后验概率要比坏的假设(坏的先验)所得到的后验概率要好的多;但是随着试验次数(投掷次数)的增加先验对后延的影响逐渐减小,如果试验次数(投掷次数)增加到一定程度后不同的先验对后验的影响可以小到忽略。

由于先验使用的是beta分布,似然为二项分布,所以得到的后验仍为beta分布,根据贝叶斯定理的计算可以知道单次试验后所得到的后验分布作为下次试验的先验分布这样依次累积到总的试验次数所得到的最终后验分布等于用最初的先验分布与总的试验所得的二项分布的样本数据所得到的后验分布。而之所以这里有这种单次计算累积等效于总的试验数据一次计算是因为我们这里的先验分布采用的假设为beta分布,而似然分布也就是采样的的数据服从二项分布,而beta分布与二项分布为共轭分布,因此才有这样的性质。

根据:https://www.cnblogs.com/devilmaycry812839668/p/16358979.html可知,

α=1和β=1时beta分布为均匀分布,也就是说在该种假设先验的情况下假设的是硬币正面朝上的概率服从均匀分布,也就是说先验假设硬币正面朝上的各概率取值的概率是相当的,也就是说此时假设硬币正面朝上概率为0,为0.1, 0.2,...... ,0.9, 1.0 的概率均相同。

α=1和β=1时beta分布为均匀分布,此时根据信息熵理论可知此时的先验假设是没有任何信息量的,因为均匀分布就是一种信息混杂是不具备信息量的。由此可知上图中蓝色的曲线可以看做更加贴近频率统计学的表现,也就是说蓝色曲线表示的后验分布的期望正好等于频率统计中的样本期望值。

===========================================================

python语言绘图:绘制一组以beta分布为先验,以二项分布为似然的贝叶斯后验分布图的更多相关文章

  1. Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器

    一.贝叶斯定理 贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下: P(A)是A的先验概 ...

  2. Beta分布从入门到精通

    近期一直有点小忙,可是不知道在瞎忙什么,最终有时间把Beta分布的整理弄完. 以下的内容.夹杂着英文和中文,呵呵- Beta Distribution Beta Distribution Defini ...

  3. 3.朴素贝叶斯和KNN算法的推导和python实现

    前面一个博客我们用Scikit-Learn实现了中文文本分类的全过程,这篇博客,着重分析项目最核心的部分分类算法:朴素贝叶斯算法以及KNN算法的基本原理和简单python实现. 3.1 贝叶斯公式的推 ...

  4. Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库

    1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...

  5. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...

  6. 二项分布和Beta分布

    原文为: 二项分布和Beta分布 二项分布和Beta分布 In [15]: %pylab inline import pylab as pl import numpy as np from scipy ...

  7. 基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

  8. 第二章 Python基本图形绘制

    2.1 深入理解Python语言 Python语言是通用语言 Python语言是脚本语言 Python语言是开源语言 Python语言是跨平台语言 Python语言是多模型语言 Python的特点与优 ...

  9. python使用matplotlib绘制折线图教程

    Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形.下面这篇文章主要介绍了python使用matplot ...

  10. 009 Python基本图形绘制

    目录 一.概论 二.方法论 三.实践能力 一.概论 深入理解Python语言 实例2: Python蟒蛇绘制 模块1: turtle库的使用 turtle程序语法元素分析 二.方法论 Python语言 ...

随机推荐

  1. XML文档定义的几种形式和本质区别

    XML文档定义的形式 两种定义形式:DTD.Schema DTD:数据类型定义(Data Type Definition),用以描述XML文档的文档结构,是早期的XML文档定义形式. Schema:其 ...

  2. ELKF(elasticsearch、logstash、kibana、filebeat)搭建及收集nginx日志

    1.elasticsearch 1.1.根目录下新建data文件夹 1.2.修改elasticsearch.yml文件,添加以下内容 path.data: /home/wwq/elk/elastics ...

  3. 前端 Array.sort() 源码学习

    源码地址 V8源码Array 710行开始为sort()相关 Array.sort()方法是那种排序呢? 去看源码主要是源于这个问题 // In-place QuickSort algorithm. ...

  4. k8s实战 ---- pod 基础

    如果你对k8s还不了解,可以看下前文 k8s 实战 1 ---- 初识       (https://www.cnblogs.com/jilodream/p/18245222) 什么是pod,pod在 ...

  5. Django详细笔记

    django 学习 特点 快速开发 安全性高 可伸缩性强 URL 组成部分 URL: 同意资源定位符 一个URL由以下几部分组成 scheme://host:port/path/?query-stri ...

  6. Konva 内容重叠无法触发点击事件的解决方法

    写在前面: 环境:Vue3 + Konva + vite 在绘制界面时踩坑,主要是关于 listening 属性的使用 在绘制界面时,不免出现有内容重叠的情况,这会影响事件的触发 使用设置listen ...

  7. PLSQL 无法查询带中文的WHERE条件

    今天遇到一个坑爹的问题,plsql无法查询带where条件的语句,是因为plsql中Oracle的客户端字符集和服务器上的不一样造成的,需要新增系统环境变量,特意记录下解决办法. 第一步:查询服务器上 ...

  8. 深度解读昇腾CANN内存复用技术,降低网络内存占用

    本文分享自华为云社区<深度解读昇腾CANN内存复用技术,降低网络内存占用>,作者: 昇腾CANN. 随着大模型的兴起,神经网络规模不断扩大,对内存资源的消耗也越来越高,如何降低AI算法的内 ...

  9. 全网最适合入门的面向对象编程教程:04 类和对象的 Python 实现-为自定义类添加方法(PySerial 库接收串口数据)

    全网最适合入门的面向对象编程教程:04 类和对象的 Python 实现-为自定义类添加方法(PySerial 库接收串口数据) 摘要: 本文我们主要讲解了如何为自定义类添加方法,pyseria 库的基 ...

  10. 拯救SQL Server数据库事务日志文件损坏的终极大招

    拯救SQL Server数据库事务日志文件损坏的终极大招 在数据库的日常管理中,我们不可避免的会遇到服务器突然断电(没有进行电源冗余),服务器故障或者 SQL Server 服务突然停掉, 头大的是l ...