避免使用GridSearchCV中的某些参数组合

时间:2017-07-27 13:35:52

标签: python machine-learning parameters scikit-learn grid-search

我正在使用scikit-learn的GridSearchCV迭代参数空间来调整模型。具体来说,我用它来测试神经网络中的不同超参数。网格如下:

params = {'num_hidden_layers': [0,1,2],
          'hidden_layer_size': [64,128,256],
          'activation': ['sigmoid', 'relu', 'tanh']}

问题是,当隐藏num_hidden_layers设置为0时,我最终会运行冗余模型。它将运行一个具有0个隐藏层和64个单元的模型,另一个具有128个单元,另一个具有256个单元。所有这些模型都是等价的,因为没有隐藏层。这是非常低效的,这意味着我需要编写更多代码来删除结果中的冗余。

有没有办法阻止这样的参数组合,可能是通过传递一组参数?

2 个答案:

答案 0 :(得分:7)

sklearn documentation建议使用两个参数网格。

所以你可以这样做:

param_grid = [
    {'num_hidden_layers': [1,2],
      'hidden_layer_size': [64,128,256],
      'activation': ['sigmoid', 'relu', 'tanh']},
    {'num_hidden_layers': [0],
      'hidden_layer_size': [64],
      'activation': ['sigmoid', 'relu', 'tanh']}
    ]

答案 1 :(得分:7)

GridSearchCV允许您将词典列表传递给params:

  

param_grid:dict或词典列表

     

带有参数名称(字符串)作为键和列表的字典   尝试作为值的参数设置,或此类词典的列表,   在这种情况下,列表中每个字典跨越的网格是   探讨。这样可以搜索任何参数序列   设置。

因此,您可以将这些词典指定为原始词典的某些子词。因此,您可以避免不相关的组合。