如何Keras评估的准确性?如何Keras评估的准确性?(How does Keras evalua

2019-05-12 07:39发布

如果有一个二元分类问题,如果标签是0和1
我知道预测是浮点数因为p是属于该类别的可能性。

但标签是0 1。
他们都是不一样的,以我们的预测。
如何keras评估的准确性?
将keras自动把我们的预测为0或1?

当量:例如,这是测试数据的精确度
但所有的预测是浮个点,因此keras轮预测到0 1
并计算精度为0.749?

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

Answer 1:

您在这里有点困惑; 你谈论的精度,同时表现出对损失的公式...

告诉你的公式确实是交叉熵损耗公式为二元分类(或简称物流损失 )。

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

然而,这是损失 (即scores[0]在您的代码段),而不是准确性 。

损失和准确度是不同的东西; 粗略地讲,精度是我们是从商业角度看真正感兴趣,而损失的目标函数的学习算法(优化)正试图从数学的角度最小化。 更粗略地说,你可以把损失的“翻译”的经营目标(精度)的数学领域的,翻译这是必要的分类问题(在回归的人,通常的损失和经营目标是同样的,或者至少可以在原则上是相同的,例如RMSE)...

将keras自动把我们的预测为0或1?

实际上是:计算的准确性,我们隐式设置在预测概率的阈值 (通常在二元分类0.5,但是这可能在高度不平衡数据的情况下不同); 所以,在model.evaluate ,Keras实际上我们的预测转换为1,如果p[i] > 0.5 ,并否则为0。 然后,准确度是通过简单地计数,其中箱子计算y_true==y_pred (正确预测)和通过样品的总数除以,得到在[0,1]的数。

因此,要总结:

  • 损失的计算没有舍入
  • 还有为准确计算一个隐含的阈值操作

希望它现在很清楚...



文章来源: How does Keras evaluate the accuracy?