如何比较二维分布?
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 散度比较 概率分布 它没有另外定义。
我需要将二维分布与 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 散度比较 概率分布 它没有另外定义。