2017-12-30 17 views
1

Scikit-Learn's RandomForestRegressorドキュメントから、という、n_jobsインスタンスの属性があります。Scikit-Learnの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コアでトレーニングしたいと思いますが、1つのコアで予測を実行します。 (モデルpickledと、別のプロセスで使用されている。)

は、このようにRandomForestRegressor()を設定することが可能ですか?

答えて

1

もちろん、私はストアド・モデルにも同様の戦略を使用できます。

.predict()メソッドを使用する前に、pickle.load() -edで<_aRFRegressorModel_>.n_jobs = 1を設定するだけです。

注意をベーネ:
疑問に、何をしているよう.predict() -task上の作業量は、.fit()と比べた場合、かなり「軽量」であるが、これを微調整するためにコア動機です。大規模な森林は、多くのフルスケールのレプリカにすべてのpythonのプロセス状態を復元するjoblib自然のためにn_jobs - "多くの"レプリカでスキャンする必要がある場合、メモリが問題になる可能性があります。 ..そしてnew, overhead-strict Amdahl's Law re-fomulation shows 1つ、悪い考えがあった - 最終的に得られたよりも多くの方法を支払う(パフォーマンス的に)。これは.fit()の問題ではありません。コンカレントプロセスでは設定オーバーヘッドが調整されます(私のモデルではプロセスあたり4:00:00+以上のランタイム)が、このコスト/メリットの「不均衡」のために"軽量"のキラーファクタ - .predict()、多くの作業を行う必要はないため、プロセスのセットアップ/終了コストをマスクすることはできません。

ご参考までに、pickle.dump()オブジェクトはトップレベルの名前空間から取得しますか?そうでないと問題が発生し、格納されたオブジェクトが正しく再構築されませんでした。 (この問題に関する世代の経過時間)

関連する問題