$\Beta$分布推导与可视化

这篇具有很好参考价值的文章主要介绍了$\Beta$分布推导与可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

$\Gamma$函数

  $\Gamma$函数(Gamma函数)是阶乘函数在实数和复数域的扩展。对于正整数$n$,阶乘函数表示为$n! = 1 \times 2 \times ... \times n$。然而,这个定义仅适用于正整数。Gamma函数的目的是将阶乘扩展到实数和复数域,从而计算实数和复数的“阶乘”。$\Gamma$函数定义如下:

$\displaystyle \Gamma(x) = \int_0^\infty t^{x-1}e^{-t} dt $

  其中,$x$是一个复数,定义域是$\{x|x\in C- Z^--\{0\}\}$,也就是除了负整数和$0$之外的所有复数。通过这个定义,$\Gamma$函数可以用来计算实数和复数的“阶乘”。在实数域与复数域的可视化如下:

$\Beta$分布推导与可视化 $\Beta$分布推导与可视化

  $\Gamma$函数具有以下性质:

  1、对于正整数$n$,有$\Gamma(n) = (n - 1)!$。这表明$\Gamma$函数在正整数上与阶乘函数相符。

  2、$\Gamma$函数满足递推关系:$\Gamma(x + 1) = x\Gamma(x)$(注意和整数阶乘的联系)。

  3、$\Gamma$函数用于定义很多常见的概率分布,如$\Gamma$分布、Beta分布和t分布等。

$\Beta$分布

基于伯努利实验的推导

  $\Beta$分布(Beta分布)与伯努利试验相关。在伯努利试验中,假设硬币朝上的概率为$p$。当抛$a+b$次硬币,硬币朝上的次数为$a$时,计算该情况的概率为

$ \displaystyle C_{a+b}^ap^a(1-p)^b$

  上式表示二项分布在这一事件(即$a+b$次实验,$a$次正面)下的概率。则$\Beta$分布表示:固定$a,b$,把概率$p$看做随机变量,$p$的概率密度函数。为了获取$\Beta$分布的概率密度,需要计算以上概率关于$p$的积分的归一化系数$k$,使得:

$\displaystyle k \int_0^1C_{a+b}^ap^a(1-p)^b  dp=1$

  推导出

$\displaystyle k =\left(\int_0^1C_{a+b}^ap^a(1-p)^b dp\right)^{-1}=a+b+1 $

  以上积分我不会算,但是可以通过以下程序来验证。

from scipy.special import comb

def Int(func, l, h, n=1000): #模拟定积分
    a = np.linspace(l, h, n)
    return func(a).sum()*(h-l)/n
a, b = 5, 2 #取任意自然数
k = a + b + 1
def func(x):
    return comb(a+b, a) * (x**a) *((1-x)**b)
Int(func, 0, 1) * k # = 1

  获得概率密度函数:

$ \begin{align} f(p; a, b)&=(a+b+1)C_{a+b}^ap^a(1-p)^b\\ &=\frac{(a+b+1)!}{a!b!}p^a(1-p)^b\\ \end{align} $

  把阶乘拓展为$\Gamma$函数,上式就变成

$ \begin{align}f(p; a, b)= \frac{\Gamma(a+b+2)}{\Gamma(a+1)\Gamma(b+1)}p^a(1-p)^b\end{align}$

  令$a=\alpha-1,b=\beta-1,p=x$,就可以得到常见的$\Beta$分布的密度函数表示形式:

