计算为 NaN 的纯分裂熵

Posted

技术标签:

【中文标题】计算为 NaN 的纯分裂熵【英文标题】:Entropy of pure split caculated to NaN 【发布时间】:2015-08-12 15:04:33 【问题描述】:

我编写了一个函数来计算向量的熵,其中每个元素代表一个类的元素数。

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

例如:a = [4 0],然后是entropy = -(0/4)*log2(0/4) - (4/4)*log2(4/4)

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

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

【问题讨论】:

【参考方案1】:

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

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

这个函数虽然打破了log2 的行为,但可以在您的具体示例中使用,因为您将结果与日志内部相乘,从而使其为零。这不是“数学上正确的”,但我相信这就是您正在寻找的。​​p>

【讨论】:

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

以上是关于计算为 NaN 的纯分裂熵的主要内容,如果未能解决你的问题,请参考以下文章

ID3决策树

使用 scikit-learn 时,如何找到我的树分裂的属性?

使用 scikit-learn 时,如何找到我的树分裂的属性?

使用 scikit-learn 时,如何找到我的树分裂的属性?

细胞分裂结果的计算方法:分裂几次就是2的几次方,即:啥

细胞分裂