【问题标题】:Avoid certain parameter combinations in GridSearchCV避免 GridSearchCV 中的某些参数组合
【发布时间】:2018-01-03 06:42:30
【问题描述】:

我正在使用 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 个单元。所有这些模型都是等价的,因为没有隐藏层。这是非常低效的,这意味着我需要编写更多代码来消除结果中的冗余。

有没有办法防止这种参数组合,也许是通过传递一个参数元组?

【问题讨论】:

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


【解决方案1】:

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']}
    ]

【讨论】:

    【解决方案2】:

    GridSearchCV 允许您将字典列表传递给参数:

    param_grid : 字典或字典列表

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多