您显示的方程式确实是二元分类的交叉熵损失公式(或简称为 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。
但是,这是 损失
(即
scores[0]在您的摘要中),而不是准确性。
损失和准确性是不同的东西;粗略地说,从 业务 角度来看,准确性是我们真正感兴趣的,而损失是学习算法(优化器)从 数学
角度试图使目标最小化的目标函数。更粗略地说,您可以将损失视为业务目标(准确性)对数学域的“转换”,这是分类问题中必不可少的转换(在回归问题中,损失和业务目标通常是损失)。相同,或至少原则上可以相同,例如RMSE)…
Keras会自动将我们的预测取整为0或1吗?
实际上是:为了计算准确性,我们在预测的概率中隐式设置了一个 阈值
(在二进制分类中通常为0.5,但是在高度不平衡的数据中可能有所不同);因此,在中
model.evaluate,Keras实际上将预测转换为1 `p[i]
0.5
,否则转换为0。然后,通过简单地对y_true==y_pred`(正确预测)的情况进行计数并除以样本总数,就可以计算出准确度,从而得出[0,1]中的数字。
因此,总结一下:
- 损失 的计算没有四舍五入 __
- 有一个隐式阈值运算用于 精度 计算 __
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)