我有一个正在使用gridsearchcv进行调整的rbf SVM。如何判断我的好成绩实际上是好成绩还是过拟合?

最佳答案

过度拟合通常与高方差相关联,这意味着将因拟合到某些已实现的数据集而产生的模型参数在数据集与数据集之间具有较高的方差。您收集了一些数据,拟合了一些模型,得到了一些参数...再做一次并获得新数据,现在您的参数完全不同了。

其结果之一是,在过度拟合的情况下,训练误差(直接在用于训练模型的数据上重新运行模型而产生的误差)通常会非常低,或者与测试误差相比至少会很小(在一些先前未使用的测试数据上运行模型)。

Ng提出的一种诊断方法是将您的一些数据分离到测试集中。理想情况下,应该从一开始就这样做,这样碰巧看到包含这些数据的模型拟合结果将永远不会有机会影响您的决策。但是,只要在模型讨论中进行了说明,您也可以在事后这样做。

对于测试数据,您希望计算与训练数据相同的错误或损失分数。如果训练误差非常低,而测试误差却高得令人无法接受,则可能是过度拟合。

此外,您可以更改测试数据的大小并生成诊断图。假设您随机采样了5%的数据,然后分别采样了10%,15%...直至30%。这将为您提供六个不同的数据点,显示产生的训练错误和测试错误。

随着增加训练集大小(减少测试集大小),两条曲线的形状可以提供一些见解。

测试误差将减小,训练误差将增大。两条曲线应展平并在它们之间留出一定的间隙。

如果差距很大,则可能要解决过度拟合问题,建议您使用较大的训练集,并尽可能尝试收集更多数据。

如果差距很小,或者训练误差本身已经太大,则表明模型偏差是问题所在,您应该一起考虑不同的模型类。

请注意,在上述设置中,您还可以用k倍交叉验证代替测试集方法。然后,要生成类似的诊断曲线,应更改折叠数(从而更改测试集的大小)。对于给定的k值,然后对于用于测试的每个子集,将其他(k-1)个子集用于训练误差,并在分配折痕的每种方式中取平均值。对于给定的k选择,这将为您提供训练误差度量和测试误差度量。随着k变大,训练集的大小也变大(例如,如果k = 10,则训练错误报告在90%的数据上),因此您可以再次看到分数随训练集大小的变化。

缺点是CV分数的计算已经很昂贵,而且对于许多不同的k值重复执行CV会使情况变得更糟。

过度拟合的另一个原因可能是要素空间过大。在这种情况下,您可以尝试查看每个功能的重要性得分。如果您修剪掉一些最不重要的功能,然后重新进行上述过度拟合的诊断并观察到改进,则也有一些证据表明问题过于拟合,您可能希望使用一组更简单的特征或不同的模型类。

另一方面,如果您仍然有较高的偏见,则表明情况恰恰相反:您的模型没有足够的特征空间来充分考虑数据的可变性,因此您可能想为模型添加更多特征。

07-24 09:51
查看更多