gpt4 book ai didi

algorithm - Kullback-Leibler 散度作为直方图距离函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:45 25 4
gpt4 key购买 nike

我想使用 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

最佳答案

由于您使用它来构建 Jensen-Shannon 散度,因此在计算 Kullback-Leibler 散度时可以使 qi 等于零的唯一方法是如果 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 将永远不会执行:put无论你喜欢什么(除非你要从其他地方调用 dKL ,否则将它设为零可能是个好主意)。

关于algorithm - Kullback-Leibler 散度作为直方图距离函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com