在送入sklearn的GridSearchCV之前,以不同的方式处理训练/交叉验证数据

时间:2019-05-22 16:44:08

标签: python keras scikit-learn cross-validation grid-search

我正在keras中训练香草神经网络。为了选择最佳的超参数,我想使用scikit-learn API(文档here)。但是,由于我有兴趣预测每个标签的概率,因此我使用以下非常规方法来训练模型:

  • 我的数据集中的标签是非负整数。为了训练模型,我根据这些值重复采样以获取正确的损失函数。因此,将带有标签[1, 3, 0]的样本替换为四个样本[1, 0, 0][0, 1, 0][0, 1, 0][0, 1, 0]
  • 在使用这些重复样本训练模型时,为了获得概率矢量(我希望获得),我将在数据集标签中找到的上述非负整数转换为概率矢量,并使用{{ 1}}作为损失函数。上面示例中示例中的标签将替换为categorical cross-entropy

我想在scikit-learn的[0.25, 0.75, 0]中实现超参数调整。

这是Keras正常工作的部分:

GridSearchCV

还有需要适当修改的sklearn部分:

keras_model = get_model()
# get_model() returns a compiled Keras model
train = repeat_samples(train_data)
test = to_prob_vec(test_data)
keras_model.fit(train[x_cols], train[y_cols])
keras_model.evaluate(test[x_cols], test[y_cols])

我怀疑对sk_model = KerasRegressor(build_fn=get_model()) param_grid = dict(epochs=[10, 20, 30]) grid = GridSearchCV(estimator=sk_model, param_grid=param_grid) grid_result = grid.fit(<what here>) # Following is incorrect because during cross-validation # it has dummy-coded variables instead of probability vectors: # grid_result = grid.fit(train[x_cols], train[y_cols]) documentation)中的cv参数进行适当的修改将帮助我实现这一目标。我不知道怎么办。

0 个答案:

没有答案