我正在运行一个4倍交叉验证的超参数调优使用sklearn的'cross_validate‘和'KFold’函数。假设我的训练数据集已经被洗牌了,那么在分割成批/折叠(即KFold函数中的洗牌参数)之前,我是否应该对每一次超调参数调优重新洗牌数据?我注意到,超参数调优过程的结果将是不同的,这取决于在将数据分割成折叠之前对数据进行洗牌。
我假设,如果结果取决于洗牌,那么模型就不稳定了。这是正确的吗?然而,这也可能对模型“不公平”,因为结果是不可复制的,因为每次我运行交叉验证时,每个折叠的数据都是不同的(也就是说,每个超参数组合都在完全不同的褶皱上进行评估。例如,第一次调优迭代的折叠#1中的训练/验证数据集与第二次调优迭代的折叠#1数据集不同。
发布于 2020-02-28 12:40:14
这是个很好的问题。对每个超参数点使用相同的折叠分裂可以将超参数调整为数据分割。然而,对于每个超参数点使用不同的折叠分裂使得它们之间的比较不是(准确地)苹果对苹果。
我认为为每个超参数设置相同的折叠更好。作为参考,请注意sklearn的xyzSearchCV函数的执行方式是这样的:它们采用带有折叠的搜索点的乘积,并适合这些组合中的每一个。你可以通过反复的k-折叠来缓解过度分裂的问题。
发布于 2020-02-27 20:38:10
我正在运行一个4倍交叉验证的超参数调优使用sklearn的'cross_validate‘和'KFold’函数。假设我的训练数据集已经被洗牌了,那么在分割成批/折叠(即KFold函数中的洗牌参数)之前,我是否应该对每一次超调参数调优重新洗牌数据?
不,它不需要,在分裂之前需要洗牌。
我假设,如果结果取决于洗牌,那么模型就不稳定了。这是正确的吗?
你说得对,好模型在每一个数据组合上都有很好的表现。
然而,这对模型也可能不公平,因为每次我运行交叉验证时,每个折叠的数据都是不同的(也就是说,每个超参数组合都是在完全不同的折叠上评估的),所以结果是不可复制的。例如,第一次调优迭代的折叠#1中的训练/验证数据集与第二次调优迭代的折叠#1数据集不同。
您可以进行交叉验证以检查每个数据块的性能。你的任务完成得非常慷慨。
https://datascience.stackexchange.com/questions/68828
复制相似问题