gpt4 book ai didi

python - KL(Kullback-Leibler)距离与 Python 中的直方图平滑

转载 作者:行者123 更新时间:2023-11-28 21:21:13 28 4
gpt4 key购买 nike

我有两个(不同长度的)数字列表。使用 Python,我想用 10 个 bin 来计算直方图。然后我想用标准核(均值为 0 的高斯核,sigma=1)平滑这两个直方图然后我想计算这两个平滑直方图之间的 KL 距离。我找到了一些有关直方图计算的代码,但不确定如何应用标准内核进行平滑以及如何计算 KL 距离。请帮忙。

最佳答案

要计算直方图,您可以使用 numpy.histogram()和高斯平滑scipy.ndimage.filters.gaussian_filter() .可以找到 Kullback-Leibler 发散代码 here .

进行所需计算的计算方法如下所示:

import numpy as np
from scipy.ndimage.filters import gaussian_filter

def kl(p, q):
p = np.asarray(p, dtype=np.float)
q = np.asarray(q, dtype=np.float)

return np.sum(np.where(p != 0, p * np.log(p / q), 0))

def smoothed_hist_kl_distance(a, b, nbins=10, sigma=1):
ahist, bhist = (np.histogram(a, bins=nbins)[0],
np.histogram(b, bins=nbins)[0])

asmooth, bsmooth = (gaussian_filter(ahist, sigma),
gaussian_filter(bhist, sigma))

return kl(asmooth, bsmooth)

关于python - KL(Kullback-Leibler)距离与 Python 中的直方图平滑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056667/

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