测试精度高于训练水平。怎么解释?


23

我的数据集最多包含150个示例(分为训练和测试),并且具有许多功能(高于1000个)。我需要比较在数据上表现良好的分类器和特征选择方法。因此,我使用三种分类方法(J48,NB,SVM)和2种特征选择方法(CFS,WrapperSubset)以及不同的搜索方法(Greedy,BestFirst)。

比较时,我正在研究训练准确性(5折交叉折叠)和测试准确性。

这是J48和CFS-BestFirst的结果之一:

{“ accuracyTraining”:95.83,“ accuracyTest”:98.21}

许多结果是这样的,并且在SVM上有许多结果表明测试准确性远高于训练(训练:60%,测试:98%)

我如何有意义地解释这些结果?如果更低,我会说这太过合适了。通过查看所有结果,在这种情况下是否有关于偏差和方差的说法?我该怎么做才能使这种分类有意义,例如重新选择训练和测试集,或者仅对所有数据使用交叉验证?

我有73个培训和58个测试实例。一些答案在发布时没有此信息。

Answers:


20

我认为第一步是检查报告的培训和测试表现是否正确。

  • 5倍交叉验证期间的拆分是否以产生统计独立的Cv训练/测试集的方式完成?例如,如果数据中有重复的测量,它们是否总是以同一集合结束?
  • 在150个样本的5倍简历中,95.83%的准确度与5个替代模型的130个训练样本中的5个错误或5 * 130个训练样本的25个错误案例相符。
  • 98.21%的测试准确性更难解释:在一次简历运行中,每个案例应测试一次。因此,可能报告的数字应为100%/ 150。98.21%对应于2.68个错误的案例(150个测试案例中有2个和3个错误案例的准确度分别为98.67和98.00%)。

  • 如果可以提取模型,请从外部计算报告的精度。

  • 报告的随机输入精度是多少?
  • 进行外部交叉验证:拆分数据,然后仅将培训部分移交给程序。预测“外部”测试数据并计算准确性。这符合程序的输出吗?
  • 确保报告的“测试准确性”来自独立数据(双重/嵌套交叉验证):如果您的程序进行了数据驱动的优化(例如,通过比较许多模型来选择“最佳”功能),则更像是训练错误(良性)比一般错误。

我同意@mbq的观点,训练错误在机器学习中几乎没有用。但是您可能会在几种实际上有用的情况中之一:如果程序通过比较准确度来选择“最佳”模型,但只有训练错误可供选择,则您需要检查训练错误是否实际上允许合理的选择。选择。
@mbq概述了无法区分的模型的最佳情况。但是,更糟糕的情况也会发生:就像测试精度一样,训练精度也受制于方差,但与通常感兴趣的泛化精度相比却存在乐观偏见。这可能导致无法区分模型的情况,尽管它们确实具有不同的性能。但是由于他们的乐观偏见,他们的训练(或内部简历)准确性太接近而无法区分它们。例如,迭代特征选择方法可能会遇到这样的问题,这些问题甚至可能会持续存在于内部交叉验证准确性中(取决于交叉验证的实现方式)。

因此,如果可能出现此类问题,我认为最好检查程序是否使用正确的决策来做出明智的选择。这将意味着检查内部cv精度(假定用于选择最佳模型)是否相对于具有统计独立性的外部完成cv过于乐观。同样,综合和/或随机数据可以帮助找出程序实际执行的操作。

第二步是看看@mbq已经指出的,在统计上独立的分割中观察到的差异是否有意义。

我建议您计算在给定的样本量下需要观察到的准确度差异,以便得出具有统计学意义的差异。如果观察到的变化较小,则无法根据给定的数据集确定哪种算法更好:进一步的优化没有意义。


这里有很多很好的信息要消化。首先,很抱歉我没有给出确切的数字,因为我没想到您会得到如此详细的数字,我也只想关注一个主题。无论如何,我有73个培训和58个测试数据。这些在统计上并没有分开,它们只是我在不同时间拍摄的。首先将训练样本纳入特征选择算法中(包装器fs方法也具有内部5倍cv),然后将其进行5倍运算并获得最佳精度并保存模型。然后将该模型用于计算测试准确性。
ercu

16

训练集的准确性在机器学习中毫无意义。忽略它。


谢谢!我有许多具有相同最佳测试准确度的结果,所以我现在无法比较结果(如果您还没这么说的话,我也会查看训练准确度以进行比较:)。因此,与拆分测试和训练相比,对所有数据集进行多次交叉验证是否更适合我的情况来比较结果?还是我需要其他指标?
ercu

1
简历当然是个好主意;无论如何,请注意,可能有几种“最佳”算法或参数集(从某种意义上说,它们与最佳情况具有相同或统计上的准确度)–这也不是问题。更好的是,这意味着您将获得稳定的结果-极好的最佳值可能表明您已经通过挑选参数来过度拟合模型。

8
了解训练集的准确性对估计预测算法的过拟合量很有帮助(通过计算训练与测试集之间的准确性差异)。
Frank Harrell 2013年

你能解释为什么吗?
2014年

1
从定义上看,机器学习方法是关于看不见的数据的性能,因此它们不能保证这一结果(不希望模型像统计建模那样重新实现数据基础的机制)。在实践中,许多方法给出的预测都过于准确,因此仅是欺骗。

6

您进行此操作的方式存在一些严重问题。首先,除非总样本量很大,否则数据拆分是不可靠的。如果再次拆分,将会得到不同的结果。除其他事项外,您没有考虑准确性估计的置信区间。其次,5倍交叉验证不够精确。可能需要重复100次以达到足够的精度。第三,您选择了不连续的不正确评分规则(正确分类的比例)作为准确性评分。这种不正确的评分规则将导致选择错误的模型。


3

假设算法的实现没有毛刺,让我们看一下问题。

想象一下从训练数据中提取一小部分并对其运行学习算法。显然,它将做得很好。总是有可能提取出达到接近98%准确性的子集。

现在,您的测试数据与此子集非常相似吗?如果是的话,那么您需要去收集更多的数据,希望更多些。从偏差方差的角度来看,我认为您的方差很高。


1

您拥有太多的特征(1000),而您拥有的样本数量(150)。您需要增加样本或减少功能数量。

他们说通常特征数量^ 2 =所需样本数量。因此,您至少需要数百万个样本。


0

可以使用任何ML算法甚至是自定义分类器来实现。尝试不同的k倍交叉验证方案,即2或10倍。随着k的增加,可以预期测试误差会降低。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.