避免 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 是不是存储所有参数组合的所有分数?