GridSearchCV() 之后要做什么?

数据挖掘 神经网络 喀拉斯 回归 网格搜索 网格搜索
2022-02-19 17:03:46

我很高兴地创建了我的第一个 NN 并通过GridSearchCV. 我只是不知道下一步该怎么做。我是否必须用GridSearchCV()显示的最佳参数再次拟合它?有没有一种优雅的方式来做到这一点?否则,如何进行?

def create_model(...

    model.compile(loss='mean_squared_error', optimizer=optimizer, metrics=['accuracy'])            
    return model

model = KerasRegressor(build_fn=create_model, verbose=0)

> hypparas
{'batch_size': [2, 6], 'optimizer': ['Adam', 'sgd'], 'opt_par': [0.5, 0.8]}

GridSearchCV(estimator=model 
                    , param_distributions=hypparas 
                    , n_jobs=1   
                    , n_iter=20
                    , cv=3 
                    )

grid_result = grid_obj.fit(X_train1, y_train1, callbacks = [time_callback])


print("Best: %f using %s" %  (grid_result.best_score_, grid_result.best_params_), "\n")

means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']

for mean, stdev, param in zip(means, stds, params):
    print("%f (%f) with: %r" % (mean, stdev, param))

    Best: -0.941568 using {'optimizer': 'Adam', 'opt_par': 0.8, 'batch_size': 2} 

    -1.725617 (0.620383) with: {'optimizer': 'Adam', 'opt_par': 0.5, 'batch_size': 2}
    -1.595137 (0.224487) with: {'optimizer': 'sgd', 'opt_par': 0.5, 'batch_size': 2}
    -0.941568 (0.149151) with: {'optimizer': 'Adam', 'opt_par': 0.8, 'batch_size': 2}
    -1.338372 (0.523434) with: {'optimizer': 'sgd', 'opt_par': 0.8, 'batch_size': 2}
    -1.094907 (0.121018) with: {'optimizer': 'Adam', 'opt_par': 0.5, 'batch_size': 6}
    -1.588476 (0.569475) with: {'optimizer': 'sgd', 'opt_par': 0.5, 'batch_size': 6}
    -1.443133 (0.342028) with: {'optimizer': 'Adam', 'opt_par': 0.8, 'batch_size': 6}
    -1.275414 (0.331939) with: {'optimizer': 'sgd', 'opt_par': 0.8, 'batch_size': 6}
1个回答

您可以使用grid_obj.predict(X)grid_obj.best_estimator_.predict(X)使用调整后的估计器。但是,我建议你得到这个_best_estimator并用完整的数据集再次训练它,因为在 GridSearchCV 中,你用 K-1 折训练,你失去了 1 折来测试。更多数据,更好的估计,对吧?