python中超参数组的并行交叉验证

Posted

技术标签:

【中文标题】python中超参数组的并行交叉验证【英文标题】:Paralleled cross validation for groups of hyperparameters in python 【发布时间】: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 你是对的。对不起。我找不到这个答案。 【参考方案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)

【讨论】:

很好,它有效,谢谢。不幸的是,我不能投票给你的答案,因为我在这里没有名声。希望有人会发现这个答案有帮助。

以上是关于python中超参数组的并行交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

python sklearn:使用交叉验证调整参数

python sklearn:使用交叉验证调整参数

如何在 python 中使用交叉验证执行 GridSearchCV

使用带有管道和 GridSearch 的 cross_val_score 进行嵌套交叉验证

神经网络中啥是交叉验证,为啥要进行交叉验证?

交叉验证及其目的