Scikit-Lean GridSearchCV n_jobs! = 1 замораживание

Я запускаю поиск по сетке в случайных лесах и пытаюсь использовать n_jobs, отличные от одного, но ядро ​​зависает, загрузка ЦП отсутствует. С 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)

благодаря.


person Shachar Stern    schedule 05.07.2017    source источник
comment
После if name == 'main' следующие строки должны иметь соответствующий отступ.   -  person seralouk    schedule 05.07.2017
comment
Как сказала SERA, это отступ: github.com/scikit-learn/scikit -learn / issues / 2889 - кстати, удивлен, что ваш код работает как есть, без ошибки отступа   -  person mkaran    schedule 05.07.2017
comment
Если нет проблемы с отступом, и вы просто вставили сюда свой код, возможно, взгляните на [this] (есть и другие проблемы для такого рода проблем: [github.com/scikit-learn/scikit-learn/issues/ и т. д.)?   -  person mkaran    schedule 05.07.2017
comment
Это копия пошла не так. Проблема, которую вы здесь указали, не актуальна для Windows. Спасибо.   -  person Shachar Stern    schedule 06.07.2017
comment
Ответ, который я опубликовал, решил аналогичную проблему, которая была у меня в Windows 8. Попробуйте, пожалуйста.   -  person seralouk    schedule 06.07.2017
comment
как я могу изменить JOBLIB_START_METHOD?   -  person Shachar Stern    schedule 06.07.2017


Ответы (1)


Отступ после 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()
person seralouk    schedule 05.07.2017
comment
Работает отлично! Просто интересуюсь. Мне удалось запустить сценарий с консоли, но как я могу запустить его в своей среде IDE (spyder) и отладить при необходимости. - person Shachar Stern; 06.07.2017
comment
Привет. Как правило, вам следует использовать текстовый редактор, например VIM link или Atom ссылка. Вы можете писать свои скрипты в файлах .py, а затем запускать их в консоли. Для отладки в реальном времени вы можете использовать ссылку PyCharm. Наконец, я рад, что смог помочь. вы можете пометить его как принятый, чтобы другие могли попробовать то же решение - person seralouk; 06.07.2017
comment
@ShacharStern Spyder очень прост в использовании. В строке меню вы найдете параметр «Отладка». Вы можете разместить точки останова там, где вы хотите, чтобы код запускался. - person Vivek Kumar; 06.07.2017
comment
Вивек, я не думаю, что ты меня понял. Я умею работать со spyder. Я могу запустить этот код только из командной строки, потому что он находится внутри if name == 'main': я ищу способ запустить его на spyder. - person Shachar Stern; 06.07.2017
comment
@VivekKumar с помощью класса, который вы можете запустить в spyder. см. здесь ссылку - person seralouk; 06.07.2017