测试误差是否可能低于训练误差

机器算法验证 Python 机器学习
2022-04-01 10:11:59

测试误差是否可能低于训练误差?

我有一个包含 2000 个样本的分类问题,其中 500 个是正样本,1500 个是负样本。我将数据分成 70% 的训练数据和 30% 的测试数据。

使用 200 个估计器和 cv=10 运行随机森林。我这样做了几次,并比较了召回率和精度分数,并注意到我的测试集的分数明显更好。这可能吗?

1个回答

完全有可能,尽管这可能意味着你没有尽可能多地训练。通常,当您查看随时间变化的测试/训练精度时,您会得到如下图:

归功于 Daniel Nee

测试/训练阶段可以(非常广泛地)分类如下:

  • 首先你开始训练,测试/训练的准确性比较嘈杂,但它们之间的相关性非常强。这意味着你还没有完全适应这个问题。
  • 随着时间的推移,它们都开始下降,但训练误差开始比测试误差下降得更快。这意味着你正在接近一个非常好的适合水平。
  • 最终你开始看到测试集的错误率增加了,而训练集的错误率继续下降。这意味着你已经正式开始过拟合。

如果过度拟合成为问题,有很多方法可以处理过度拟合,但您选择算法和训练的目标应该是达到最高准确度,这通常发生在第二阶段的某个地方。

如果您的测试准确度高于您的训练准确度,那么您在训练图上的位置可能还很远。解决该问题有三个主要选项:

  • 使用更适合小型数据集的算法(在不了解您的问题的情况下很难判断,但朴素贝叶斯通常是一个不错的小型数据选择)
  • 更改您的模型常数以更适合您的训练集(提高学习率)
  • 获取更多数据