首页 文章

如何解释机器学习模型的“损失”和“准确性”

提问于
浏览
120

当我使用Theano或Tensorflow训练我的神经网络时,他们将报告每个时期称为“损失”的变量 .

我该如何解释这个变量?更高或更低的损失,或者它对我的神经网络的最终性能(准确性)意味着什么?

3 回答

  • 186

    _1158774越低,模型越好(除非模型过度拟合训练数据) . 损失计算在 trainingvalidation 上,其交互是模型对这两组的影响 . 与准确性不同,损失不是百分比 . 它是训练或验证集中每个示例所犯错误的总和 .

    在神经网络的情况下,损失通常分别为negative log-likelihoodresidual sum of squares用于分类和回归 . 那么自然地,学习模型中的主要目标是通过不同的优化方法(例如神经网络中的反向传播)改变权重向量值来减少(最小化)损失函数's value with respect to the model's参数 .

    损失值表示在每次优化迭代后某个模型的表现有多好或多差 . 理想情况下,人们会期望在每次或几次迭代后减少损失 .

    模型的准确性通常在学习和修复模型参数并且没有进行学习之后确定 . 然后将测试样品送入模型,并在与真实目标进行比较后记录模型产生的错误数(零丢失) . 然后计算错误分类的百分比 .

    例如,如果测试样本的数量是1000并且模型正确地分类了952,那么模型的准确度是95.2% .

    enter image description here

    在减少损失 Value 的同时还有一些细微之处 . 例如,您可能会遇到over-fitting的问题,其中模型"memorizes"是训练示例,并且对测试集变得无效 . 在不使用regularization的情况下也会发生过度拟合,您有一个非常复杂的模型(自由参数的数量 W 很大)或数据点的数量 N 非常低 .

  • 9

    它们是评估模型性能的两种不同指标,通常用于不同阶段 .

    在训练过程中经常使用损失来找到模型的“最佳”参数值(例如,神经网络中的权重) . 您尝试通过更新权重来优化培训 .

    从应用的角度来看,准确性更高 . 找到上述优化参数后,您可以使用此指标评估模型预测与真实数据的准确度 .

    让我们使用玩具分类示例 . 你想从一个人的体重和身高来预测性别 . 你有3个数据,它们如下:(0代表男性,1代表女性)

    y1 = 0,x1_w = 50kg,x2_h = 160cm;

    y2 = 0,x2_w = 60kg,x2_h = 170cm;

    y3 = 1,x3_w = 55kg,x3_h = 175cm;

    您使用简单的逻辑回归模型,即y = 1 /(1 exp-(b1 * x_w b2 * x_h))

    你怎么找到b1和b2?首先定义一个损失并使用优化方法通过更新b1和b2以迭代方式最小化损失 .

    在我们的示例中,此二进制分类问题的典型损失可能是:(应在总和符号前添加减号)

    我们不知道b1和b2应该是什么 . 让我们随机猜一下,说b1 = 0.1,b2 = -0.03 . 那么我们现在的损失是什么?

    y1_hat = 1 /(1 exp { - (0.1 * 50-0.03 * 160)})= 0.549834 = 0.55

    y2_hat = 1 /(1 exp { - (0.1 * 60-0.03 * 170)})= 0.7109495 = 0.71

    y3_hat = 1 /(1 exp { - (0.1 * 55-0.03 * 175)})= 0.5621765 = 0.56

    所以损失是(-log(1-0.55)-log(1-0.71) - log(0.56))= 2.6162

    然后你学习算法(例如梯度下降)将找到更新b1和b2以减少损失的方法 .

    如果b1 = 0.1且b2 = -0.03是最终的b1和b2(梯度下降的输出),那么现在的准确度是多少?

    假设如果y_hat> = 0.5,我们判断我们的预测是女性(1) . 否则它将为0.因此,我们的算法预测y1 = 1,y2 = 1和y3 = 1.我们的准确度是多少?我们对y1和y2做出错误的预测,并在y3上做出正确的预测 . 所以现在我们的准确度是1/3 = 33.33%

    PS:在Amir's answer中,反向传播被认为是NN中的优化方法 . 我认为它将被视为在NN中找到权重梯度的一种方法 . NN中的常见优化方法是GradientDescent和Adam .

  • 3

    @Aadnan只是为了澄清一下训练/验证/测试数据集:训练集用于执行模型的初始训练,初始化神经网络的权重 .

    在训练神经网络之后使用验证集 . 它用于调整网络的超参数,并比较它们的变化如何影响模型的预测准确性 . 虽然训练集可以被认为是用于构建神经网络的门权重,但验证集允许微调神经网络模型的参数或架构 . 它非常有用,因为它允许将这些不同的参数/体系结构与相同的数据和网络权重进行可重复的比较,以观察参数/体系结构的变化如何影响网络的预测能力 .

    然后,在使用训练和验证数据集进行训练和参数/架构选择之后,测试集仅用于测试训练的神经网络对先前未看到的数据的预测准确性 .

相关问题