zoukankan      html  css  js  c++  java
  • 指数族函数

    1. Gamma函数

    1.1 Gamma函数

    Gamma函数如下:

    [公式]

    很奇怪,但可以形象理解为用一个伽马刀,对 [公式] 动了一刀,于是指数为 [公式] ,动完刀需要扶着梯子 [公式] 才能走下来(记忆,摘自QUETAL博客)。

    通过分布积分可以得到如下性质:

    [公式]
    易证明有如下性质:

    [公式] 
    其中还有几个重要的等式,这里就不证明了,有兴趣的可以查找相关资料:

    [公式] [公式] [公式] [公式]

    1.2 Gamma函数可视化

     

    import numpy as np
    from scipy.special import gamma
    import matplotlib.pyplot as plt
    import pylab
    
    fig = plt.figure(figsize=(12,8))
    # The Gamma function
    x = np.linspace(-5, 5, 1000)
    plt.plot(x, gamma(x), ls='-', c='k', label='$Gamma(x)$')
    
    # (x-1)! for x = 1, 2, ..., 6
    x2 = np.linspace(1,6,6)
    y = np.array([1, 1, 2, 6, 24, 120])
    pylab.plot(x2, y, marker='*', markersize=12, markeredgecolor='r',
               markerfacecolor='r', ls='',c='r', label='$(x-1)!$')
    
    plt.title('Gamma Function')
    plt.ylim(-50,50)
    plt.xlim(-5, 5)
    plt.xlabel('$x$')
    plt.legend()
    plt.show()

     

    fig = plt.figure(figsize=(12,8))
    # The Gamma function
    x = np.linspace(0, 15, 1000)
    plt.plot(x, np.log(gamma(x)), ls='-', c='k', label='$logGamma(x)$')
    
    
    plt.title('Log$Gamma(x)$ Function')
    plt.ylim(-1,50)
    plt.xlim(-1, 15)
    plt.xlabel('$x$')
    plt.legend()
    plt.show()

    如下函数被称为Digamma函数:

    [公式] 
    Digamma函数具有如下性质:

    [公式]

    1.3 从二项分布到Gamma函数

    对Gamma函数做个变形,可以得到如下式子:

    [公式] 
    取积分中的函数作为概率密度,就得到一个简单的Gamma分布的密度函数:

    [公式] 
    如果做一个变换 [公式] ,就得到Gamma分布的更一般形式:

    [公式] 
    其中 [公式] 称为shape parameter,主要决定了分布曲线的形状,而 [公式] 称为rate parameter或inverse scale parameter( [公式] scale parameter),主要决定曲线有多陡。

    import numpy as np
    from scipy.stats import gamma
    from matplotlib import pyplot as plt
    
    alpha_values = [1, 2, 3, 3, 3]
    beta_values = [0.5, 0.5, 0.5, 1, 2]
    color = ['b','r','g','y','m']
    x = np.linspace(1E-6, 10, 1000)
    
    fig, ax = plt.subplots(figsize=(12, 8))
    
    for k, t, c in zip(alpha_values, beta_values, color):
        dist = gamma(k, 0, t)
        plt.plot(x, dist.pdf(x), c=c, label=r'$alpha=%.1f, 	heta=%.1f$' % (k, t))
    
    plt.xlim(0, 10)
    plt.ylim(0, 2)
    
    plt.xlabel('$x$')
    plt.ylabel(r'$p(x|alpha,eta)$')
    plt.title('Gamma Distribution')
    
    plt.legend(loc=0)
    plt.show()

     

    可以发现Gamma分布的概率密度和Poisson分布在数学上的形式具有高度的一致性。参数 [公式] 的Poisson分布,概率为:

    [公式] 
    而在Gamma分布的密度函数中取 [公式] ,可以得到:

    [公式] 
    可以看到这两个分布在数学形式上是一致的,只是Poisson分布式离散的,Gamma分布式连续的,可以直观认为,Gamma分布式是Poisson分布在正实数集上连续化版本。

    我们在概率论与数理统计的课程中都学过, [公式] 分布可以看成是二项分布 [公式] 在 [公式] 条件下的极限分布:

    [公式] 
    二项分布也满足下面一个奇妙的等式:

    [公式] 
    这个分布式反应二项分布和 [公式] 分布的关系,证明后面再讲。

    我们在右等式做个变换 [公式]

    [公式] 
    上式左侧是二项分布 [公式] ,而右侧为无穷多个二项分布 [公式] 的积分求和,所以可以写为

    [公式] 
    对两边在条件 [公式] 条件下取极限,则左边有 [公式] ,而右边有 [公式] ,所以得到:

    [公式] 
    把Poisson分布展开,于是得到:

    [公式] 
    此为Poisson-Gamma duality.

    我们对上式两边取极限 [公式] ,左边是Poisson至多发生 [公式] 事件的概率, [公式] 的时候就不可能有事件再发生了,故 [公式] ,于是:

    [公式] 
    该积分式子说明 [公式] 在实数集上是一个概率分布函数,而这个函数恰好就是Gamma分布。我们继续把上式右边中的 [公式] 移到左边,于是得到:

    [公式] 
    于是我们得到了将 [公式] 表示为积分的方法。

    我们将 [公式] 进行变换下:

    [公式] 
    我们可以看到,Poisson分布的概率密度累积函数和Gamma分布的概率密度累积函数有互补的关系。

    做个小结:我们从二项分布的等式出发,同时利用二项分布的极限是Poisson分布,推导出了Gamma分布,同时把 [公式] 表示成积分形式了。

  • 相关阅读:
    leetcode 5286 网格中的最短路径
    C++ STL
    Transformer解读
    global_steps
    tensorflow中的一些语法问题
    生成器与yield关键字
    CNN神经网络一维卷积和二维卷积
    electron-builder打包后,运行的程序左上角图标不显示,桌面和状态栏的显示正常,是什么情况。
    git慢设置代理
    js使用正则表达式获取字符串中特定的字符
  • 原文地址:https://www.cnblogs.com/wqbin/p/11160220.html
Copyright © 2011-2022 走看看