你在这里有点困惑;你谈到准确性,同时显示损失的公式。
您展示的方程式确实是用于二元分类的cross-entropy loss formula(或简称为逻辑损失)。
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(即您的 sn-p 中的 scores[0]),而不是 accuracy。
损失和准确性是不同的东西;粗略地说,准确度是我们从商业角度真正感兴趣的,而损失是学习算法(优化器)试图从数学角度最小化的目标函数em> 观点。更粗略地说,您可以将损失视为业务目标(准确性)到数学领域的“转换”,这是分类问题中所必需的转换(在回归问题中,通常损失和业务目标是相同,或者至少原则上可以相同,例如 RMSE)...
Keras 会自动将我们的预测四舍五入为 0 还是 1?
其实是的:为了计算准确率,我们在预测概率中隐式设置了一个阈值(在二元分类中通常为 0.5,但在数据高度不平衡的情况下可能会有所不同);因此,在model.evaluate 中,如果p[i] > 0.5,Keras 实际上将我们的预测转换为 1,否则转换为 0。然后,通过简单地计算y_true==y_pred(正确预测)的情况并除以样本总数来计算准确率,得到[0,1]中的数字。
所以,总结一下:
-
损失的计算没有四舍五入
-
准确性的计算存在隐式阈值操作