$ \begin{align}\displaystyle f(x;\alpha,\beta)=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}x^{\alpha-1}(1-x)^{\beta-1}=\frac{1}{\Beta(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}\end{align}$

  其中$\Beta(\alpha,\beta)$为$\Beta$函数,$\alpha>0,\beta>0,0<x<1$。关于均值、方差什么的这里就不赘述了。

联合概率密度

正整数情况

  关于(2)式,我们把其中的$a,b,p$都看作随机变量,再除以一个归一化系数,就可以构成这三个随机变量的联合概率密度,从而可以非常直观地理解$\Beta$分布。分别固定抽样次数$n=0,1,2,5,10,15$,可视化如下:

$\Beta$分布推导与可视化 $\Beta$分布推导与可视化 $\Beta$分布推导与可视化
$\Beta$分布推导与可视化 $\Beta$分布推导与可视化 $\Beta$分布推导与可视化

  其中,当以抽样概率$p$为条件时,在y轴上,就是离散的关于$a$的二项分布。当以$a$为条件时,在x轴上,就是连续的关于$p$的$\Beta$分布。可以观察到,当$a<b$时,$\Beta$分布左偏,否则右偏,在$n=0$时,变为均匀分布。

  此外,当在y轴方向上进行求和,可以得到$p$的边缘分布,为均匀分布;而当在x轴方向上进行积分,得到$a$的边缘分布,也是均匀分布。但感觉边缘分布似乎没有什么意义,不知理解是否正确。可视化代码如下:

import matplotlib.pyplot as plt
from scipy.special import gamma
import numpy as np
import matplotlib 
matplotlib.rcParams['font.family'] = 'Times New Roman'

def Beta(a, b, p):
    g1, g2, g3 = gamma(a+b+2), gamma(a+1), gamma(b+1)
    return g1/(g2*g3) * p**(a) * (1-p)**(b)
def BetaHot(n, samp_n = 1000):
    p = np.linspace(0, 1, samp_n)
    a = np.linspace(0, n, n+1)
    P, A = np.meshgrid(p, a)

    Z = Beta(A, n-A, P)/(n+1)
    per_width = samp_n//(n+1)
    Z1 = np.repeat(Z, per_width, 0)
    # 热力图
    plt.imshow(Z1, origin='lower', cmap='Blues')
    plt.colorbar()
    # 关于p的密度图
    for i, t in enumerate(Z):
        plt.plot(np.linspace(-0.5, samp_n-0.5, samp_n), i*per_width+per_width*t-0.5, '--', c='red')
    # 绘图设置
    plt.xlabel("p")
    plt.ylabel('a')
    old_yticks = np.linspace(per_width/2-0.5, Z1.shape[0]-0.5-per_width/2, n+1)
    plt.yticks(old_yticks, [f'{i:.0f}' for i in np.linspace(0, n, n+1)])
    old_xticks = np.linspace(-0.5, samp_n-0.5, 6)
    plt.xticks(old_xticks, [f'{i:.1f}' for i in np.linspace(0, 1, 6)])
    plt.ylim([0, samp_n+4])
    plt.title("n = a + b = %d"%n)
    plt.savefig('img/n = %d.png'%n)
    plt.show()

for n in [0, 1, 2, 5, 10, 15]:
    BetaHot(n)

一般情况

  以上可视化的是$a,b$取为正整数时$\Beta$分布的情况,即(2)式。对于更一般的情况(4)式,即取$\alpha,\beta$为大于0的实数,在(3)式中就是$a>-1,b>-1$,尽管并不符合真实伯努利试验的情况,但仍可以计算。可视化如下:

$\Beta$分布推导与可视化

$\Beta$分布推导与可视化  $\Beta$分布推导与可视化
$\Beta$分布推导与可视化 $\Beta$分布推导与可视化 $\Beta$分布推导与可视化

  可以看出,$a,b$都小于0时,密度函数会变成U形。且依旧是,$a$相比$b$越小,形状越往左偏。可视化代码如下:

import matplotlib.pyplot as plt
from scipy.special import gamma
import numpy as np
import matplotlib 
matplotlib.rcParams['font.family'] = 'Times New Roman'

def Beta(a, b, p):
    g1, g2, g3 = gamma(a+b+2), gamma(a+1), gamma(b+1)
    beta = g1/(g2*g3) * p**(a) * (1-p)**(b)
    return beta

for n in [-1, 0, 1, 2, 5, 10]:
    for a in np.linspace(-0.9, n+0.9, 3):
        p = np.linspace(0.0001, 0.9999, 300)
        b = n-a
        y = Beta(a, b, p)
        plt.plot(p, y, label="a = %.1f, b = %.1f"%(a, b))
    plt.legend(loc='upper center')
    plt.ylim([-0.1, 3])
    plt.title('a + b = %.1f' % n)
    plt.savefig('img/a + b = %.1f.png' % n)
    plt.show()

关于共轭先验

  $\beta$分布是二项分布的共轭先验,我的理解:暂时不理解,看完书再回来写

狄利克雷分布

  狄利克雷分布是$\Beta$分布在高维上的推广,其概率密度函数表示为

$\displaystyle f(x_1,x_2,...,x_k;\alpha_1,\alpha_2,...,\alpha_k)=\frac{\Gamma(\sum_{i=1}^k\alpha_i)}{\prod_{i=1}^k\Gamma(\alpha_i)} \prod_{i=1}^kx_i^{\alpha_i-1}$

  也就是把伯努利实验得到的二项分布变成多项分布(比如骰子实验),相应地得到狄利克雷分布。狄利克雷分布中的正单纯形,表示多项分布每种抽样的概率之和为1,即$x_1+x_2+...+x_k=1,x_i>0$。

参考

1.  共轭先验: https://www.zhihu.com/question/41846423?sort=created

2. 狄利克雷分布:https://zhuanlan.zhihu.com/p/425388698文章来源地址https://www.toymoban.com/news/detail-413192.html

到了这里,关于$\Beta$分布推导与可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用t-SNE可视化自己的数据集分布

    自己做实验时想看一看自己数据集的分布,在网上找了一圈发现大家都是用的降维的方式查看,比较火的有PCA和t-SNE。网上很多教程都是用的Mnist数据集来演示t-SNE的可视化,但我的数据集是三维的图像,和网上的不太一样,因此记录一下自己的实验过程。 注意几点: 1、使用

    2024年02月16日
    浏览(45)
  • 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

    Taier 作为袋鼠云的开源项目之一,是一个分布式可视化的 DAG 任务调度系统。旨在降低 ETL 开发成本,提高大数据平台稳定性,让大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地

    2024年02月12日
    浏览(39)
  • 分布式可视化作业调度平台 DolphinScheduler MasterServer 设计核心要点揭秘

    点击蓝字 关注我们 作者 | 欧阳业伟 01 导读 Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度平台,致力于解决数据处理流程中错综复杂的依赖关系,使得调度系统在数据处理流程中开箱即用。自 2019 年开源以来,得益于其自身的稳定性、易用性、扩展性和

    2024年02月14日
    浏览(37)
  • 基于分布式的智联招聘数据的大屏可视化分析与预测

    项目需求分析及体系架构 1.1 项目介绍 互联网成了海量信息的载体,目前是分析市场趋势、监视竞争对手或者获取销售线索的最佳场所,数据采集以及分析能力已成为驱动业务决策的关键技能。《 计算机行业岗位招聘数据分析》旨在 利用 python 编写爬虫程序,从招聘网站上爬

    2024年02月06日
    浏览(54)
  • 【Python知识】可视化函数plt.scatter

    目录 一、说明 二、函数和参数详解 2.1 scatter函数原型 2.2 参数详解 2.3 其中散点的形状参数marker如下: 2.4 其中颜色参数c如下: 三、画图示例 3.1 关于坐标x,y和s,c 3.2 多元高斯的情况 3.3  绘制例子 3.4 绘图例3 3.5  同心绘制 3.6 有标签绘制 3.7 直线划分 3.8 曲线划分        关

    2024年02月09日
    浏览(42)
  • 7个Pandas绘图函数助力数据可视化

    大家好,在使用Pandas分析数据时,会使用Pandas函数来过滤和转换列,连接多个数据帧中的数据等操作。但是,生成图表将数据在数据帧中可视化 , 通常比仅仅查看数字更有帮助。 Pandas具有几个绘图函数,可以使用它们快速轻松地实现数据可视化,文中将介绍这些函数。 首先

    2024年01月21日
    浏览(57)
  • 使用可视化docker浏览器,轻松实现分布式web自动化

    顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以实现可视化,同时可以对浏览器进行相关的操作。 首先我们先了解什么是有头浏览器和无头浏览器的区别

    2024年02月14日
    浏览(49)
  • pandas plot函数:数据可视化的快捷通道

    一般来说,我们先用 pandas 分析数据,然后用 matplotlib 之类的可视化库来显示分析结果。 而 pandas 库中有一个强大的工具-- plot 函数,可以使数据可视化变得简单而高效。 plot 函数是 pandas 中用于数据可视化的一个重要工具, 通过 plot 函数,可以轻松地将 DataFrame 或 Series 对象

    2024年03月09日
    浏览(47)
  • 完美的分布式监控系统 Prometheus与优雅的开源可视化平台 Grafana

    prometheus与grafana之间是相辅相成的关系。简而言之Grafana作为可视化的平台,平台的数据从Prometheus中取到来进行仪表盘的展示。而Prometheus这源源不断的给Grafana提供数据的支持。 Prometheus是一个开源的系统监控和报警系统,能够监控和告警各种系统,包括网络、存储、服务器和

    2024年02月07日
    浏览(46)
  • 【Python知识】可视化函数plt.scatter 一、说明

    目录 一、说明 二、函数和参数详解 2.1 scatter函数原型 2.2 参数详解 2.3 其中散点的形状参数marker如下: 2.4 其中颜色参数c如下: 三、画图示例 3.1 关于坐标x,y和s,c 3.2 多元高斯的情况 3.3  绘制例子 3.4 绘图例3 3.5  同心绘制 3.6 有标签绘制 3.7 直线划分 3.8 曲线划分        关

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包