Scikit learn 对于Scikit学习';s RandomForestRegressor,我可以为预测指定不同的n_作业吗?

Scikit learn 对于Scikit学习';s RandomForestRegressor,我可以为预测指定不同的n_作业吗?,scikit-learn,Scikit Learn,具有一个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. 训练具有多个核心的随机森林模型显然比训练单个核心的随机森林模型更有效。但我注意到预测速度要慢得多(

具有一个
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个核上训练随机森林模型,但在单个核上运行预测。(该模型在单独的流程中使用。)


可以用这种方式配置RandomForestRegressionor()吗?

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

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

没有好处:
如果与
.fit()
相比,
.predict()
-任务的工作量相当“轻”,那么,令人怀疑的是,调整此任务的核心动机是什么。内存可能是一个问题,一旦大型林可能需要扫描
n_作业
-“许多”副本(由于
joblib
的性质,它将所有python进程状态重新恢复为许多完整的副本…而这是一个多么糟糕的主意啊——付出比最终获得的还要多的代价(performancewise))。这不是
.fit()
的问题,因为并发进程可以很好地调整设置开销(在我的模型中,每个进程的运行时间为4:00:00+小时),但正是由于这种成本/收益“不平衡”,它可能是“轻量级”-
的致命因素。predict()
,在这里没有太多工作要做,因此无法掩盖流程设置/终止成本(而且你付出的比得到的多)

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