避免 GridSearchCV 中的某些参数组合

Posted

技术标签:

【中文标题】避免 GridSearchCV 中的某些参数组合【英文标题】:Avoid certain parameter combinations in 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 个单元。所有这些模型都是等价的,因为没有隐藏层。这是非常低效的,这意味着我需要编写更多代码来消除结果中的冗余。

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

【问题讨论】:

我应该补充一点,这个问题与这里提到的不同,用户想要跳过会产生错误的“禁止”组合:***.com/questions/43009566/… 【参考方案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 : 字典或字典列表

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

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

【讨论】:

以上是关于避免 GridSearchCV 中的某些参数组合的主要内容,如果未能解决你的问题,请参考以下文章

使用 GridSearchCV 时跳过禁止的参数组合

使用GridSearchCV时跳过禁止参数组合

GridSearchCV 是不是存储所有参数组合的所有分数?

gridsearchCV - 每个参数组合的随机数据

python 超参数 自动搜索模块GridSearchCV(收藏)

使用嵌套在 GridSearchCV 中的 RFECV 时,如何避免使用 estimator_params?