首页 文章

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

提问于
浏览
1

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()

1 回答

  • 1

    哦,确定你可以,我对存储模型使用类似的策略 .

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

    Nota bene:
    如果与 .fit() 相比, .predict() -task的工作量相当"lightweight",所以怀疑,调整这个的核心动机是什么 . 内存可能是问题,一旦大规模的森林可能需要在 n_jobs - "many"副本中进行扫描(由于 joblib 自然将所有python进程状态重新安装到那么多的全尺寸副本中......并且new, overhead-strict Amdahl's Law re-fomulation shows一,这是一个多么糟糕的想法 - 支付超过最终获得的方式(表现)) . 这对于 .fit() 来说不是问题,其中并发进程可以很好地调整设置开销(在我的模型中〜每个进程的运行时间为4:00:00),但由于这个成本/收益"imbalance",它可能是一个杀手因素对于"lightweight" - .predict() ,其中没有太多工作要做,因此无法完成屏蔽过程设置/终止成本(并且您付出的代价超过了获取) .

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

相关问题