我有一个 rbf SVM,我正在使用 gridsearchcv 进行调整。如何判断我的好结果实际上是好结果还是过度拟合?
过度拟合通常与高方差相关,这意味着拟合到某些已实现数据集所产生的模型参数在数据集之间具有很高的方差。您收集了一些数据,拟合了一些模型,得到了一些参数......您再次执行此操作并获得新数据,现在您的参数完全不同。
这样做的一个结果是,在存在过度拟合的情况下,通常训练误差(直接在用于训练模型的数据上重新运行模型的误差)将非常低,或者至少与测试误差(在一些以前未使用的测试数据上运行模型)相比较低。
Andrew Ng 建议的一种诊断方法是将一些数据分离到一个测试集中。理想情况下,这应该从一开始就完成,因此碰巧看到包含此数据的模型拟合结果永远不会有机会影响您的决策。但是你也可以在事后做,只要你在模型讨论中解释一下。
对于测试数据,您希望计算与在训练数据上计算的相同错误或损失分数。如果训练误差非常低,但测试误差高得令人无法接受,则可能存在过度拟合。
此外,您可以改变测试数据的大小并生成诊断图。假设您随机抽取 5% 的数据,然后是 10%,然后是 15%......高达 30%。这将为您提供六个不同的数据点,显示由此产生的训练误差和测试误差。
当您增加训练集大小(减小测试集大小)时,两条曲线的形状可以提供一些见解。
测试误差将减少,训练误差将增加。两条曲线应该变平并收敛,它们之间有一些间隙。
如果这个差距很大,你可能正在处理过度拟合的问题,它建议使用一个大的训练集,并在可能的情况下尝试收集更多的数据。
如果差距很小,或者训练误差本身已经太大,则表明模型偏差是问题所在,您应该一起考虑不同的模型类。
请注意,在上述设置中,您还可以用 k 折叠交叉验证代替测试集方法。然后,要生成类似的诊断曲线,您应该改变折叠数(从而改变测试集的大小)。对于给定的 k 值,对于用于测试的每个子集,其他 (k-1) 子集用于训练误差,并在每种分配折叠的方式上取平均值。这为您提供了给定选择 k 的训练误差和测试误差指标。随着 k 变大,训练集大小会变大(例如,如果 k=10,则 90% 的数据报告训练错误),因此您可以再次看到分数如何随训练集大小变化。
缺点是 CV 分数的计算成本已经很高,并且许多不同值的 k 重复 CV 会使情况变得更糟。
过度拟合的另一个原因可能是特征空间太大。在这种情况下,您可以尝试查看每个功能的重要性分数。如果您删除了一些最不重要的特征,然后重新执行上述过拟合诊断并观察改进,这也表明问题在于过度拟合,您可能希望使用一组更简单的特征或不同的模型类。
另一方面,如果您仍然有高偏差,则表明相反的情况:您的模型没有足够的特征空间来充分考虑数据的可变性,因此您可能希望用更多特征来增强模型。