对于超参数调整(随机搜索/网格搜索/贝叶斯优化),每组超参数都进行了许多试验。为了评估一组超参数有多好,我们可以使用 k 折交叉验证,将训练数据分成 k 折。
以前,我曾经将训练数据拆分为 k 折,并在我的所有超参数试验中使用相同的折拆分。然而,在尝试了 sklearn Pipelines 之后,似乎使用带有 RandomsearchCV 的管道会导致每个超参数试验的 k 折拆分不同。
我想知道如果我们对所有试验都使用相同的 k 折叠分割是否重要,或者我们为每个试验随机分割是否很重要?
对于超参数调整(随机搜索/网格搜索/贝叶斯优化),每组超参数都进行了许多试验。为了评估一组超参数有多好,我们可以使用 k 折交叉验证,将训练数据分成 k 折。
以前,我曾经将训练数据拆分为 k 折,并在我的所有超参数试验中使用相同的折拆分。然而,在尝试了 sklearn Pipelines 之后,似乎使用带有 RandomsearchCV 的管道会导致每个超参数试验的 k 折拆分不同。
我想知道如果我们对所有试验都使用相同的 k 折叠分割是否重要,或者我们为每个试验随机分割是否很重要?
正如您最初所做的那样,在比较不同模型时使用相同的折叠实际上会更好。如果将管道对象输入到 randomCV 对象中,它应该使用相同的折叠。但是,如果你反其道而行之,每次运行都会改变你所说的折叠。cv
即使在这种情况下,您也可以通过修复管道对象中的参数来修复折叠。
使用相同或不同的拆分相当于使用不同的实验设计进行优化:
使用相同的拆分意味着您正在以配对方式为优化设置比较。配对测试/比较通常具有更高的统计能力,您可以将其用于优化决策。
为超参数调整保持相同的折叠是更好的主意。如果您在每次迭代中都有随机数据,那么您将无法理解模型中的差异是由于随机数据还是不同的超参数。因此,为了消除由于数据随机性导致的模型差异,我们通常使用静态折叠,可以在网格或随机搜索开始之前创建。
让我首先重新表述这个问题,使其更准确一点:
“我想知道,如果我们对所有试验都使用相同的 k 倍拆分,或者我们为每个试验随机拆分是否很重要,这是否重要?”
假设您使用固定折叠和随机折叠执行超参数调整。通常,这两种调音将选择不同的型号作为最佳型号。如果这两个模型具有显着不同的性能,则拆分方法很重要。相反,如果性能差异可以忽略不计,则选择固定或随机折叠并不重要,因为它们都选择了同样好的模型。我将暂时搁置您如何确定两个选定模型是否不同(不是微不足道的,但这是一个单独的主题)。
据我所知,几乎没有关于您的问题的文献发表。这两种方法我都用过,没有注意到性能上的差异,但没有系统地探讨这个问题。但是,如果选择随机折叠还是固定折叠有显着影响,就会有关于它的发表报告。因此,我的回答是,在实际意义上,您使用哪种方法并没有什么区别
可以肯定的是,交叉验证可以为小样本量产生严重偏差的性能估计,但无论是固定的还是随机的 CV 都不能解决此类数据集中的问题。使用重复 CV 和嵌套 CV 可以在一定程度上缓解它:
https://jcheminf.biomedcentral.com/articles/10.1186/1758-2946-6-10