使用单独的验证集在 Python 中进行超参数优化
Hyperparameter optimisation in Python with a separate validation set
我正在尝试优化 Python 中 random forest regressor 的超参数。
我有 3 个独立的数据集:train/validate/test。因此,我不想使用交叉验证方法,而是想使用特定的验证集来调整超参数,即 .
中描述的“第一种方法”
现在,sklearn 有一些很好的内置方法可以使用交叉验证来优化超参数(例如 this tutorial), but what about if I want to tune my hyperparameters with a specific validation set? Is it still possible to use a method like RandomizedSearchCV?
cv
选项确实可以。正如 documentation 所建议的,可能的输入之一是 train/test 索引元组的可迭代:
An iterable yielding (train, test) splits as arrays of indices.
因此,将训练和验证索引打包为元组的大小为 1 的列表就可以了。
我认为我们应该澄清一些措辞:
'Validation set'
验证集用于在 未见 数据集(即用于训练的 not 数据集上评估模型。这是为了模拟您的模型如何处理新数据。我们使用验证集来调整我们的超参数,例如树的数量、最大深度等,并选择在验证集上效果最好的超参数。
'Cross-validate'
当您进行 CV(交叉验证)时,例如,将数据分成 5 组,其中组 [1,2,3,4] 用于训练,组 5 用于验证。然后您使用 [2,3,4,5] 进行训练并使用第 1 组进行验证 - 您重复此操作直到所有组(即使用 5 倍时 5 次)都已用作验证集,然后您将平均5 validation-score 例如获得一个你想要(经常)最大化的分数的准确性。
回答
所以,回答你的问题;是的,您可以在验证集上使用 GridSearchCV,但此后情况并不常见。您经常会执行以下操作之一:
a) 使用一个(即一个)验证集来调整您的超参数,如“验证集”中所述
b) 使用所有数据,即训练+验证作为一个数据集,然后 运行 一个,比如说,5 折网格 CV 搜索,如“交叉验证”中所述
我正在尝试优化 Python 中 random forest regressor 的超参数。
我有 3 个独立的数据集:train/validate/test。因此,我不想使用交叉验证方法,而是想使用特定的验证集来调整超参数,即
现在,sklearn 有一些很好的内置方法可以使用交叉验证来优化超参数(例如 this tutorial), but what about if I want to tune my hyperparameters with a specific validation set? Is it still possible to use a method like RandomizedSearchCV?
cv
选项确实可以。正如 documentation 所建议的,可能的输入之一是 train/test 索引元组的可迭代:
An iterable yielding (train, test) splits as arrays of indices.
因此,将训练和验证索引打包为元组的大小为 1 的列表就可以了。
我认为我们应该澄清一些措辞:
'Validation set'
验证集用于在 未见 数据集(即用于训练的 not 数据集上评估模型。这是为了模拟您的模型如何处理新数据。我们使用验证集来调整我们的超参数,例如树的数量、最大深度等,并选择在验证集上效果最好的超参数。
'Cross-validate'
当您进行 CV(交叉验证)时,例如,将数据分成 5 组,其中组 [1,2,3,4] 用于训练,组 5 用于验证。然后您使用 [2,3,4,5] 进行训练并使用第 1 组进行验证 - 您重复此操作直到所有组(即使用 5 倍时 5 次)都已用作验证集,然后您将平均5 validation-score 例如获得一个你想要(经常)最大化的分数的准确性。
回答
所以,回答你的问题;是的,您可以在验证集上使用 GridSearchCV,但此后情况并不常见。您经常会执行以下操作之一:
a) 使用一个(即一个)验证集来调整您的超参数,如“验证集”中所述
b) 使用所有数据,即训练+验证作为一个数据集,然后 运行 一个,比如说,5 折网格 CV 搜索,如“交叉验证”中所述