如何计算矩阵之间的 KL 散度

数据挖掘 scikit-学习 特纳
2021-10-13 21:29:17

假设有两个维度为 100x2 的矩阵,其绝对值范围为 -50 到 +50。是否可以通过将 scipy.stats 中的熵算法应用于大小为 200 的两个展平向量来确定 kl 散度?

2个回答

我想你可以。只需对两个向量进行归一化以确保它们是分布。然后你可以应用 kl 散度。请注意以下几点: - 在计算 kl-d 时需要使用非常小的值以避免被零除。换句话说,用非常小的值替换任何零值-kl-d 不是度量。Kl(AB) 不等于 KL(BA) 。如果您对它作为度量感兴趣,则必须使用对称 kl = (Kl(AB) +KL(BA) )/2

即使有可能,它也可能不会产生有意义的度量。但是,我建议要小心以下几点:

  • 概率分布应该代表概率。您不能采用任意向量并将它们视为概率分布。这里的关键是对为什么结果 X 具有 0.2(任意)概率的合理解释。“计算”概率的最简单方法是考虑它是由 N 次试验组成的实验中的发生频率。

  • 你的尺寸代表什么?展平矩阵仅意味着您现在有一个向量。拥有一个向量可能足以让您的功能运行,但可能无法为您提供有意义的衡量标准。

  • 如果向量的总和不等于 1,则 stats.entropy 会对其进行归一化。通常您会希望在管道上使用相同类型的归一化。如有必要,请务必在传递给 entropy() 之前对其进行规范化。这是熵执行的归一化:

    pk = 1.0*pk / np.sum(pk, axis=0)