我正在多核服务器上使用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,与 CPU 相比,您的折叠很少(例如 5 倍和 5 个 CPU)。通常,有些森林花费的时间比其他森林短得多,例如,如果您搜索最大深度。然后快速林将完成其工作,CPU 将处于空闲状态,而"慢速"林仍将在训练中。