k折交叉验证上的网格搜索

机器算法验证 机器学习 分类 交叉验证 支持向量机
2022-02-12 02:22:47

我在 10 倍交叉验证设置中有 120 个样本的数据集。目前,我选择第一个保留的训练数据并对其进行 5 折交叉验证,以通过网格搜索选择 gamma 和 C 的值。我正在使用带有 RBF 内核的 SVM。由于我正在进行 10 10 交叉验证来报告精度,回想一下,我是否在每个保留的训练数据中执行此网格搜索(有 10 个保留,每个都有 10% 的测试和 90% 的训练数据)?那会不会太费时间了?

如果我使用第一个保留的 gamma 和 C 并将其用于 k 折交叉验证的其余 9 个保留,这是否违反了因为我会使用训练数据来获取 gamma 和 C 并再次使用火车数据的一部分作为第二次坚持中的测试?

3个回答

是的,这将是违规行为,因为外部交叉验证的第 2-10 折的测试数据将是第 1 折的训练数据的一部分,这些数据用于确定内核和正则化参数的值。这意味着有关测试数据的一些信息可能会泄漏到模型的设计中,这可能会给性能评估带来乐观偏差,这对于对超参数设置非常敏感的模型(即它最强烈地偏爱具有不良特征的模型)。

对于小型数据集,这种偏差可能最强,例如这个,因为模型选择标准的方差对于小型数据集最大,这会鼓励过度拟合模型选择标准,这意味着有关测试数据的更多信息可能会泄漏通过。

一两年前我写了一篇关于这个的论文,因为我对完全嵌套交叉验证可能引入的偏差偏差的幅度感到相当吃惊,这很容易淹没分类器系统之间的性能差异。论文是“On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation”Gavin C. Cawley, Nicola LC Talbot;JMLR 11(七月):2079-2107,2010。

本质上调整超参数应该被认为是拟合模型的一个组成部分,因此每次在新的数据样本上训练 SVM 时,都要独立地重新调整该样本的超参数。如果你遵循这条规则,你可能不会错得太远。获得公正的性能估计是非常值得的计算费用,否则您将冒着从实验中得出错误结论的风险。

在对每个代理模型进行网格搜索后,您可以并且应该检查以下几件事:

  • 优化参数的变化(此处为)。 最优参数是否稳定?如果没有,你很可能会遇到麻烦。γC
  • 比较内部和外部交叉验证的报告性能。
    如果内部(即调整)交叉验证看起来比外部(最终模型的验证)好得多,那么你也有麻烦了:你过拟合了。存在很大的风险,即调整的参数根本不是最优的。但是,如果外部交叉验证正确完成(所有测试集都真正独立于各自的代理模型),那么至少您仍然可以对模型的性能进行无偏(!)估计。但是你不能确定它是最优的。
  • 最优值有多明显?对于次优参数,性能是否会迅速下降?最佳性能有多好?

关于模型选择的过度拟合有很多话要说。但是,请记住,方差和乐观偏差确实会造成伤害

  • 方差意味着您可能会意外地最终远离真正的最佳超参数。
  • 但偏见也会受到伤害:如果您过度拟合,您可能会遇到许多模型看起来非常适合内部交叉验证的情况(但实际上并非如此)。在这种情况下,调整可能会误入歧途,因为它无法识别模型之间的差异。
  • 如果偏差取决于超参数,那么你就有大麻烦了。

如果您对示例感兴趣并且可以阅读德语,我可以将我的文凭论文放到网上。

以我的经验,调整超参数对于过度拟合来说是一个非常有效的想法......

现在,如果您意识到自己过度拟合,您主要有两个选择:

  • 报告优化存在过度拟合问题,但您进行了适当的外部验证,导致......(外部交叉验证结果)。
  • 限制模型的复杂性。一种方法是修复超参数:

作为调整每个训练集的超参数的替代方法,您可以预先指定(超)参数(即预先修复它们)。我为我的模型尽可能多地这样做,因为我的案例通常比你的少,见下文。
但是,必须事先真正诚实地进行此修复:例如,我向一位同事询问了他在类似数据集(独立实验)上的优化参数,或者进行了预实验,包括对参数进行网格搜索。然后使用第一个实验来固定一些实验参数以及模型参数,以进行实际实验和数据分析。请参阅下面的进一步说明。

