我必须编写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,这告诉我们两个正态(高斯)分布的发散。我知道,这是一个很难的话题,但是我很乐意提供任何答案或建议。
答案 0 :(得分:1)
实际上,它等于等式。我将方差而不是标准差放在公式中。除此之外,在cont_renyi_divergence定义中它必须是alpha-1而不是1-alpha。