好吧,我只想说,我一开始对SciKit-Learn和数据科学完全陌生。但这是问题和我目前对这个问题的研究。代码在底部。
总结
我正在尝试使用BernoulliRBM进行类型识别(例如数字),并且我正在尝试使用GridSearchCV找到正确的参数。但是我没有看到任何事情发生。通过很多使用详细设置的示例,我看到了输出和进度,但对于我的,它只是说,
Fitting 3 folds for each of 15 candidates, totalling 45 fits
然后它坐在那里,什么也不做。永远(或 8 小时,我在高详细设置下等待的最长时间)。
我有一个相当大的数据集(1000 个 2D 数组,每个数组的大小为 428 x 428),所以这可能是问题所在,但我也将详细程度设置为 10,所以我觉得我应该看到某种输出或进展。此外,就我的"目标"而言,它只是 0 或 1,要么是我要查找的对象 (1),要么不是 (0)。
以前的研究
- 我
- 研究了sklearn.preprocessing,看看这是否必要,这似乎不是问题(但同样,我对此完全陌生)。
- 我增加了啰嗦
- 我从使用3D数据列表切换到使用scipy csr矩阵列表。
- 我用高详细程度设置等了 8 个小时,但我仍然没有看到任何事情发生。
- 我从不使用管道切换到使用管道
我篡改了gridsearchcv的各种参数,并尝试创建虚假(较小的)数据集进行练习。
def network_trainer(self, data, files): train_x, test_x, train_y, test_y = train_test_split(data, files, test_size=0.2, random_state=0) parameters = {'learning_rate':np.arange(.25, .75, .1), 'n_iter':[5, 10, 20]} model = BernoulliRBM(random_state=0, verbose=True) model.cv = 2 model.n_components = 2 logistic = linear_model.LogisticRegression() pipeline = Pipeline(steps=[('model', model), ('clf', logistic)]) gscv = grid_search.GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=10) gscv.fit(train_x, train_y) print gscv.best_params_
我真的很感激在这里朝着正确的方向推动。感谢您考虑我的问题。
好的,总结一下我在过去几天里发现的一切。
- 在 Windows 8.1 上,如果您仍希望n_jobs详细,请不要将其设置为 1 以外的任何内容。
- 就我而言,即使我只有 n_jobs = 1,我所有的处理器内核仍然参与计算,所以这要么是一个错误,要么应该更好地记录下来。
- 我犯了一个可怕的错误,使用了 csr 矩阵列表,所以基本上,阅读文档,然后在提问之前再次阅读它。
我要再次感谢@Barmaley.exe的初步提示。
当您在 jupyter 笔记本中使用 n_jobs
≠ 1 运行 GridSearchCV 时,可以在用于启动 jupyter 笔记本的终端中找到搜索的输出。
我注意到 GridSearch 在使用超过 1 个线程运行时不会输出任何内容。当所有线程完成后,它会打印出所有内容。多线程在 Windows 中不起作用 - 仅在 Linux 中使用 n_jobs> 1。
你使用的是ipython notebook和Python 2.x吗?如果是,则多处理模块不适用于此组合。您可以将 ipython 笔记本导出(另存为)为常规.py文件,并使用常规 python 解释器运行它。然后你可以使用 n_jobs=-1
补充一点,如果您在一段时间内除了设置之外没有任何输出n_jobs = 1
请检查您正在使用的模型的详细程度设置。我将KerasClassifier
与verbose=0
一起使用,并且必须将其设置为verbose=2
才能查看纪元。当你想到它时,很明显,尽管如此,我还是花了一些时间来寻找原因。