【发布时间】:2012-04-17 15:18:59
【问题描述】:
我想使用 Jensen-Shannon 散度作为直方图距离函数。我正在实现一个简单的图像相似性搜索,直方图是归一化的 RGB 颜色分布。
我有一个关于 Kullback-Leibler 散度公式(JS 所基于)的问题:当 Pi 或 Qi 为零时,我应该返回什么?
这是 F# 中的实现:
let dKL p q =
Array.map2 (fun pi qi -> if pi = 0. then ? // ?
elif qi = 0. then ? // ?
else pi * log (pi / qi)) p q
|> Array.sum
以及使用它的 Jensen-Shannon 距离:
let dJS p q =
let m = Array.map2 (fun pi qi -> (pi + qi) / 2.) p q
(dKL p m) / 2. + (dKL q m) / 2.
Wikipedia 表示当 pi=0 且 qi>0 时应返回 0,并且在 qi=0 时未定义,但对于直方图距离而言没有多大意义。 在这种情况下,什么值是有意义的?
编辑
这是根据 Whatang 的答案的正确版本,以供将来参考:
let dKL p q =
Array.map2 (fun pi qi -> if pi = 0. && qi = 0. then 0.
else pi * log (pi / qi)) p q
|> Array.sum
【问题讨论】:
-
我很好奇,我一直在参加一些统计夜间课程(供参考:我们正在学习 MLE/MVUE/Sufficiency/等),但我不明白你的情况可以将这个分布距离硬塞到一个关于相对频率的距离。在你说我傻之前,请记住我的知识有限。
-
除了我正在阅读的内容之外,没有一个很好的选择
pi=0 -> 0只是为了避免0 * log 0这是未定义的,而qi=0 -> undefined是因为否则你会被零除。跨度> -
在 Stats StackExchange 上有一个和你类似的问题有一个很好的答案:stats.stackexchange.com/a/14135
-
@Guvante 问题是在这些情况下什么值是有意义的。当 qi 为 0 且 pi 为 0 时没有问题,因为 1) 值相等,因此距离显然为 0,以及 2) 通常将 0 log 0 视为 0。另一方面,问题是当只有 qi 为 0 时,但正如 Whatang 所示,在这种特殊情况下永远不会发生这种情况。
-
@RitchMelton 我不是专家,但我的想法是相对频率分布与概率分布几乎相同,所以 Jensen-Shannon、Kullback-Leibler、卡方和公司没关系。我正在测试的实际实现证实了这一点,JS 工作得很好(比卡方略好)。
标签: algorithm image-processing f# statistics histogram