CrossValidated 中有很多关于模型选择和交叉验证的主题。这里有几个:
- 内部与外部交叉验证和模型选择
- @DikranMarsupial对特征选择和交叉验证的最佳回答
然而,这些线程的答案是相当通用的,并且主要强调了交叉验证和模型选择的特定方法的问题。
为了使事情尽可能具体,例如,我们正在使用带有 RBF 内核的 SVM: ,并且我有一个特征X和标签y的数据集,我想
- 找到我的模型的最佳可能值(和)
- 使用我的数据集训练 SVM(用于最终部署)
- 估计泛化误差和围绕该误差的不确定性(方差)
为此,我会亲自进行网格搜索,例如,我尝试 和的所有可能组合。为简单起见,我们可以假设以下范围:
更具体地说,使用我的完整数据集,我执行以下操作:
- 对于每个 ( ,折交叉验证(例如 )的迭代(例如 100 次随机重复)折上训练我的 SVM并评估左侧折叠错误,遍历所有折叠。总的来说,我收集了 100 x 10 = 1000 个测试错误。
- 对于每个这样的 ( , ) 对,我计算这 1000 个测试错误的均值和方差。
现在我想选择最佳模型(最佳内核参数),用于在完整数据集上训练我的最终 SVM。我的理解是,选择具有最低误差均值和方差 和的模型是正确的选择,并且这个模型的是是我在训练时对模型的泛化误差偏差和方差的最佳估计完整的数据集。
但是,在阅读了上述线程中的答案后,我的印象是,这种选择最佳 SVM 进行部署和/或估计其错误(泛化性能)的方法是有缺陷的,并且有更好的方法来选择最佳 SVM 并报告其错误。如果是这样,它们是什么?我正在寻找一个具体的答案。
坚持这个问题,我如何具体选择最佳模型并正确估计其泛化误差?