我必须编写Python脚本来计算Renyi散度。这对于离散变量来说很简单,但我要处理的是连续变量。由于数字错误,我有很多问题。我已经成功地为我的样本估计了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)中的最小/最大变量。这是我的函数的定义,计算Renyi散度。问题是,这个函数的返回不等于equation,这告诉我们两个正态(高斯)分布的发散性。我知道,这是一个很难的话题,但我很乐意得到任何答案或建议。
发布于 2018-08-24 18:21:02
实际上,它等于这个方程。我在公式中放入方差而不是标准差。除此之外,它必须是α-1,而不是cont_renyi_divergence定义中的1-α。
https://stackoverflow.com/questions/51893628
复制相似问题