Python中连续变量的Renyi散度

时间:2018-08-17 10:40:35

标签: python

我必须编写Python脚本来计算人散度。离散变量很简单,但是我要处理连续变量。由于数字错误,我有很多问题。我已经为样品成功估算了pdf。这是我的代码的样子:

def cont_renyi_divergence(pdf1, pdf2, alpha, minimum, maximum):
    def integrand(x):
        return ((pdf1(x))**alpha) * ((pdf2(x))**(1-alpha))
    def KL_integrand(x):
        return (pdf1(x)) * log((pdf1(x))/(pdf2(x)), e)
    if alpha == 1:
        return -integrate.quad(KL_integrand, minimum, maximum)[0]
    else:
        return (1/(1-alpha))*log(integrate.quad(integrand, minimum, maximum)[0], e)

其中pdf1和pdf2基于高斯分布(pdf1的均值和方差分别为30和5,pdf2的均值和方差分别为30和10)。最小值和最大值是样本1(pdf1)或样本2(pdf2)中的最小/最大变量。这是我的函数的定义,该函数计算出仁义散度。问题是该函数的返回值不等于equation,这告诉我们两个正态(高斯)分布的发散。我知道,这是一个很难的话题,但是我很乐意提供任何答案或建议。

1 个答案:

答案 0 :(得分:1)

实际上,它等于等式。我将方差而不是标准差放在公式中。除此之外,在cont_renyi_divergence定义中它必须是alpha-1而不是1-alpha。