簡體   English   中英

python中的聯合熵

[英]Joint entropy in python

我有兩個數組:

import numpy as np
a = np.array(['1','2','3'])
b = np.array(['3','4','1','5'])

我想計算聯合熵。 我找到了一些材料來制作它:

import numpy as np
def entropy(*X):
    return = np.sum(-p * np.log2(p) if p > 0 else 0 
        for p in (np.mean(reduce(np.logical_and, (predictions == c for predictions, c in zip(X, classes))))
        for classes in itertools.product(*[set(x) for x in X])))

使用len(a) = len(b)似乎工作正常,但如果len(a) != len(b)則以錯誤結束

UPD:數組ab是從示例主輸入創建的:

b:3 p1:1 p2:6 p5:7
b:4 p1:2 p7:2
b:1 p3:4 p5:8
b:5 p1:3 p4:4 

其中數組a是從 p1 值創建的。 所以不是每條線都包含每個pK但每條線都有b屬性。 我需要為每個pK計算互信息I(b,pK)

假設你在談論聯合香農熵,公式很簡單:

在此處輸入圖片說明

問題在於,當我查看您到目前為止所做的工作時,您缺少P(x,y) ,即兩個變量一起出現的聯合概率。 看起來a,b分別是事件 a 和 b 的個體概率。

您發布的代碼有其他問題(在評論中提到):

  1. 您的變量不是數字數據類型a=["1","2"]一樣的a=[1,2] 一個是字符串,另一個是數字。
  2. 您的輸入數據的長度必須相同,即對於 A 中的每個 x,B 中必須有 y並且您需要知道聯合概率P(x,y)

這是一個想法:

  • 將數據轉換為數字
  • 添加填充示例零
import numpy as np
from scipy import stats

a = np.array(['1','2','3','0'])
b = np.array(['3','4','1','5'])
aa = [int(x) for x in a]
bb = [int(x) for x in b]
je =  stats.entropy(aa,bb)
print("joint entropy : ",je)

輸出:0.9083449242695364

暫無
暫無

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

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