我不确定我的代码在这里是否会有所帮助,因为我的问题相当笼统。
这是我通过 sklearn 的代码找到的答案:RandomizedSearchCV 不会以简单的方式返回拆分后的验证数据,我绝对应该将我的初始训练和验证集合并到一个更大的训练集中,并让 RandomizedSearchCV 将其拆分为训练和验证集。
train_data 使用交叉验证器将 CV 拆分为训练/验证集(在我的情况下,分层 K-Folds http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html )
我的估算器定义如下:
class DNNClassifier(BaseEstimator, ClassifierMixin):
它需要一个评分函数才能评估验证集上的 CV 性能。ClassifierMixin 类中定义了一个默认的得分函数(它返回平均准确率,需要在 Estimator 类中实现预测函数)。
就我而言,我在我的估算器类中实现了一个自定义评分函数。
超参数搜索和 CV 拟合是通过调用 RandomizedSearchCV 的拟合函数完成的。
RandomizedSearchCV(DNNClassifier(), param_distribs).fit(train_data)
该拟合函数在训练集上运行估计器的自定义拟合函数,然后在验证集上运行得分函数。
这是使用 ._validation 库中的 _fit_and_score 函数完成的。
所以我可以在估计器的拟合函数结束时访问自动拆分的验证集(我的 train_data 输入的 33%)。
我更喜欢在我的估计器的 fit 函数中访问它,这样我就可以使用它来绘制训练步骤的验证准确性并提前停止(我将为此保留一个单独的验证集)。
我想我可以通过从我的初始 train_data 中查找丢失的索引来重建自动生成的验证集(估计器的 fit 函数中使用的 train_data 具有初始 train_data 索引的 66%)。
如果这是某人已经做过的事情,我很想听听!