当 GridSearchCV 与 KerasRegressor 一起使用时,scikit-learn GridSearchCV best_score_ 的含义是什么?
What is the meaning of scikit-learn GridSearchCV best_score_ when GridSearchCV is used with KerasRegressor?
我使用 scikit_learn.GridSearchCV 为我的 Keras 神经网络(针对回归问题)网格搜索超参数。我的神经网络的输出是一个实数值:
#generate a model (createModel is a function which returns a keras.Sequential model)
model = keras.wrappers.scikit_learn.KerasRegressor(build_fn=createModel)
#run the GridSearch
paramGrid = dict( epochs=[100, 250, 500], batch_size=[16, 32, 64] )
grid = sklearn.model_selection.GridSearchCV(estimator=model, param_grid=paramGrid, n_jobs=1, cv=5)
#obtain and print the result (X, y are some data)
grid_result = grid.fit(X, y)
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
我不明白网格搜索结果中的 best_score_ 成员到底是什么。是理论值和预测值之间的差距吗?这个 best_score_ 在我的例子中总是负面的(而且很大),对我来说没有任何意义。
当您不传递特定的 scoring
指标时,GridSearchCV 将使用 estimator
的默认 score
方法。
在您的示例中,您没有将指标传递给网格搜索实例,因此它将使用默认得分指标 KerasRegressor
,这是预测的平均损失(根据 source code on GitHub).因此,由于您设置了 cv=5
,grid_result.best_score_
是所有 5 次平均损失的平均值。
我建议您通过传递 scoring
的值来设置自己的性能指标。例如:
grid = sklearn.model_selection.GridSearchCV(estimator=model, param_grid=paramGrid,
scoring='roc_auc', n_jobs=1, cv=5)
您可以找到所有支持指标的列表 here。您也可以定义自己的。
我使用 scikit_learn.GridSearchCV 为我的 Keras 神经网络(针对回归问题)网格搜索超参数。我的神经网络的输出是一个实数值:
#generate a model (createModel is a function which returns a keras.Sequential model)
model = keras.wrappers.scikit_learn.KerasRegressor(build_fn=createModel)
#run the GridSearch
paramGrid = dict( epochs=[100, 250, 500], batch_size=[16, 32, 64] )
grid = sklearn.model_selection.GridSearchCV(estimator=model, param_grid=paramGrid, n_jobs=1, cv=5)
#obtain and print the result (X, y are some data)
grid_result = grid.fit(X, y)
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
我不明白网格搜索结果中的 best_score_ 成员到底是什么。是理论值和预测值之间的差距吗?这个 best_score_ 在我的例子中总是负面的(而且很大),对我来说没有任何意义。
当您不传递特定的 scoring
指标时,GridSearchCV 将使用 estimator
的默认 score
方法。
在您的示例中,您没有将指标传递给网格搜索实例,因此它将使用默认得分指标 KerasRegressor
,这是预测的平均损失(根据 source code on GitHub).因此,由于您设置了 cv=5
,grid_result.best_score_
是所有 5 次平均损失的平均值。
我建议您通过传递 scoring
的值来设置自己的性能指标。例如:
grid = sklearn.model_selection.GridSearchCV(estimator=model, param_grid=paramGrid,
scoring='roc_auc', n_jobs=1, cv=5)
您可以找到所有支持指标的列表 here。您也可以定义自己的。