scipy中TDI分布的熵:如何向digamma和beta函数输入自由度?

2024-09-27 07:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

导出了服从t分布的变量X的熵的闭式解析解here

enter image description here

既然python有函数scipy.special.digammascipy.special.beta,那么如何在代码中实现上述公式呢

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


Tags: 函数代码参数heredocumentationscipynu例子
2条回答

根据其定义,Shanoon将熵定义为: enter image description here

现在,如果您将此公式应用于Student-t分布,您将注意到此分布已包含自由度参数(v): enter image description here

作为积分的结果,您将在近似情况下获得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)

你可以给它一个列表或者类似的东西来计算多重分布的熵

也可以使用多元student 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

相关问题 更多 >

    热门问题