使用 scikit-learn 的多级并行化

Multiple levels of parallelization with scikit-learn

我在多核服务器上使用 scikit-learn 的 RandomForestClassifier 来适应大型数据集,因此我通过设置 n_jobs = -1 来利用其并行化功能。

同时,我想执行交叉验证(使用 cross_val_score)并利用其并行化功能(同样,通过设置 n_jobs = -1)。

我的问题是使用两种类型的并行化是否会显着提高模型构建的速度,而不是仅使用单一类型并行化。如果后者是真的,那么我不确定我应该更喜欢哪种类型的并行化。 scikit-learn 文档和 SO 没有提供任何关于如何使这两种类型的并行化一起工作的想法。

请告诉我是否可以为您提供有关我的设置的更多信息,如果这有助于提供更有帮助的答案。谢谢!

不,只会使用一种类型的并行化。无法嵌套 joblib 调用。我认为将使用最外层的循环,即 cross_val_score 但我不确定。

实际上应该并行化哪个循环取决于您的设置。我可能会选择 RandomForestClassifier(n_jobs=-1) 并连续执行 cross_val_score。使用详细的 GridSearchCV,它也将很快让您对验证准确性有一些了解。

假设您并行执行 cross_val_score,与 CPUs 相比,您的折叠次数很少(比如 5 次折叠和 5 次 CPUs)。例如,如果您搜索最大深度,通常某些森林会比其他森林花费更短的时间。 然后快速森林将完成它们的工作,CPU 将空闲,而 "slow" 森林仍将进行训练。