2017-04-16 32 views
-1

此問題是對previous question的補充。Python中用於實數數據集的信息內容

我需要計算來自兩個Python列表的信息內容。這些列表包含實數。我明白,如果概率是從列表的直方圖計算出來的,我可以使用下面的公式。

sum_ij p(x_i,y_j) log_2 (p(x_i,y_j)/(p(x_i)p(y_j))/- sum_i p(y_i) log_2 p(y_i) 

是否有任何內置的Python API來計算信息內容?

對上一個問題的回答建議使用來自BioPythoninformation_content() API。但該功能僅適用於字母符號。

謝謝。

+0

是你的價值觀離散或連續? – Paul

+0

@保羅他們是連續的。 –

回答

2

對於離散分佈,可以使用上述的biopython或scikit-learn的sklearn.metrics.mutual_info_score。但是,兩者都使用您引用的公式(其用於符號數據)計算「符號」數據之間的互信息。無論哪種情況,您都會忽視數據的值具有固有的順序。

對於連續分佈,最好使用Kozachenko-Leonenko的k最近鄰估計熵(K & L 1987)和相應的Kraskov,...,Grassberger(2004)估計互信息。這些規避了計算概率密度函數的中間步驟,並且直接從數據點到其最近鄰居的距離估計熵。

Kozachenko-Leonenko估計量的基本思想是查看相鄰數據點之間的平均距離(的某個函數)。直覺是,如果這個距離很大,數據中的離差很大,因此熵很大。在實踐中,不是取最近鄰距離,而是取k-最近鄰距離(其中k通常是5-20範圍內的小整數),這趨於使估計更穩健。

我有我的github上這兩種方案:https://github.com/paulbrodersen/entropy_estimators