Keras如何计算准确率?

8
如果存在二元分类问题,标签为0和1。 我知道预测是一个浮点数,因为p是属于该类的概率。 以下是交叉熵损失函数。

enter image description here

然而,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
1个回答

19
你有一点困惑,因为你在谈论精度,但同时展示了损失的公式。
你所展示的方程确实是交叉熵损失公式用于二元分类(或简单地称为逻辑损失)。 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,即,但我们对p[1] = 0.1的预测相当糟糕;同样,第二项消失了,这个预测对总损失的贡献现在是-log(0.1) = 2.3,比我们的第一个好预测要大,这是我们应该直观地期望的。
最后一个例子,假设,我们对p[2] = 0做出了完美的预测;因此,第一项消失了,第二项变成了
(1 - y[2]) * log(1 - p[2]) = 1 * log(1) = log(1) = 0

即我们没有损失贡献,正如我们直觉地预期的那样,因为我们在这里对于 i=2 做出了完美的预测。

逻辑损失公式简单地计算所有这些个别预测的误差,将它们相加,然后除以它们的数量 n

然而,这是 损失(即您片段中的 scores[0]),而不是 准确率

损失和准确率是不同的东西;粗略地说,准确率是我们从 商业 视角实际上感兴趣的内容,而损失是学习算法(优化器)尝试从 数学 视角最小化的目标函数。更粗略地说,您可以认为损失是商业目标(准确性)到数学领域的“翻译”,这种翻译在分类问题中是必要的(在回归问题中,通常损失和商业目标是相同的,或者至少原则上可以相同,例如 RMSE)...

Keras 会自动将我们的预测四舍五入为 0 或 1 吗?

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

因此,总结一下:

  • 对于损失的计算没有舍入
  • 对于准确度的计算存在隐含的阈值操作

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接