gpt4 book ai didi

python - 解释 scipy.stats.entropy 值

转载 作者:太空狗 更新时间:2023-10-29 22:05:38 26 4
gpt4 key购买 nike

我正在尝试使用 scipy.stats.entropy 来估计两个分布之间的 Kullback–Leibler (KL) 散度。更具体地说,我想使用 KL 作为衡量标准来确定两个分布的一致性。

但是,我无法解释 KL 值。例如:

t1=numpy.random.normal(-2.5,0.1,1000)

t2=numpy.random.normal(-2.5,0.1,1000)

scipy.stats.entropy(t1,t2)

0.0015539217193737955

然后,

t1=numpy.random.normal(-2.5,0.1,1000)

t2=numpy.random.normal(2.5,0.1,1000)

scipy.stats.entropy(t1,t2)

= 0.0015908295787942181

基本上没有重叠的完全不同的分布如何具有相同的 KL 值?

t1=numpy.random.normal(-2.5,0.1,1000)

t2=numpy.random.normal(25.,0.1,1000)

scipy.stats.entropy(t1,t2)

= 0.00081111364805590595

这个给出了更小的 KL 值(即距离),我倾向于将其解释为“更一致”。

关于如何在这种情况下解释 scipy.stats.entropy(即 KL 散度距离)的任何见解?

最佳答案

numpy.random.normal(-2.5,0.1,1000) 是来自正态分布的样本。它只是随机排列的 1000 个数字。 documentation对于 entropy 说:

pk[i] is the (possibly unnormalized) probability of event i.

因此,为了获得有意义的结果,您需要将数字“对齐”,以便相同的索引对应于分布中的相同位置。在您的示例中,t1[0]t2[0] 没有关系。您的样本没有提供任何关于每个值的概率的直接信息,而这正是 KL 散度所需要的;它只是为您提供一些从分布中获取的实际值。

获得对齐值的最直接方法是在某些固定值集上评估分布的概率密度函数。为此,您需要使用 scipy.stats.norm(生成一个可以通过多种方式操作的分布对象)而不是 np.random.normal(它仅返回采样值)。这是一个例子:

t1 = stats.norm(-2.5, 0.1)
t2 = stats.norm(-2.5, 0.1)
t3 = stats.norm(-2.4, 0.1)
t4 = stats.norm(-2.3, 0.1)

# domain to evaluate PDF on
x = np.linspace(-5, 5, 100)

然后:

>>> stats.entropy(t1.pdf(x), t2.pdf(x))
-0.0
>>> stats.entropy(t1.pdf(x), t3.pdf(x))
0.49999995020647586
>>> stats.entropy(t1.pdf(x), t4.pdf(x))
1.999999900414918

您可以看到,随着分布越来越远,它们的 KL 散度会增加。 (实际上,使用您的第二个示例会产生 inf 的 KL 散度,因为它们重叠得很少。)

关于python - 解释 scipy.stats.entropy 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743201/

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