纯分裂的熵计算为 NaN
Entropy of pure split caculated to NaN
我编写了一个函数来计算向量的熵,其中每个元素代表 class 的元素数。
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)
但是对于上面的函数,熵是NaN
,因为log2(0)
,所以分裂是纯的,如上例。纯分裂的熵应该为零。
数据量很大,如何解决对性能影响最小的问题?谢谢
我建议您创建自己的 log2
函数
function res=mylog2(a)
res=log2(a);
res(isinf(res))=0;
end
此函数虽然打破了 log2
行为,但可以在您的特定示例中使用,因为您将结果与日志内部相乘,从而使其为零。它不是 "mathematically correct",但我相信这就是您要找的。
我编写了一个函数来计算向量的熵,其中每个元素代表 class 的元素数。
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)
但是对于上面的函数,熵是NaN
,因为log2(0)
,所以分裂是纯的,如上例。纯分裂的熵应该为零。
数据量很大,如何解决对性能影响最小的问题?谢谢
我建议您创建自己的 log2
函数
function res=mylog2(a)
res=log2(a);
res(isinf(res))=0;
end
此函数虽然打破了 log2
行为,但可以在您的特定示例中使用,因为您将结果与日志内部相乘,从而使其为零。它不是 "mathematically correct",但我相信这就是您要找的。