【问题标题】:How to define the grid (for using grid search) from scratch in Python?如何在 Python 中从头开始定义网格(用于使用网格搜索)?
【发布时间】:2021-11-16 21:14:34
【问题描述】:

我编写了一个函数,它接受参数名称(可以是任何大小>0)和数值的字典,并返回包含所有可能组合的字典列表。

例如:

myFunc({'ParA':[1,2,3], 'ParB': [0.1,0.2,0.3,0.4]})

会回来

[{'ParA':1, 'ParB':0.1},{'ParA':1, 'ParB':0.2}...{'ParA':2, 'ParB':0.1}....{'ParA':3, 'ParB':0.4}]

通常我会使用嵌套循环,但我事先不知道参数的数量。

另一个挑战是每个参数中可能值的数量会发生变化,因此长度不会在字典中排序。

有什么聪明的方法吗?

注意:它必须从头开始,因此 SciPy 没有网格搜索功能

【问题讨论】:

  • 使用itertools.product
  • @Julien 谢谢,正是我想要的。

标签: python grid-search


【解决方案1】:

这是基于 Julien 的回答 (itertools.product) 的解决方案:

def makeGrid(pars_dict):  
    keys=pars_dict.keys()
    combinations=itertools.product(*pars_dict.values())
    ds=[dict(zip(keys,cc)) for cc in combinations]
    return ds

【讨论】:

  • 请注意,不需要强制转换为列表,因为您只需迭代一次。这样做会使您失去迭代器的优势,而无济于事。另外,return 是一个语句,而不是一个函数,所以你应该写return ds(虽然你写的不是无效的)。虽然我个人只会返回 listcomp 而不分配变量只是为了返回它(这会结束)。
  • @2e0byo 谢谢!我改变了我的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多