На самом деле он равен уравнению. Я ставлю отклонение вместо стандартного отклонения в формуле. Кроме того, он должен быть альфа-1 вместо 1-альфа в определении cont_renyi_divergence.
Я должен написать скрипт 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). Это определение моей функции, которая вычисляет разницу Реньи. Проблема состоит в том, что возврат этой функции не равен уравнению , которое говорит о расходимости для двух нормальных (гауссовских) распределений. Я знаю, что это трудная тема, но я был бы рад за любой ответ или совет.