【问题标题】:Paralleled cross validation for groups of hyperparameters in pythonpython中超参数组的并行交叉验证
【发布时间】:2018-10-22 13:51:42
【问题描述】:

我需要同时为特定组运行许多交叉验证

SVR 超参数:((C_0,gamma_0),(C_1,gamma_1)...(C_n,gamma_n)) 和 因此,寻求一种并行化方法来加速它。

也许可以运行 GridSearchCV,这样它就不会检查超参数的每个可能组合,而是以“元素明智”的方式检查它们。示例:

tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4],
                     'C': [100, 1000]]

clf = GridSearchCV(SVR(), tuned_parameters, cv=5, n_jobs=-1) 

clf.fit(X_train, y_train)

因此在这种情况下,将只检查两对超参数,即:(1e-3,100) 和 (1e-4,1000),而不是所有四个组合。

【问题讨论】:

  • 您考虑过“n_jobs”选项吗?它不会在超参数上并行化,而是在每个超参数的交叉验证数量上并行化。
  • 刚刚编辑了帖子。我总是使用 n_jobs=-1。但是,这并不能解决我的问题。
  • 听起来您不是在寻找一种并行处理的方法(即通过设置njobs = N 来实现),而是在寻找一种处理自定义参数集而不是整个网格的方法。如果是这样,您为什么不直接循环通过KFold.split()see example in the docs 自己运行CV 或使用RandomizedSearchCV
  • 特别考虑到 Vivek Kumar 的回答,这个问题可能与 this question 重复
  • @Quickbeam2k1 你是对的。对不起。我找不到这个答案。

标签: python scikit-learn svm grid-search hyperparameters


【解决方案1】:

您可以尝试使用字典列表来指定参数。

类似这样的:

tuned_parameters = [{'kernel': ['rbf'], 
                     'gamma': [1e-3],
                     'C': [100]}, 
                    {'kernel': ['rbf'], 
                     'gamma': [1e-4],
                     'C': [1000]}]

现在调用 clf.fit() 将在参数列表的两个元素上搜索参数,一次使用一个中的所有值。

所以只会使用两种组合:('rbf', 1e-3, 100) 和 ('rbf', 1e-4, 1000)

【讨论】:

  • 很好,它有效,谢谢。不幸的是,我不能投票给你的答案,因为我在这里没有名声。希望有人会发现这个答案有帮助。
猜你喜欢
  • 2018-08-06
  • 2019-11-16
  • 2020-08-04
  • 2018-08-16
  • 2021-06-11
  • 2020-03-03
  • 2019-09-20
  • 2020-02-10
  • 2018-03-07
相关资源
最近更新 更多