当概率为零时替代香农熵

机器算法验证 分类
2022-03-13 02:34:41

我有一系列对象,我知道它们属于 10 个类别的概率。该概率可以为空(请参见下面的示例,其中包含 4 个类别:A、B、C、D)。

   A    B    C    D
1  0.4  0.0  0.2  0.4
2  0.1  0.3  0.4  0.2
3  0.0  0.0  0.0  1.0

为了为每个对象获取有关分类质量的信息,我想计算香农的熵,但是当其中一个类的概率为零(log(0)=-Inf)时,它不起作用。

我的问题:是否有类似于香农熵(或适应)的测量方法来处理等于零的概率?

4个回答

忽略零概率,并使用相同的等式进行求和。

for each object{ 
        double e=0.0;
        for (int i=0;i<n;i++){
            if (p[i]!=0)
                e = e+ p[i]*Log(p[i],2);
        }
        e=-1 * e;
    print e;
}

// 第 1,2 和 3 行的熵分别为 1.52、1.85 和 0.00

根据 MacKay 的书“信息理论、推理和学习算法”(第 2 章),惯例是您可以将包括零概率在内的术语等同于零,正如其他答案所暗示的那样。请参阅下面的摘录:

MacKay 对熵的定义

忽略零并执行计算。

entropyFunc =(data) ->
    H = 0
    for i of  data 
        #since the log function isnt defined at 0 
        if data[i] ? 0
            H += ( (-1) * data[i] * Math.log2(data[i]) )
    return H

对于分类,您可以使用基尼指数作为熵的近似值,它在 0 时表现良好1pi2