2015-04-16 3 views
0

Мне нужна функция для вычисления расстояния KL между двумя гистограммами в MatLab. Я пробовал этот код: http://www.mathworks.com/matlabcentral/fileexchange/13089-kldivKullback Leibler Расхождение двух гистограмм в MatLab

Однако в нем говорится, что у меня должно быть два распределения P и Q размеров n x nbins. Тем не менее, мне трудно понять, как автор пакета хочет, чтобы я организовал гистограммы. Я думал, что достаточное количество дискретных значений случайной величины будет равно числу ящиков (я бы предположил, что алгоритм будет использовать произвольную поддержку для оценки ожиданий).

Любая помощь приветствуется.

Спасибо.

+1

Вы спрашивали об этом автора? – Divakar

+0

Я не думаю, что я получу ответ: вопросы остались без ответа с прошлого года. Я надеялся, что кто-то здесь предоставил некоторое представление или ярлык для кодирования функции. – user191919

+1

Я бы не рекомендовал эту конкретную реализацию, так как она не обрабатывает нулевые вероятности должным образом. Я бы использовал [эту реализацию] (http://www.mathworks.com/matlabcentral/fileexchange/20688-kullback-leibler-divergence). Все, что вам нужно сделать, это указать два вектора вероятности равной длины; например, «P = [0,25 0,25 0,25 0,25]» и «Q = [0,1 0,2 0,3 0,4]». – eigenchris

ответ

2

Функция, с которой вы ссылаетесь, требует, чтобы две гистограммы были выровнены и, таким образом, имели такую ​​же длину NBIN x N (не NX NBIN), то есть, если N> 1, то число строк на входах должно быть равно числу ячеек в гистограммах. Если вы просто собираетесь сравнить две гистограммы (то есть, если N = 1), это не имеет особого значения, вы можете передать их в виде строк или столбцов, если вы согласны, и порядок совпадений совпадает.

Общий вызов функции выглядит следующим образом:

dists = kldiv(bins,P,Q) 

Реализация позволяет сравнение несколько гистограмм друг с другом (то есть, N> 1), в этом случае паре столбцов (с соответствующий индекс столбца) в каждом массиве сравниваются, и результат представляет собой вектор строки с расстояниями для каждой пары совпадений.

Массива bins должен быть таким же размером, как и PQ и используется для выполнения очень минимальной проверки, что входы имеют один и тот же размер, но не используется в вычислениях. Процедура ожидает, что bins будет содержать числовые метки ваших корзин, чтобы он мог проверять повторяющиеся метки битов и предупреждать вас, если повторяются, но в противном случае не использует эту информацию.

Вы можете избавиться от bins и вычислить расстояние с

KL = sum(P .* (log2(P)-log2(Q))); 

без использования Matlab Центральной версии. Однако версия, на которую вы ссылаетесь, выполняет вышеупомянутые минимальные проверки и, кроме того, позволяет вычислять два альтернативных расстояния (см. Документацию).

Версия, связанная с eigenchris, проверяет, что никакие буферы гистограммы не пусты (что привело бы к тому, что вычисление взорвалось численно), а если есть, удаляет их вклад в сумму (не уверен, что это вполне уместно - обратитесь к эксперту по предмет). Вероятно, он должен также знать точную форму формулы, в частности, отметить использование log2 выше по сравнению с натуральным логарифмом в версии, связанной с собственным сыном.

Смежные вопросы