如何比较二维分布?

How to compare 2D distributions?

我需要将二维分布与 KL 散度进行比较。我尝试使用 scipy.stats.entropy 但那是 returning inf.

如何设置 scipy.stats.entropy 以使用 2 个轴和 return 一个值?

我试过了:

from scipy.stats import entropy
import pandas as pd

one = pd.read_csv(file_one)
two = pd.read_csv(file_two)
pk = [list(item) for item in zip(one["X"], one["Y"])]
qk = [list(item) for item in zip(two["X"], two["Y"])]
for l in [pk, qk]:
    for i in range(len(l)):
        for j in range(len(l[i])):
            # to confirm that no values are 0 
            #(will change to a smaller value once inf is not being returned)
            if abs(l[i][j]) < 0.1:
                l[i][j] = 0.1
print(entropy(pk, qk))

打印:[inf inf]

我真正想要的是一个单一的值,但开始我需要它停止 returning ing

查看 KL 散度的方程式:

S = sum(pk * log(pk / qk), axis=0)

如果 qk 中的值为零,这将导致无穷大。由于 KL 是概率密度(即使是离散的),分布中事件的概率永远不会为零,因此您应该用非常小的值替换零。至于你的形状问题,你可以将输入展平或采用直方图。

编辑: 你也不能有负值,什么是负概率? KL 散度比较 概率分布 它没有另外定义。