gpt4 book ai didi

scikit-learn - 对于 Scikit-Learn 的 RandomForestRegressor,我可以为预测指定不同的 n_jobs 吗?

转载 作者:行者123 更新时间:2023-12-05 06:37:14 32 4
gpt4 key购买 nike

Scikit-Learn's RandomForestRegressor有一个 n_jobs 实例属性,来自文档:

n_jobs : integer, optional (default=1)

The number of jobs to run in parallel for both fit and predict. If
-1, then the number of jobs is set to the number of cores.

用一个以上的核心训练随机森林模型显然比在一个单一的核心上有更高的性能。但我注意到预测要慢很多(大约慢 10 倍)——这可能是因为我在逐个观察的基础上使用 .predict()

因此,我想在 4 个核心上训练随机森林模型,但在单个核心上运行预测。 (模型为 pickled,并在单独的过程中使用。)

是否可以用这种方式配置 RandomForestRegressor()

最佳答案

当然可以,我对存储模型使用了类似的策略。

只需设置<_aRFRegressorModel_>.n_jobs = 1pickle.load() 之后-ed,在使用 .predict() 之前方法。

注意事项:
.predict() 的工作量-与 .fit() 相比,任务相当“轻量级” ,所以有疑问,调整它的核心动机是什么。内存可能是问题所在,一旦大规模森林可能需要在 n_jobs 中进行扫描-“许多”副本(由于 joblib 性质将所有 python 进程状态重新设置为那么多完整副本......和 ​​new, overhead-strict Amdahl's Law re-fomulation shows 一个,多么糟糕的主意那就是——付出比最终赚取的更多的钱(从绩效上看))。这不是 .fit() 的问题,其中并发进程可以很好地调整设置开销(在我的模型中,每个进程的运行时间约为 4:00:00+ 小时),但由于这种成本/ yield “不平衡”,它可能是“轻量级”的 killer 级因素- .predict() ,其中没有太多工作要做,因此无法掩盖流程设置/终止成本(而且您付出的远比得到的多)。

顺便说一句,你pickle.dump()来自顶级命名空间的对象?如果没有,我会遇到问题,并且存储的对象没有正确重建。 (在这个问题上花了很长时间)

关于scikit-learn - 对于 Scikit-Learn 的 RandomForestRegressor,我可以为预测指定不同的 n_jobs 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034546/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com