【发布时间】:2019-01-02 19:03:25
【问题描述】:
我正在尝试设置一个 GridSearchCV 实例以确定哪一组超参数将产生最低的平均绝对误差。 This scikit documentation 表示可以在创建 GridSearchCV(如下)时将分数指标传递到网格中。
param_grid = {
'hidden_layer_sizes' : [(20,),(21,),(22,),(23,),(24,),(25,),(26,),(27,),(28,),(29,),(30,),(31,),(32,),(33,),(34,),(35,),(36,),(37,),(38,),(39,),(40,)],
'activation' : ['relu'],
'random_state' : [0]
}
gs = GridSearchCV(model, param_grid, scoring='neg_mean_absolute_error')
gs.fit(X_train, y_train)
print(gs.scorer_)
[1] make_scorer(mean_absolute_error, greater_is_better=False)
但是网格搜索并没有选择平均绝对误差方面表现最好的模型
model = gs.best_estimator_.fit(X_train, y_train)
print(metrics.mean_squared_error(y_test, model.predict(X_test)))
print(gs.best_params_)
[2] 125.0
[3] Best parameters found by grid search are: {'hidden_layer_sizes': (28,), 'learning_rate': 'constant', 'learning_rate_init': 0.01, 'random_state': 0, 'solver': 'lbfgs'}
在运行上述代码并确定所谓的“最佳参数”后,我删除了 gs.best_params_ 中的其中一个值,并发现通过再次运行我的程序,均方误差有时会降低。
param_grid = {
'hidden_layer_sizes' : [(20,),(21,),(22,),(23,),(24,),(25,),(26,),(31,),(32,),(33,),(34,),(35,),(36,),(37,),(38,),(39,),(40,)],
'activation' : ['relu'],
'random_state' : [0]
}
[4] 122.0
[5] Best parameters found by grid search are: {'hidden_layer_sizes': (23,), 'learning_rate': 'constant', 'learning_rate_init': 0.01, 'random_state': 0, 'solver': 'lbfgs'}
为了澄清,我更改了输入网格搜索的集合,使其不包含选择隐藏层大小为 28 的选项,当进行更改时,我再次运行代码,这次它选择了隐藏层大小为 23 并且平均绝对误差减小(即使 23 的大小从一开始就可用),如果它正在评估平均绝对误差,为什么不从一开始就选择这个选项?
【问题讨论】:
标签: python scikit-learn grid-search