【问题标题】:Kullback-Leibler divergence as histogram distance functionKullback-Leibler 散度作为直方图距离函数
【发布时间】: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


【解决方案1】:

由于您使用它来构建 Jensen-Shannon 散度,因此在计算 Kullback-Leibler 散度时,使 qi 等于 0 的唯一方法是 pi 的值也为零。这是因为您实际上是在计算 dKL(p,m)dKL(q,m) 的平均值,其中 m=(p+q)/2。所以mi=0 意味着pi=0qi=0

dKL 的定义扩展为p log p - p log m,并使用0 log 0 = 0 的约定/限制,您会发现没有问题:m 只能在p 也是时为零。

长话短说,当你从dJS 调用dKL 时,第二个子句elif qi = 0 将永远不会被执行:把你喜欢的任何东西放在那里(可能是一个好主意,除非你是打算从其他地方打电话给dKL)。

【讨论】:

  • 正确,没想到。通过该校正,算法运行良好!
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 2012-05-23
  • 2017-12-18
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多