熵的显着性检验?

机器算法验证 假设检验 多项分布
2022-04-05 17:04:43

有没有办法测试给定频率表的熵差异?

例如,假设我们有骰子 1 和骰子 2,

我们对它们进行了实验,它们看起来像

  die 1
  num.    1  2  3  4  5  6
  freq    6  7  3  5  2  1

  die 2
  num.    1  2  3  4  5  6
  freq    3  4  2  1  1  2

问题是骰子 1 和骰子 2 的熵是否不同。

我认为列联表的卡方检验会起作用,但是在两个类别的概率可以互换的方面,熵又是不同的。

我的意思是具有相同的熵!Pr(X=H)=0.2,Pr(X=F)=0.8Pr(X=F)=0.2,Pr(X=H)=0.8

所以我想知道是否有任何正式的方法来测试熵是否不同1 ...

3个回答

我认为有点棘手的是:在比较两个总体是否具有相同样本均值的学生 T 检验中,您有一个零假设,即两个总体具有相同的样本均值。请注意,这是您必须指定零假设的情况,您无需指定零假设的两个均值,只需指定差异即可。因为这两个均值的实际值不会影响导致 t 数量的分布,只会影响它们的差异。

在这里,情况完全不同。两个熵都是 0 的原假设和两个熵都是其他值的原假设是非常不同的。如果熵真的为 0,那么您应该在每次测试中始终测量零熵(即方差为零)。

我会采用贝叶斯方法:假设均匀先验(关于多项分布参数,而不是熵)和测量的熵,您可以使用似然函数得出真实熵的分布。请注意,这基本上归结为关于多项式分布和频率计数的一系列问题。也就是说,您可以通过添加频率计数的所有排列的概率(因为它们都产生相同的熵)来获得多项参数的分布来解决问题。一旦你有了那个分布,你就可以把它转换成熵上的分布。

如果您为每个骰子执行一次,那么您将分配两个分布。然后,您可以获得差异的分布。您可以看到该分布远离 0 的峰值有多尖锐,这将告诉您熵的差异是否显着。

对于每个分布,将最大可能熵计算为 log2N,然后除以实际熵。使用 Z 检验测试该比率。

我同意@Nir Friedman 的观点,贝叶斯方法在这里很合适,所以我继续用 Python 实现了它。由于统一先验与多项分布共轭,我们可以在没有任何花哨的 MCMC/HMC 的情况下实现它。首先,我导入了一些库并定义了一个计算熵的函数:

import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt

def entropy(x):
  return np.sum( -x*np.log2(x) , axis=-1)

然后,我从熵的后验分布中提取蒙特卡洛样本。这是分两步完成的:

  1. 首先,请注意真正多项式比例的后验分布是狄利克雷。我们可以在 Python 中用一行代码对其进行采样:np.random.dirichlet(counts_die+1, 1000000)
  2. 根据该狄利克雷分布计算每个样本的熵

代码如下:

counts_die_1 = np.array([6,7,3,5,2,1])
counts_die_2 = np.array([3,4,2,1,1,2])
entropy_die_1 = entropy(np.random.dirichlet(counts_die_1+1, 1000000))
entropy_die_2 = entropy(np.random.dirichlet(counts_die_2+1, 1000000))

然后,我们可以绘制熵之间差异的分布:

sns.kdeplot(entropy_die_1-entropy_die_2, fill=True)
plt.axvline(0, ls="--", c="k")

# changing plot aesthetics
plt.gca().set(yticklabels=[], ylabel="", xlabel="Difference in entropy, in bits")
plt.gca().tick_params(left=False)
sns.despine(left=True)

The result looks like this:

熵之间差异的分布密度图。 分布呈钟形,峰值为零,几乎所有概率都包含在 -0.50 和 +0.50 之间。

我们没有看到熵存在差异的证据,我们可以相当肯定 (>99%) 任何此类差异都小于半比特。我们可以得到 die 1 的随机性低于 die 2 的概率,如下所示:

(entropy_die_1 < entropy_die_2).mean()

这给了我们 0.512942:非常接近 0.50,这意味着我们几乎没有证据表明骰子比另一个骰子更随机。

希望对您有所帮助!