0

遵循 t 分布的变量 X 的熵的封闭式解析解,在此处导出,为

在此处输入图像描述

看到python有函数scipy.special.digammascipy.special.beta,上面的公式怎么用代码实现呢?

令我困惑的是,刚才提到的函数并没有根据文档将自由度参数nu (v)作为输入。一个运行的例子会有所帮助

4

2 回答 2

1

您还可以使用多元学生 t 分布的微分熵,其中,dim 是维度,dof 是自由度,cmtx 是协方差。

import numpy as np
import scipy.special as sc
def compute_true_entropy(dim=1, dof=3, std=False):
    cmtx = np.identity(dim)
    B0 = 0.5*np.log(np.linalg.det(cmtx))
    B1 = sc.gamma((dim+dof)/2)/((sc.gamma(dof/2))*((np.pi*dof)**(dim/2)))
    B2 = ((dof+dim)/2)*(sc.digamma((dof+dim)/2) - sc.digamma((dof)/2))
    entropy = B0 - np.log(B1) + B2
   return entropy
于 2020-11-19T11:57:55.270 回答
1

根据其定义,熵由 Shanoon 定义为: 在此处输入图像描述

现在,如果将此公式应用于Student-t分布,您会注意到该公式已经包含自由度参数 ( v ): 在此处输入图像描述

作为集成的结果,您将拥有 Betta 和 Digmma 的近似值。如果你能计算,老实说我不能,你会发现这些只是作为计算的结果将v作为输入。这不在他们的定义中。

v在 1(柯西分布)和无穷大(正态分布)之间变化。

为了简化计算,我使用了以下代码:

import numpy as np
import scipy.special as sc
v = float(input('Degre of freedom '))
v1 = (1+v)/2
v2 = v/2
Entropy_of_Variable_X = v1*(sc.digamma(v1)-sc.digamma(v2))+np.log(np.sqrt(v)*sc.beta(v2,0.5))
print('Entropy of the variable X, of degree of freedom equal to : ', v, 'is ', Entropy_of_Variable_X)

您可以向它传递一个列表或类似的东西来计算多重分布的熵。

于 2020-11-17T23:42:14.017 回答