首页 > 其他分享 >$\Beta$分布推导与可视化

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

时间:2023-04-14 16:00:38浏览次数:42  
标签:plt 推导 beta Beta 可视化 linspace np Gamma

$\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$函数可以用来计算实数和复数的“阶乘”。在实数域与复数域的可视化如下:

  $\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$分布表示:把概率$p$看做随机变量,固定$a,b$,发生相应事件的概率分布。为了获取$\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}$

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

联合概率密度

正整数情况

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

  其中,当以抽样概率$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$,尽管并不符合真实伯努利试验的情况,但仍可以计算。可视化如下:

 

  可以看出,$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()

参考

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

 

标签:plt,推导,beta,Beta,可视化,linspace,np,Gamma
From: https://www.cnblogs.com/qizhou/p/17314356.html

相关文章

  • U290226 公式推导
    U290226求\(\sum_{x=1}^{n}x^m\)的公式,\(n\leq20\)。先看如下柿子:\[1+2+3+\cdots+n=\frac{n\times(n+1)}{2}=\frac{n^2}{2}+\frac{n}{2}\]\[1^2+2^2+3^2+\cdots+n^2=\frac{n\times(n+1)\times(2n+1)}{6}=\frac{n^3}{......
  • [深入推导]CS231N assignment 2#4 _ 卷积神经网络 学习笔记 & 解析
    卷积神经网络基本算法实现卷积神经网络应该算是图像处理中绝对的主流了,关于算法得基本思想我在之前也学的比较懂了,这点如果不了解网上有很多教程.不过我并没有用代码亲自实现它.我们首先确定怎么编写.前面搞全连接网络总是会想着怎么去简化运算,现在我们接触了新的网络,......
  • 如何在移动端数据可视化大屏实现分析?
    本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。项目想做数据可视化,想同时在PC端、手机端查看数据怎么办?业务主要关心的数据包括:销售数据、业绩达成、同比、环比,各产品销售情况及潜客商机、未来......
  • macOS 13.4Beta 2 OpenCore 0.9.2双引导分区原版黑苹果镜像
    镜像特点文章原地址:http://www.imacosx.cn/113041.html(转载请注明出处)完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换opencore分区文件为clover引导文件)备注:此镜像仅适用与16g优盘......
  • java故障处理(二)可视化工具
    一、JConsole:Java监视与管理控制台命令行:jconsoleJConsole是一款基于JMX的可视化监视、管理工具。它的主要功能是通过JMX的MBean(ManagedBean)对系统进行信息收集和参数动态调整。JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中,......
  • 10公共操作与推导式
    公共操作与推导式公共操作操作方法功能描述操作类型+合并将两个相同类型序列进行连接字符串、列表、元组*复制将里面的数据进行复制字符串、列表、元组len获取序列长度查看序列长度字符串、列表、元组、字典,集合reversed倒置将容器里面的数据倒......
  • 可视化H5(h5py)文件
    与深度学习打交道的一般都遇见过后缀名为.h5的文件,它该如何打开?它是一种层级形式的、用于存储和组织大量数据的文件格式。想要直观可视化内容很简单,只需安装一个python第三方库即可pipinstallvitablesvitablesxxxx.h5执行该命后,就会弹出一个可视化页面,此时h5文件......
  • 决策树可视化Graphviz中文乱码
    输出svg时中文显示正常!!!fromsiximportStringIO#可视化dot_data=StringIO()tree.export_graphviz(clf,out_file=dot_data,feature_names=feature_name,class_names=target_name,filled=True,rounded=True,special_characte......
  • 零售数据可视化|人、货、场、供、财报表分享
    有没有零售数据可视化的例子,让大家看看BI零售数据可视化的效果?有,奥威BI零售标准方案提供了数十张BI数据可视化报表,覆盖人、货、场、供、财等核心业务,既可以让大家一次性体验零售数据可视化报表效果,也可以供大家下载套用,速效达成零售数据可视化分析,推动零售数字化运营决策。以下为部......
  • R语言中实现sem进行结构方程建模和路径图可视化|附代码数据
    原文链接:http://tecdat.cn/?p=23312最近我们被客户要求撰写关于结构方程建模的研究报告,包括一些图形和统计输出。结构方程模型是一个线性模型框架,它对潜变量同时进行回归方程建模引言 诸如线性回归、多元回归、路径分析、确认性因子分析和结构回归等模型都可以被认为是SEM的......