使用jupyter笔记本在sklearn中随机或网格搜索的并行化错误

时间:2019-01-22 17:08:01

标签: python jupyter-notebook ipython

我正在运行机器学习分类算法。 数据已清理,标准化和平衡。

我试图在sklearn的RandomForestClassifier上运行网格搜索,以解决APS Scania Dataset的问题。

在用例中,我需要为分类中的每个错误指定不同的成本。为此,我有一个自定义评分功能,我想在超参数优化中使用它。

我的问题是,当我使用n_jobs = 1运行Grid或RandomSearchCV时,它花费的时间太长,但可以运行。当然,我想使用更多的处理能力。

如果我尝试将n_jobs值设置为大于1,如下面的代码所示,则会出现错误:

“ AttributeError:无法在<模块'主要'(内置)>上获取属性'negative_cost_metric'””

...

“ sklearn.externals.joblib.externals.loky.process_executor.BrokenProcessPool:任务无法反序列化。请确保该函数的参数都是可拾取的。”

在读取https://github.com/scikit-learn/scikit-learn/issues/12250https://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)

0 个答案:

没有答案