Я использую алгоритм классификации машинного обучения.Данные очищены, нормализованы и сбалансированы.
Я пытаюсь запустить поиск по сетке на 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)