在为支持向量机选择学习参数的背景下,如何适当地应用交叉验证?


9

出色的libsvm软件包提供了python接口和文件“ easy.py”,该文件可自动搜索学习参数(cost和gamma),以最大程度地提高分类器的准确性。在给定的一组候选学习参数中,可以通过交叉验证来实现准确性,但是我觉得这破坏了交叉验证的目的。也就是说,就学习参数本身而言,可能会导致数据过度拟合的方式选择,我觉得更合适的方法是在搜索本身的级别上应用交叉验证:执行搜索在训练数据集上进行评估,然后通过在单独的测试数据集中进行评估来评估由最终选择的学习参数得出的SVM的最终准确性。还是我在这里想念什么?

Answers:


10

如果您在完整的训练数据中学习了超参数,然后进行交叉验证,您将获得乐观的性能估计,因为每一层的测试数据都已经用于设置超参数,因此,选择所选参数的部分原因是因为它们适合测试集中的数据。以这种方式引入的乐观偏见可能会出乎意料地大。参见Cawley和Talbot,“关于模型选择中的过度拟合和性能评估中的后续选择偏差”,JMLR 11(Jul):2079-2107,2010。(尤其是第5.3节)。最好的办法是嵌套交叉验证。基本思想是交叉验证用于生成模型的整个方法,因此将模型选择(选择超参数)视为模型拟合过程(确定参数)的一部分,太错误了。

如果您对训练集使用交叉验证来确定超参数,然后使用单独的测试集在整个训练集上评估使用这些参数训练的模型的性能,那也很好(只要您有足够的数据以可靠地拟合模型并使用不相交的分区来评估性能)。


不错的参考!
安德鲁

在第二段中,您还将如何结合进行特征选择?可以吗:i)如上所述进行超参数优化(获取最佳的超参数)ii)在另一轮交叉验证中运行特征选择以获得一组顶级预测变量(特征选择基于划分为以下项的训练数据运行)使用超参数优化中使用的任何重采样方法的子训练和验证集)。iii)在完整的训练数据上训练具有最高超参数和最高预测变量的模型。在单独的测试集上进行测试。
sma

ii)在另一轮交叉验证中运行特征选择以获得一组顶级预测变量(通过用于超参数优化的重采样方法将训练数据分为子训练和验证集,然后在特征选择上运行训练数据)。
sma

或者,可以先通过交叉验证进行特征选择以获取顶级特征集,然后再使用顶级特征集对感兴趣的任何模型进行超参数调整(如上所述)。然后,仅使用已经确定的顶级特征集在完整的训练数据上以最佳超参数训练模型,并在单独的测试集上进行测试?
sma

0

我不认为在LIBSVM中会错用交叉验证,因为交叉验证是在测试数据级别完成的。它所做的只是k倍交叉验证,并搜索RBF内核的最佳参数。让我知道您不同意。


超参数的选择不应以任何方式涉及测试数据,因为这将导致乐观地估计性能。本质上,选择超参数应被视为拟合SVM的组成部分,因此测试过程还需要测试由于选择超参数而导致的错误,请参阅我在对该问题的回答中引用的论文(这是开放式访问)。
迪克兰有袋动物”
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.