我经常用 GridSearchCV
用于超参数调整。例如,用于调整正则化参数 C
在 Logistic Regression .每当我使用的估算器有自己的 n_jobs
参数我很困惑在哪里设置它,在估计器中还是在 GridSearchCV
中,或两者兼而有之?同样的事情适用于 cross_validate
.
最佳答案
这是一个非常有趣的问题。我没有明确的答案,但有一些值得一提的元素可以理解这个问题,不要在评论中冷嘲热讽。
让我们从为什么应该或不应该使用 multiprocessing 开始:
第一个要点是你不应该在
GridSearch
中使用 n_jobs以及您正在优化的模型,因为您将产生大量进程并最终减慢执行速度。 现在,很多 sklearn 模型和函数都是基于 Numpy/SciPy 的,而 Numpy/SciPy 通常是用 C/Fortran 实现的,因此已经使用了多处理。这意味着这些不应该与
n_jobs
一起使用>1套在GridSearch
.如果您假设您的模型尚未并行化,您可以选择设置
n_jobs
在模型级别或在 GridSearch
等级。一些模型能够完全并行化(例如 RandomForest
),但大多数模型可能至少有一些是顺序的(例如 Boosting
)。在另一端,GridSearch
设计上没有顺序组件,因此设置 n_jobs
是有意义的。在 GridSearch
而不是在模型中。话虽如此,这取决于模型的实现,如果不为自己的案例进行测试,您将无法获得明确的答案。例如,如果管道由于某种原因消耗了大量内存,则设置
n_jobs
在 GridSearch
可能会导致内存问题。作为补充,这里有一个很有趣的note on parallelism in sklearn
关于python - 在哪里设置 n_job : estimator or GridSearchCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041999/