GridSearchCV 没有关于高冗长的报告
GridSearchCV no reporting on high verbosity
好的,我只想说,我是 SciKit-Learn 和数据科学的新手。但这是问题所在,也是我目前对该问题的研究。代码在底部。
总结
我正在尝试使用 BernoulliRBM 进行类型识别(例如数字),并且正在尝试使用 GridSearchCV 找到正确的参数。但是我没有看到任何事情发生。通过大量使用详细设置的示例,我看到了输出和进度,但对于我的它只是说,
Fitting 3 folds for each of 15 candidates, totalling 45 fits
然后它坐在那里什么都不做....永远(或 8 小时,我在高冗长设置下等待的最长时间)。
我有一个相当大的数据集(1000 个二维数组,每个大小为 428 x 428),所以这可能是问题所在,但我也将详细程度设置为 10,所以我觉得我应该看到某种输出或进度。另外,就我的 "target" 而言,它要么是 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_
我真的很感激在这里朝着正确的方向轻推。感谢您考虑我的问题。
我注意到当 运行 线程超过 1 个时,GridSearch 不输出任何内容。
当所有线程都完成后,它会打印出所有内容。
并且多线程在 Windows 中不起作用 - 仅在 Linux.
中使用 n_jobs > 1
好吧,我只是总结一下我在过去几天里所了解的一切。
- 在 Windows 8.1 上,如果您仍然希望它冗长,请不要将 n_jobs 设置为 1 以外的任何值。
- 在我的例子中,即使我只有 n_jobs = 1,我所有的处理器内核仍然参与计算,所以这是一个错误或者应该更好地记录。
- 我在使用 csr 矩阵列表时犯了一个可怕的错误,所以基本上,请阅读文档,然后在提问之前再阅读一遍。
再次感谢@Barmaley.exe 的初步提示。
您正在使用 ipython 笔记本和 Python 2.x 吗?如果是,则多处理模块不适用于此组合。您可以将 ipython 笔记本导出(另存为)为常规 .py 文件,然后 运行 使用常规 python 解释器将其导出(另存为)。然后你可以使用 n_jobs=-1
当你在 jupyter notebook 中 运行 GridSearchCV with n_jobs
≠ 1 时,搜索的输出可以在你用来启动 jupyter notebook 的终端中找到。
好的,我只想说,我是 SciKit-Learn 和数据科学的新手。但这是问题所在,也是我目前对该问题的研究。代码在底部。
总结
我正在尝试使用 BernoulliRBM 进行类型识别(例如数字),并且正在尝试使用 GridSearchCV 找到正确的参数。但是我没有看到任何事情发生。通过大量使用详细设置的示例,我看到了输出和进度,但对于我的它只是说,
Fitting 3 folds for each of 15 candidates, totalling 45 fits
然后它坐在那里什么都不做....永远(或 8 小时,我在高冗长设置下等待的最长时间)。
我有一个相当大的数据集(1000 个二维数组,每个大小为 428 x 428),所以这可能是问题所在,但我也将详细程度设置为 10,所以我觉得我应该看到某种输出或进度。另外,就我的 "target" 而言,它要么是 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_
我真的很感激在这里朝着正确的方向轻推。感谢您考虑我的问题。
我注意到当 运行 线程超过 1 个时,GridSearch 不输出任何内容。 当所有线程都完成后,它会打印出所有内容。 并且多线程在 Windows 中不起作用 - 仅在 Linux.
中使用 n_jobs > 1好吧,我只是总结一下我在过去几天里所了解的一切。
- 在 Windows 8.1 上,如果您仍然希望它冗长,请不要将 n_jobs 设置为 1 以外的任何值。
- 在我的例子中,即使我只有 n_jobs = 1,我所有的处理器内核仍然参与计算,所以这是一个错误或者应该更好地记录。
- 我在使用 csr 矩阵列表时犯了一个可怕的错误,所以基本上,请阅读文档,然后在提问之前再阅读一遍。
再次感谢@Barmaley.exe 的初步提示。
您正在使用 ipython 笔记本和 Python 2.x 吗?如果是,则多处理模块不适用于此组合。您可以将 ipython 笔记本导出(另存为)为常规 .py 文件,然后 运行 使用常规 python 解释器将其导出(另存为)。然后你可以使用 n_jobs=-1
当你在 jupyter notebook 中 运行 GridSearchCV with n_jobs
≠ 1 时,搜索的输出可以在你用来启动 jupyter notebook 的终端中找到。