我在多核服务器上使用scikit-learn RandomForestClassifier以适应大型数据集,因此我通过设置n_jobs = -1
来利用其并行化功能。
同时,我想执行交叉验证(使用cross_val_score)并同时使用其并行化功能(同样,通过设置n_jobs = -1
)。
我的问题是,使用两种类型的并行化是否会显着提高模型构建的速度,而不仅仅是使用单一类型的并行化。如果后者是真的,那么我不确定我应该选择哪种类型的并行化。 scikit-learn文档和SO不提供任何关于如何使两种类型的并行化协同工作的想法。
如果我能为您提供有关我的设置的更多信息,请告诉我是否有助于提供更有用的答案。谢谢!
答案 0 :(得分:2)
不,只使用一种类型的并行化。无法嵌套joblib调用。我认为最外层的循环将被使用,即cross_val_score
,但我不确定。
您应该实际并行化的哪个循环取决于您的设置。我可能会选择RandomForestClassifier(n_jobs = -1)并按顺序执行cross_val_score。使用详细的GridSearchCV,它还可以非常快速地为您提供有关验证准确性的一些见解。
相反,您可以并行执行cross_val_score,与CPU相比,您可以轻松折叠(比如5倍和5个CPU)。例如,如果您搜索最大深度,通常一些森林将比其他森林花费更短的时间。 然后快速森林将完成他们的工作,CPU将闲置,而“慢”"森林仍将继续训练。