LIBSVM过拟合

5

我使用15451个样本对两个支持向量机(LIBSVM)进行训练,经过10倍交叉验证后找到了gamma和C(RBF内核)的最佳参数值。在一个支持向量机中,我只使用了一个特征,在第二个支持向量机中使用了额外的特征(以查看此附加项是否有助于提高预测)。 经过CV后,我拥有75%(使用一种特征的支持向量机)和77%(使用该额外特征的支持向量机)的准确性。 在测试另外15451个实例后,它们各自的准确度分别为70%和72%。

我知道这被称为过度拟合,但在这里是否显着,因为只有5%的差异。

我应该如何避免过度拟合?

仅使用一到两个特征和相对较大的训练集是否有益?

希望可以帮助您解决问题。


1
你为什么认为你在过度拟合呢?在CV设置中获得比实际训练集更高的分数是很正常的。 - Fred Foo
这个问题似乎与统计有关,因此可能更适合在stats.stackexchange.com上提问。 - Fred Foo
在学习SVM的表现和使用方法时,我经常听到这样一种观点:如果你在交叉验证中获得了更高的准确率,但在测试后却降低了,那么你就是过拟合了。这就是我认为自己存在问题的原因。 - user3585509
1个回答

4
在这里似乎存在一些关于过拟合的困惑。
简而言之,“过拟合”并不意味着你对训练集进行拟合的准确性(显著)高于对通用测试集的拟合。相反,这是其影响,而不是原因。
“过拟合”意味着您的模型正在努力尝试以任何代价来拟合训练集,并且在获取了所有信号之后,开始适应噪声。作为一个(非常标准的)例子,想象一下生成来自一条直线的数据点,然后添加一些高斯噪声:点将“大致上”在一条直线上,但不完全如此。当您尝试找到通过每个点的曲线(例如27次多项式)时,您正在过度拟合,而您真正需要的只是一条直线。
一个可视化检查方法是绘制学习曲线。
这个网页看起来很有信息量,所以我会从这里开始了解更多:http://www.astroml.org/sklearn_tutorial/practical.html

感谢您的回答。那么这意味着模型没有过拟合,因为模型在训练集上表现更好是很常见的事情(因为我还选择了与最佳准确性相对应的参数值),并且在预测测试数据时略微差一些...? - user3585509
也许有点跑题,但是当我比较两个支持向量机(具有不同数量的特征,但在相同的数据上)时,我怎么能确定一个支持向量机(具有额外的特征)比另一个更好呢?因为如果我增加C参数,两个支持向量机的交叉验证准确率都会提高...我怎么知道何时停止增加C?如果我说在特定范围内,第二个支持向量机略微更好,我可能是错的,因为可能存在一些超出此范围的C值,可以导致最初性能较差的支持向量机表现更好...你知道我的意思吗? - user3585509
我知道你的意思 :) 关键在于认识到机器学习具有一些固有的限制,这是由于你想从有限的数据中学习一个通用规则,并将其应用于可能无限的数据... 当然,它不会起作用,至少在一般情况下不会。理论教你如何以最佳方式使用你所拥有的东西(例如,“始终使用测试集”),以及如何估计你可以在样本外做得多好。 - Tex
所以回答你有关比较两个SVM的问题...你应该有一个测试集来评估你的模型。记住,这里的指导原则是,你使用某些数据做决策的次数越多,这个数据集就会变得“脏”,你过拟合的风险就越高。如果你只有一个训练集和一个测试集,并且想尝试99999个不同的C值,那么你就有了99999个不同的模型,并且你正在使用你的测试集对它们进行决策(“哪一个最好?”)。这很可能会导致你选择最适合该集合的最佳模型。 - Tex
在实践中,您希望拥有两个单独的“测试集”和一个训练集。在第一个“测试集”(我们称之为“验证集”)上,您会调整参数(Yaser Abu-Mostafa教授建议每个要估计的参数都有100个示例)。然后,假设您在验证集上选择了三个最佳模型,然后在测试集上运行它们以选出赢家。这样能够选择到最好的模型吗?可能不是,但鉴于您拥有的数据量,这将是最明智的决策。 - Tex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接