Matlab 纯分裂熵的计算

Matlab 纯分裂熵的计算,matlab,decision-tree,entropy,Matlab,Decision Tree,Entropy,我写了一个函数来计算向量的熵,其中每个元素代表一个类中元素的数量 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=[40],然后熵=-(0/4)*log2(0/4)-(4/4)*log2(4/4) 但是对于上面的函数,当由于log2(0)而拆分为纯时,熵为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=[40]
,然后
熵=-(0/4)*log2(0/4)-(4/4)*log2(4/4)

但是对于上面的函数,当由于
log2(0)
而拆分为纯时,熵为
NaN
,如上面的示例所示。纯分裂的熵应该是零


由于数据非常大,我应该如何解决对性能影响最小的问题?谢谢

我建议您创建自己的
log2
函数

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

此函数在破坏
log2
行为的同时,可以在您的特定示例中使用,因为您将结果与日志内部相乘,从而使其为零。它不是“数学上正确的”,但我相信这正是您想要的。

谢谢,但我不得不将其编辑为'res(isinf(res))=0',因为log2(0)=-inf。@Newbie确实,我的错误