如果有一个二元分类问题,如果标签是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
您在这里有点困惑; 你谈论的精度,同时表现出对损失的公式...
告诉你的公式确实是交叉熵损耗公式为二元分类(或简称物流损失 )。
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]的数。
因此,要总结:
- 有损失的计算没有舍入
- 还有为准确计算一个隐含的阈值操作
希望它现在很清楚...