首页 > 解决方案 > 使用交叉验证进行模型调整

问题描述

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

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

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

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

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

TLDR:

如果您正在执行假设基于导数的模型调整以及交叉验证,那么您的超参数组合会随着您对折叠的迭代而改变。那么如何选择最佳组合呢?一般来说,如何将交叉验证与基于导数的模型调优方法结合使用。

PS:如果您需要更多详细信息,请告诉我

标签: cross-validationhyperparameters

解决方案


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

交叉验证和超参数调整是两个不同的东西。进行交叉验证是为了了解模型的样本外预测误差。你可以通过一个专用的验证集来做到这一点,但是如果你过度拟合这个特定的验证数据,这就提出了一个问题。因此,我们经常使用交叉验证,将数据拆分为k折叠,每个折叠用于验证一次,而其他折叠用于拟合。在为每个折叠完成此操作后,您将预测误差组合成单个度量(例如,通过平均每个折叠的误差)。然后,这会告诉您对于给定的一组超参数,在未见数据上的预期性能。

一旦你有了这个单一的指标,你就可以改变你的超参数,重复一遍,看看新的超参数是否会降低错误。这是 hpyerparameter 调整部分。CV 部分只是对给定超参数集的模型性能进行良好估计,即您不会在“折叠”之间更改超参数。

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

顺便说一句,我认为最好将此类问题发布到 StackOverflow 上的交叉验证或数据科学部分。


推荐阅读