scikit-lean GridSearchCV n_jobs!= 1冻结

时间:2017-07-05 05:46:25

标签: python-3.x scikit-learn random-forest grid-search

我在随机森林上运行网格搜索,并尝试使用不同于一个的n_jobs但内核冻结,没有CPU使用率。使用n_jobs = 1,它可以正常工作。我甚至无法用ctl-C停止命令,必须重新启动内核。 我在Windows 7上运行。我发现OS X存在类似的问题,但该解决方案与Windows 7无关。

from sklearn.ensemble import RandomForestClassifier
rf_tfdidf = Pipeline([('vect',tfidf),
                  ('clf', RandomForestClassifier(n_estimators=50, 
class_weight='balanced_subsample'))])

param_grid = [{'vect__ngram_range':[(1,1)],
          'vect__stop_words': [stop],
          'vect__tokenizer':[tokenizer]
          }]
if __name__ == '__main__':
gs_rf_tfidf = GridSearchCV(rf_tfdidf, param_grid, scoring='accuracy', cv=5, 
                                                           verbose=10, 
                                                           n_jobs=2)
gs_rf_tfidf.fit(X_train_part, y_train_part)

感谢。

1 个答案:

答案 0 :(得分:0)

if __name__ == '__main__':后的缩进不正确。如果情况并非如此,并且它是一个复制粘贴错误,那么您可以尝试以下方式:

if __name__ =='main':
    # your code indented !

所以你的脚本的第一行是if __name__ == '__main__':,然后其余的代码跟在后面有适当的缩进。

新代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline    

if __name__ == '__main__':

    rf_tfdidf = Pipeline([('vect',tfidf),('clf', RandomForestClassifier(n_estimators=50,class_weight='balanced_subsample'))])

    param_grid = [{'vect__ngram_range':[(1,1)],'vect__stop_words': [stop],'vect__tokenizer':[tokenizer]}]

    gs_rf_tfidf = GridSearchCV(rf_tfdidf, param_grid, scoring='accuracy', cv=5,verbose=10, n_jobs=-1)

    gs_rf_tfidf.fit(X_train_part, y_train_part)

这对我来说很好(Windows 8.1)

修改

以下使用PyCharm工作正常。我没有使用过spyder,但它也适用于spyder:

<强>代码

Class Test(object):
    def __init__(self):
        ###code here
        ###code here    

if __name__ == '__main__':
    Test()