2016-01-16 172 views
4

我使用pandasnumpy實施python中mutual information公式計算蟒蛇互信息返回NaN

def mutual_info(p): 
    p_x=p.sum(axis=1) 
    p_y=p.sum(axis=0) 
    I=0.0 
    for i_y in p.index: 
     for i_x in p.columns: 
      I+=(p.ix[i_y,i_x]*np.log2(p.ix[i_y,i_x]/(p_x[i_y]*p[i_x]))).values[0] 
    return I 

但是,如果p細胞具有零概率,然後np.log2(p.ix[i_y,i_x]/(p_x[i_y]*p[i_x]))是負無窮大,而整個表達式乘以零並返回NaN

什麼是正確的解決方法?

+0

難道你不能檢查p中是否有零,並且在這種情況下返回你對這種情況的期望值? – timgeb

+0

我不知道什麼是零概率熵 –

+0

也許這裏有人知道 –

回答

3

由於各種理論和實際原因(例如,請參閱Competitive Distribution Estimation: Why is Good-Turing Good),您可能會考慮從不使用使用零概率和對數損失度量。

所以說,如果你有一個概率向量p,那麼,對於一些小標α> 0,你會用α 1 +(1 - α)p(其中這裏的第1是統一的向量)。不幸的是,對於選擇α沒有一般的指導原則,您必須在計算中進一步評估。

對於Kullback-Leibler距離,您當然可以將其應用於每個輸入。