如何通过 RandomizedSearchCV 使用交叉验证拆分数据

How to use cross-validation splitted data with RandomizedSearchCV

我正在尝试使用 RandomizedSearchCV 从单个 运行 超参数调优转移我的模型。

在我的单个 运行 案例中,我的数据被拆分为 train/validation/test 数据。

当我使用默认的 3 倍 CV 在 train_data 上 运行 RandomizedSearchCV 时,我注意到 train_input 的长度减少到 train_data 的 66% (这在 3 倍的 CV 中是有意义的...)。

所以我猜我应该将我的初始训练集和验证集合并成一个更大的训练集,然后让 RandomizedSearchCV 将其拆分为训练集和验证集。

这是正确的方法吗?

我的问题是:如何访问我的 train_input 剩余的 33% 以将其提供给我的验证准确性测试函数(请注意,我的评分函数在测试集上是 运行ning) ?

感谢您的帮助! 约安

我不确定我的代码是否对这里有帮助,因为我的问题很笼统。

这是我通过 sklearn 的代码找到的答案:RandomizedSearchCV 不会 return 以简单的方式拆分验证数据,我绝对应该将我的初始训练和验证集合并到一个更大的训练集并让 RandomizedSearchCV 将其拆分为训练集和验证集。

使用交叉验证器将 train_data 拆分为 train/validation 集(在我的例子中,分层 K 折 http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html

我的估算器定义如下:

class DNNClassifier(BaseEstimator, ClassifierMixin):

它需要一个评分函数才能评估验证集上的 CV 性能。 ClassifierMixin class 中定义了一个默认评分函数(return 是平均准确度,需要在 Estimator class 中实现预测函数)。

就我而言,我在估算器中实现了一个自定义评分函数 class。

调用 RandomizedSearchCV 的拟合函数完成超参数搜索和 CV 拟合。

RandomizedSearchCV(DNNClassifier(), param_distribs).fit(train_data)

此拟合函数在训练集上运行估计器的自定义拟合函数,然后在验证集上运行评分函数。

这是使用 ._validation 库中的 _fit_and_score 函数完成的。

所以我可以在估算器的拟合函数结束时访问自动拆分的验证集(我的 train_data 输入的 33%)。

我更愿意在我的估算器的拟合函数中访问它,这样我就可以用它来绘制训练步骤的验证准确性和提前停止(我会为此保留一个单独的验证集)。

我想我可以通过从我的初始 train_data 中查找缺失的索引来重建自动生成的验证集(估计器的拟合函数中使用的 train_data 有 66% 的索引初始 train_data).

如果这是有人已经做过的事情,我很想听听!