簡體   English   中英

scipy 中 t 分布的熵:如何輸入 digamma 和 beta 函數的自由度?

[英]Entropy of t-distribution in scipy: How to input degrees of freedom to digamma and beta functions?

對於隨后的t分布的變量X,衍生的熵的封閉形式的解析解這里,是

在此處輸入圖片說明

看到python有函數scipy.special.digammascipy.special.beta ,上面的公式如何在代碼中實現?

令我困惑的是,根據文檔,剛才提到的函數沒有將自由度參數nu(v)作為輸入。 一個正在運行的例子會有所幫助

根據其定義,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)

您可以向它傳遞一個列表或類似的東西來計算多重分布的熵。

您還可以使用多元學生 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM