我正在尝试设置GridSearchCV的实例,以确定哪组超参数将产生最低的平均绝对误差。此scikit文档指示可以在创建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的大小),如果它正在评估平均绝对误差,为什么不从一开始就选择此选项呢?
不负相思意
相关分类