如果存在二进制分类问题,则标签为0和1。
我知道预测是浮点数,因为p是属于该类的概率。

以下是交叉熵损失函数。

python - Keras 如何计算准确率?-LMLPHP

但是,p不一定为0或1,那么Keras如何计算精度? Keras会自动将我们的预测取整为0或1吗?

例如,在下面的代码中,精度为0.749,但目标为0和1,预测为不一定为0.0或1.0的浮点数。

>>> scores = model.evaluate(x=test_Features,
                    y=test_Label)
>>> scores[1]
0.74909090952439739

最佳答案

您在这里有些困惑;您说的是准确性,同时显示了损失的公式。

您显示的方程式的确是用于二进制分类的cross-entropy loss formula(或简称为logistic损失)。
y[i]是标签,它们的确为0或1。
p[i]是预测,通常被解释为概率,是[0,1]中的实数(不进行任何舍入)。

现在,对于每个i,总和中只有一个术语将继续存在-第一个术语在y[i] = 0时消失,类似地,第二个术语在y[i] = 1时消失。

让我们看一些例子:

假设y[0] = 1,而我们已经预测了p[0] = 0.99(即相当不错的预测)。和的第二项消失(自1 - y[0] = 0以来),而第一项变为log(0.99) = -0.01;因此,此样本预测(i=0)对总损失的贡献为0.01(由于总和前面的-符号)。

现在假设下一个样本的真实标签再次为1,即y[1] = 1,但是在这里,我们对p[1] = 0.1的预测相当差;同样,第二项消失了,这个预测对整体损失的贡献现在为-log(0.1) = 2.3,确实比我们第一个良好的预测要大,这是我们应该直观地期望的。

作为最后一个示例,让我们假设y[2] = 0,并且我们在这里对p[2] = 0做出了很好的预测;因此,第一项消失了,第二项变为

(1 - y[2]) * log(1 - p[2]) = 1 * log(1) = log(1) = 0

也就是说,正如我们在直觉上所期望的,我们没有损失,这是因为我们在这里对i=2做出了非常好的预测。

逻辑损失公式仅计算各个预测的所有这些误差,将它们求和,然后除以其数量n

不过,这是loss(即您的代码段中的scores[0]),而不是accuracy

损失和准确性是不同的东西;粗略地说,从业务角度来看,准确性是我们真正感兴趣的,而损失是学习算法(优化器)从数学角度试图使目标最小化的目标函数。更粗略地说,您可以将损失视为业务目标(准确性)对数学域的“转换”,这是分类问题中必不可少的转换(在回归问题中,损失和业务目标通常是损失)。相同,或至少原则上可以相同,例如RMSE)...



实际上是:为了计算准确性,我们在预测的概率中隐式设置了一个阈值(在二进制分类中通常为0.5,但是在高度不平衡的数据中可能有所不同);因此,在model.evaluate中,如果p[i] > 0.5,Keras实际上会将我们的预测转换为1,否则将其转换为0。然后,通过简单地计数y_true==y_pred(正确的预测)的情况并除以样本总数,得出[0,1]中的数字,即可计算出准确度。

因此,总结一下:
  • 损失四舍五入不计算
  • 有一个隐式阈值运算,用于计算准确性
  • 关于python - Keras 如何计算准确率?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47508874/

    10-09 07:51
    查看更多