使用交叉验证进行模型调整

时间:2018-05-03 07:06:51

标签: cross-validation hyperparameters

我有一个适合多个模型的模型调整对象,并调整每个模型以找到每个模型的最佳超参数组合。我想对模型调整部分进行交叉验证,这是我面临的两难选择。

让我们假设我只适合一个模型 - 随机森林分类器并执行5倍交叉验证。目前,对于我遗漏的第一个折叠,我适应随机森林模型并执行模型调整。我正在使用dlib包进行模型调整。我计算评估指标(准确度,精度等)并选择最佳超参数组合。

现在当我离开第二个折叠时,我应该再次调整模型吗?因为如果我这样做,我会得到一个不同于第一种情况的超参数组合。如果我在五折中这样做,我会选择什么组合?

spark和sklearn中存在的交叉验证器使用网格搜索,因此对于每个折叠,它们具有相同的超参数组合,并且不必担心跨折叠的超参数组合的变化

当我省略第一个折叠并将其用于后续折叠时,选择最佳的超参数组合并不是正确的,因为那时我的整个模型调整取决于首先省略哪个折叠。但是,如果我每次都得到不同的超参数,我会选择哪一个?

TLDR:

如果您正在执行,请说基于衍生的模型调整以及交叉验证,您的超参数组合会随着迭代折叠而变化。那你如何选择最好的组合呢?一般来说,如何使用基于导数的模型调整方法进行交叉验证。

PS:如果您需要更多详情,请与我们联系

1 个答案:

答案 0 :(得分:1)

这是一个更多的评论,但它太长了,所以我把它作为答案发布。

交叉验证和超参数调整是两个独立的事情。进行交叉验证是为了了解模型的样本外预测误差。您可以通过使用专用验证集来完成此操作,但是如果您对此特定验证数据过度拟合,则会引发问题。因此,我们经常使用交叉验证,其中数据被分成k个折叠,每个折叠一次用于验证,而其他折叠用于拟合。在为每个折叠完成此操作后,将预测误差组合到单个度量中(例如,通过平均每个折叠的误差)。然后,对于给定的一组超参数,这会告诉您有关未见数据的预期性能的信息。

获得此单一指标后,您可以更改超参数,重复,并查看新的超参数是否获得较低的错误。这是hpyerparameter调整部​​分。 CV部分只是对给定的超参数集的模型性能进行了很好的估计,即你不会在'折叠之间'更改超参数。

我认为混淆的一个原因可能是超参数和参数之间的区别(有时也称为“权重”,“要素重要性”,“系数”等)。如果使用基于梯度的优化方法,则这些方法会在迭代之间进行更改,直到达到收敛或达到停止规则。然而,这与超参数搜索不同(例如,在随机森林中种植多少棵树?)。

顺便说一句,我认为像这样的问题应该更好地发布到StackOverflow上的交叉验证或数据科学部分。