x_analytical_values.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:adversarial-variational-bayes 作者: gdikov 项目源码 文件源码
def analytical_value_d_sharma_mittal(distr1, distr2, alpha, beta, par1,
                                     par2):
    """ Analytical value of the Sharma-Mittal divergence.

    Parameters
    ----------    
    distr1, distr2 : str-s
                     Names of distributions.
    alpha : float, 0 < alpha \ne 1
            Parameter of the Sharma-Mittal divergence.
    beta : float, beta \ne 1
           Parameter of the Sharma-Mittal divergence.
    par1, par2 : dictionary-s
                 Parameters of distributions.
                 If (distr1,distr2) = ('normal','normal'), then distr1 =
                 N(m1,c1), where m1 = par1['mean'], c1 = par1['cov'],
                 distr2 = N(m2,c2), where m2 = par2['mean'], c2 =
                 par2['cov'].

    Returns
    -------
    D : float
        Analytical value of the Tsallis divergence.

    References
    ----------          
    Frank Nielsen and Richard Nock. A closed-form expression for the 
    Sharma-Mittal entropy of exponential families. Journal of Physics A: 
    Mathematical and Theoretical, 45:032003, 2012.

    """

    if distr1 == 'normal' and distr2 == 'normal':
        # covariance matrices, expectations:
        c1, m1 = par1['cov'], par1['mean']
        c2, m2 = par2['cov'], par2['mean']

        c = inv(alpha * inv(c1) + (1 - alpha) * inv(c2))
        diffm = m1 - m2

        # Jensen difference divergence, c2:
        j = (log(absolute(det(c1))**alpha * absolute(det(c2))**(1 -
                                                                alpha) /
                 absolute(det(c))) + alpha * (1 - alpha) *
             dot(dot(diffm, inv(c)), diffm)) / 2
        c2 = exp(-j)

        d = (c2**((1 - beta) / (1 - alpha)) - 1) / (beta - 1)

    else:
        raise Exception('Distribution=?')

    return d
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号