GridSearchCV с n_jobs = -1 не работает для классификации дерева решений / случайного леса - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь использовать GridSearchCV для оценки разных моделей с разными наборами параметров. Logisti c Регрессия и k-NN не вызывают проблем, но Дерево решений, Случайный лес и некоторые другие типы классификаторов не работают, когда n_jobs = -1.

for classifier, paramSet, classifierName in zip(list_classifiers, list_paramSets, list_clfNames):
    gs = GridSearchCV(
                      estimator = classifier,
                      param_grid = paramSet,
                      cv = 10,      
                      n_jobs = -1           
                    )
    gs.fit(X_train, y_train)
    plot_learning_curve(gs, "Learning Curve", X_train, y_train, n_jobs=-1)

Я работаю над Google Colab и любое из предложенных ниже решений не помогли решить мою проблему.

from sklearn.externals.joblib import parallel_backend
clf = GridSearchCV(...)
with parallel_backend('threading',n_jobs = -1):
    clf.fit(x_train, y_train)
if __name__ == "__main__":
    import multiprocessing as mp; mp.set_start_method('forkserver', force=True) // 'spawn' has also failed
    /// Gridsearch and fit here ///

Вот мой исходный код: https://github.com/bahadirbasaran/pulsarDetection/blob/master/main.ipynb

Ошибка журнал:

error message

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 17 марта 2020

вам не нужно использовать дополнительные вызовы для создания потоков. Ваш первый фрагмент кода должен работать. Если вы позвоните:

n_cpus = multiprocessing.cpu_count()

что он вернет? Если вы используете это, а затем передаете n_jobs=n_cpus или n_jobs=n_cpus-1 (если вы не хотите, чтобы ваш компьютер зависал), посмотрите, работает ли это. Из документации регрессии sklearn logisti c:

n_jobs int, default = None Число ядер ЦП, используемых при распараллеливании классов, если multi_class = 'ovr' ”. Этот параметр игнорируется, когда для решателя установлено значение «liblinear», независимо от того, указано или нет «multi_class».

Таким образом, возможно, что работающие модели фактически не используют более 1 CPU.

Надеюсь, что некоторые из этих идей помогут.

...