调整参数时,在交叉验证的SVM中识别过度拟合

比德

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

伊利

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

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

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

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

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

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

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

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

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尽管非常成功的交叉验证结果与随机森林过度拟合

来自分类Dev

训练svm模型时如何调整参数

来自分类Dev

在R(线性SVM内核)中调整svm参数

来自分类Dev

在MATLAB中实现SVM模型交叉验证的不同方法

来自分类Dev

在mlr3中使用classif.svm调整参数时出错

来自分类Dev

调整参数SVM

来自分类Dev

SVM参数调整

来自分类Dev

调整参数SVM

来自分类Dev

尽管我在逻辑回归中使用了 cross_val_score 的交叉验证,但为什么我的数据过度拟合?

来自分类Dev

在 python 中尝试交叉验证时出错

来自分类Dev

网格搜索和交叉验证 SVM

来自分类Dev

如何调整SVM Rank的参数?

来自分类Dev

努力了解fbprophet库中交叉验证功能的参数

来自分类Dev

未传递拟合参数时,在Seaborn distplot中获取拟合曲线的参数

来自分类Dev

在scikit-learn中对自定义内核SVM进行交叉验证

来自分类Dev

在SVM中使用内核是否增加了过度拟合的机会?

来自分类Dev

RNN中的过度拟合用于标普预测

来自分类Dev

如何避免在给定的 Convnet 中过度拟合

来自分类Dev

Lenskit中的交叉验证

来自分类Dev

LIBSVM过度拟合

来自分类Dev

随机森林过度拟合

来自分类Dev

LSTM实施/过度拟合

来自分类Dev

LIBSVM过度拟合

来自分类Dev

插入符-使用plot.train时缩放SVM调整参数t(Sigma)

来自分类Dev

使用插入符号在R中进行交叉验证的SVM

来自分类Dev

如何使用多类SVM实现k倍交叉验证

来自分类Dev

如何识别 Python 中的过拟合和欠拟合

来自分类Dev

R:调整SVM参数-{e1071}包中的class.weights

来自分类Dev

gnuplot中的多个拟合参数