【问题标题】:why Test precision is higher than training precision为什么测试精度高于训练精度
【发布时间】:2016-10-01 09:04:32
【问题描述】:

我正在使用 TensorFlow 来实现对象识别。我遵循了本教程,但使用了我自己的数据集。 https://www.tensorflow.org/versions/r0.8/tutorials/mnist/pros/index.html#deep-mnist-for-experts

我使用 212 个正样本和 120 个负样本进行训练。测试集包含 100 个正样本和 20 个负样本。 训练精度只有32.15%,但测试精度是83.19%

我想知道是什么让测试精度高于训练精度,是我的数据集不够大吗?数据没有显示任何统计意义?或者是一般的东西,因为我看到有人说训练精度没有任何意义。但这是为什么呢?

【问题讨论】:

  • 根据您的描述,pos/neg-examples 的比率差异显然会导致这种观察结果(训练比率约为 64%,比率测试约为 83%)!您是否在训练期间使用样本权重/类别权重(处理不平衡数据的技术)?
  • 不..我没有使用那种技术。我将我的比率更改为相同(训练中:212 pos,80 neg。在测试中:100 pos,40 neg)。训练精度变为 0.27,测试精度为 0.71……我是否应该将负样本放大到训练和测试中正样本数量的两倍?

标签: machine-learning tensorflow conv-neural-network


【解决方案1】:

这里有两个问题。

首先,当类不平衡时,精度并不是衡量性能的一个很好的衡量标准。

其次,更重要的是,您在测试集中有 bad ratio 阴性与阳性。您的测试集应该来自与训练集相同的过程,但在您的情况下,负数约占训练集的 40%,但仅占测试集的 17%。并不令人惊讶 - 对每个输入简单地回答“真”的分类器将在您的测试集上获得 83% 的精度(因为阳性是整个数据的 83%)。

因此,这不是测试样本数量的问题,而是训练/测试数据集的错误构造问题。我也可以想象,这个拆分还有更多的问题,可能在训练和测试中有完全不同的结构。

【讨论】:

  • 这次我将我的比率更改为相同(训练中:212 pos,80 neg。测试中:100 pos,40 neg)。训练精度变为 0.27,测试精度为 0.71……分类器确实对每个输入都简单地回答“真”。我应该扩大我的负样本,使其在训练和测试中都是正样本数量的两倍吗?
  • 停止使用精度,使用精度。你会发现你只是过拟合(或欠拟合)
  • 非常感谢您对迟到的回复感到抱歉。我将其更改为准确度并重建我的数据集(Training,pos:212,neg:534;Test,pos:100,neg:270),即使在训练过程中,分类器也会在多次迭代后将每个样本识别为阳性。图像大小为 63*63=3969,这是欠拟合吗?添加更多图层会有所帮助吗?我是机器学习的新手,谢谢!
  • 不要从神经网络开始学习机器学习。这就像从量子一开始学习物理......从基础开始,了解正在发生的事情,然后将 NN 留到以后。他们真的很难训练,而且你不会仅仅按照别人的指示而不是了解正在发生的事情来学到很多东西。
  • 感谢您的提醒,但这是我必须完成的项目,所以..似乎我找到了分类器简单地将每个测试样本检测为“真”的问题的根本原因.因为这里的正样本具有我想要检测的某些模式,但负样本只是随机背景,这有点类似于 pos 样本。该算法找不到描述负样本模式的好方法。由于softmax回归分配概率最高的值,所以我的最后一个问题是我可以设置一个概率阈值来过滤它们吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-04
  • 2018-12-30
  • 2020-07-08
  • 1970-01-01
  • 2021-09-14
  • 2020-09-29
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多