sklearnのn_jobsについて


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]




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

<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]

とすると良いそうです。

