Ошибка с паралелизацией случайного или грид-поиска в sklearn с использованием блокнота jupyter - PullRequest
0 голосов
/ 22 января 2019

Я использую алгоритм классификации машинного обучения.Данные очищены, нормализованы и сбалансированы.

Я пытаюсь запустить поиск по сетке на RandomForestClassifier из sklearn, чтобы решить проблему с набором данных APS Scania .

В случае использования мне нужно указать разные затраты для каждой ошибки в классификации.Для этого у меня есть пользовательская функция оценки, которую я хочу использовать при оптимизации гиперпараметров.

Моя проблема в том, что когда я запускаю Grid или RandomSearchCV с n_jobs = 1, это занимает слишком много времени, но выполняется,Естественно, я хотел бы использовать больше вычислительной мощности.

Если я попробую значение n_jobs больше 1, то в качестве фрагмента кода ниже я получу ошибку:

"AttributeError:Невозможно получить атрибут 'absolute_cost_metric' в main ' (встроенный)> "

...

" sklearn.externals.joblib.externals.loky.process_executor.BrokenProcessPool: не удалось удалить сериализацию задачи. Убедитесь, что все аргументы функции можно выбирать. "

После чтения https://github.com/scikit-learn/scikit-learn/issues/12250 и https://github.com/scikit-learn/scikit-learn/issues/12413,Я попытался отделить функцию в другом файле, который по-прежнему выдает сообщение об ошибке:

"UserWarning: Не удалось очистить временную папку"

Если у вас есть входные данные, в чем может быть проблема на этот разЯ был бы благодарен.

def cost_metric(y_true, y_pred):
    cost_1 = -10
    cost_2 = -500

    tn, fp, fn, tp = confusion_matrix(y_true=y_true, y_pred=y_pred).ravel()
    return (cost_1 * fp + cost_2 * fn)

#Data cleaning, other importations, undersampling, preparing X_train, X_test, y_train and y_test, etc.

RF=RandomForestClassifier()

n_jobs=4
custom_score_function = make_scorer(cost_metric)
opt = GridSearchCV(RF,param_grid=parameters, cv=3, scoring=custom_score_function, n_jobs=n_jobs, pre_dispatch=1*n_jobs, verbose=1)

opt.fit(X_train, y_train)

best = opt.best_estimator_

clf=clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

cost= cost_metric(y_test, y_pred)
...