2015-05-29 48 views
2

我寫了一個函數來計算向量的熵,其中每個元素表示一個類的元素的數量。純分裂的熵計算爲NaN

function x = Entropy(a) 
    t = sum(a); 
    t = repmat(t, [1, size(a, 2)]); 
    x = sum(-a./t .* log2(a./t)); 
end 

e.g:a = [4 0],然後entropy = -(0/4)*log2(0/4) - (4/4)*log2(4/4)

但對於上述功能,熵是NaN當分割是因爲純的log2(0),如在上面的示例。純分裂的熵應該是零。

由於數據量非常大,我應該如何解決對性能影響最小的問題?由於

回答

0

我建議你創建自己的log2功能

function res=mylog2(a) 
    res=log2(a); 
    res(isinf(res))=0; 
end 

此功能,同時打破了log2行爲,可以在你的具體的例子,因爲你是與日誌的內乘的結果中,從而使其爲零。這不是「數學上正確的」,但我相信這就是你正在尋找的。

+0

謝謝,但我不得不將它編輯爲'res(isinf(res))= 0',因爲log2(0)= -inf。 – Newbie

+0

@Newbie確實,我的錯誤 –