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 中使用交叉验证执行 GridSearchCV