当然,可以对自动优化的模型(双重或嵌套验证)进行适当的测试,但您的样本量可能不允许将数据拆分两次
在这种情况下,恕我直言,报告对使用如何选择建模参数的专业经验构建的模型的诚实估计要比报告对某种自动优化模型的过度乐观估计要好得多。
关于这种情况的另一种观点是你必须权衡

  • 由于为参数优化留出了另一堆案例(较小的训练样本量 => 更差的模型,但“最佳”参数),导致性能更差
  • 由于专家的次优参数修复(但在更大的训练数据上),性能更差。

关于类似问题的一些类似想法:https ://stats.stackexchange.com/a/27761/4598


关于参数的固定和 Dikran Marsupial 的评论

我正在使用术语超参数,因为 Dikran Marsupial 在他的论文中使用它(他的答案中的链接)

我使用光谱数据。这是一种测量,其中数据分析和建模通常包括相当多的预处理。这可以看作是超参数(例如基线应该使用什么阶的多项式?应该包括哪些测量通道?)。还有其他更接近您的 svm 参数的决策,例如,如果在训练“真实”模型之前进行 PCA 降维,则使用多少主成分?有时我也使用 SVM 分类,所以我必须决定 SVM 参数。

现在,恕我直言,修复超参数的最佳方法是如果您有来自应用程序的原因。例如,我通常根据物理/化学/生物学原因(即关于样本的知识以及由此得出的光谱行为)来决定使用哪种基线。但是,我不知道这种有助于 SVM 参数的论证......

我上面提到的预实验的情况如下:

  • 我们获取一堆细胞的数据(想要区分不同的细胞系)。
  • 分析光谱,运行迭代双交叉验证 SVM(在计算服务器上花费一两个晚上)。

    • 我观察到,在绝大多数情况下,相同的被选为最优。其余情况是邻居组合。这个和其他邻居超参数组合具有非常相似的性能(一两个额外的错误分类)γC
    • 我还观察到某种过度拟合:外部交叉验证不如调优结果好。这正如预期的那样。
    • 尽管如此,超参数的调整范围内的性能仍然存在差异,并且调整网格上的性能看起来相当平滑。好的。
  • 我的结论是:虽然我不能确定最终的超参数是最优的,但外部交叉验证给了我对代理模型性能的正确估计。

  • 在实验部分,我们决定对实验设置进行一些更改(不影响数据信噪比的事情,但在仪器自动化方面更进一步)

  • 我们改进了实验设置并获得了新的光谱。就像细胞一样,它们需要新鲜生长。即新数据集甚至是独立的培养批次。

现在我面临一个决定:我是否应该“跳过”内部交叉验证,只使用我用旧数据确定的超参数?

  • 如上所述,我冒着这些预先确定的超参数不是最优的风险。
  • 但是我也不能确保通过内部(调整)交叉验证获得真正最优的超参数。
  • 但是,对旧数据的调整是稳定的。
  • 进行优化时,我将使用更少的样本进行训练:反正我的样本太少(TM)如果我留出更多样本进行第二轮交叉验证,我必须期望获得更差的模型。

所以在那种情况下,我决定使用固定参数(根据类似数据的经验,并且知道将来我们必须做“功课”,包括用大数据重新检查这些决定)。

请注意,重要的是我跳过了内部调整交叉验证),而不是外部。使用固定的超参数,我可以对可能次优模型的性能进行无偏估计。确实,这个估计有很大的方差,但是无论我是否进行内部调整,这个方差基本相同。
跳过外部交叉验证,我会得到一个调整模型的乐观偏差估计——这取决于应用程序和数据可能毫无价值(如果过于乐观的话),而乐观偏差可能显然是不可接受的。

您最初应该修复然后进行折交叉验证以获得单个测试误差估计值然后进行二维网格搜索,分别改变以生成测试误差矩阵。为了加快速度,人们通常使用对数网格,(通常是规模较小)。γCkterr(γ,C)γCγ,C{2nl,2nl+1,,2nu}γ

我认为的关键是在局部最小值(或每个 1-dim 投影)周围的表面上寻找一些平滑度,而不仅仅是取全局最小值。

请记住,对于高斯核 SVM,类似于个独立分量的多元正态数据的因此,如果您了解预测器距离的可变性,它可以帮助确定的网格,尤其是在特征相关性不太强的情况下。如果没有完美的分离平面,应该越小(对错误分类的惩罚越少)。γ(pσ)1pγCC