

sklearnのランダムフォレストのグリッドサーチをしようと思い，以下のようにグリッドサーチのコードを使おうとしました．n_jobsを-1にすると最適なコア数で並列計算されるとのことだったのでそのようにしたのですが，一日置いてもまったく計算が終わる気配がなく，n_jobs=1とすると数秒で終わるという状態になっています．メモリやCPUの使用率は100%に近くなっており動いてはいるのですが，原因が分からず困っています．CPUはIntel
Core i7を使っているのですがこれは単純に並列計算しないほうが良いということなのでしょうか？

[code]

    tuned_parameters = [{'n_estimators': [5, 10, 30, 50, 100], 'max_features': ['sqrt', 'log2', None]}]
    clf = GridSearchCV(RandomForestClassifier(), tuned_parameters, cv=2, scoring='accuracy', n_jobs=-1)
    
[/code]


CC BY-SA 3.0
2017-05-02T07:28:35.560
34417
2020-07-09T16:05:35.633
2017-05-02T10:47:20.137
19110
22920
question
python scikit-learn
sklearnのn_jobsについて


参考までに、RandomForestClassifierの学習モデルで10000データのpredictを実行したときの実際の計算速度です。  
並列処理は他の処理をしていると、速度が著しく落ちますね。

  * n_jobs=8:1303.20sec
  * n_jobs=1:148.83sec
  * n_jobs=1(Parallel(n_jobs=8)使用):42.75sec
  * n_jobs=1(Parallel(n_jobs=8)使用+他のジョブ実行):475.95sec


CC BY-SA 3.0
2017-08-16T01:59:06.250
37236
2017-08-16T01:59:06.250
24899
34417
answer


詳しい状況が分かりませんが、関係がありそうな情報を乗っけて置きます。

<http://scikit-learn.org/stable/faq.html#why-do-i-sometime-get-a-crash-freeze-
with-n-jobs-1-under-osx-or-linux>

端的に言うと、macなどの場合だと、n_jobs > 1 の時、pythonのmultiprocessingの呼び方がfork-
safetyではないので、バグだとみなしてしまうそうです。

Python 3.4+ の場合は、

[code]

    import multiprocessing
    
    # other imports, custom code, load data, define model...
    
    if __name__ == '__main__':
        multiprocessing.set_start_method('forkserver')
    
        # call scikit-learn utils with n_jobs > 1 here
    
[/code]

とすると良いそうです。


CC BY-SA 4.0
2018-08-07T02:37:03.793
47304
2018-08-07T02:37:03.793
29621
34417
answer