【问题标题】:GridSearchCV no reporting on high verbosityGridSearchCV 没有报告高详细度
【发布时间】:2015-01-17 23:04:33
【问题描述】:

好的,我只想说,我对 SciKit-Learn 和数据科学完全陌生。但这是问题和我目前对这个问题的研究。代码在底部。

总结

我正在尝试使用 BernoulliRBM 进行类型识别(例如数字),并且正在尝试使用 GridSearchCV 找到正确的参数。但是我没有看到任何事情发生。通过大量使用详细设置的示例,我看到了输出和进度,但我的只是说,

Fitting 3 folds for each of 15 candidates, totalling 45 fits

然后它就坐在那里,什么都不做......永远(或 8 小时,这是我在高详细设置下等待的最长时间)。

我有一个相当大的数据集(1000 个二维数组,每个数组大小为 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_
    

我真的很感激在这里朝着正确的方向轻推。感谢您考虑我的问题。

【问题讨论】:

  • 你能用n_jobs=1试试吗?根据我的经验,详细输出似乎不适用于多处理(尽管我通常从 IPython 笔记本运行它,这可能是我的问题的根源)。
  • @Barmaley.exe 谢谢!它仍然无法正常工作,但至少我现在有错误消息要处理。我只是讨厌没有错误可以处理。等我弄清楚了,我会在这里更新。

标签: python machine-learning scikit-learn


【解决方案1】:

好的,所以总结一下我在过去几天里所了解的一切。

  • 在 Windows 8.1 上,如果您仍然希望它是冗长的,请不要将 n_jobs 设置为 1 以外的任何值。
  • 在我的例子中,即使我只有 n_jobs = 1,我的所有处理器内核仍然参与计算,所以要么这是一个错误,要么应该更好地记录。
  • 我犯了使用 csr 矩阵列表的可怕错误,所以基本上,请先阅读文档,然后再阅读一遍,然后再提问。

再次感谢 @Barmaley.exe 提供的最初提示。

【讨论】:

  • 大约 6 年后我遇到了同样的问题,设置 n_jobs = 1 实际上使工作变得冗长。尽管没有打印过程,但这是否意味着 n_jobs = -1(或除 1 或 None 之外的任何其他值)不进行任何计算?
【解决方案2】:

我注意到当使用超过 1 个线程运行时,GridSearch 不会输出任何内容。 当所有线程都完成后,它会打印出所有内容。 并且多线程在 Windows 中不起作用 - 仅在 Linux 中使用 n_jobs > 1。

【讨论】:

    【解决方案3】:

    您使用的是 ipython notebook 和 Python 2.x 吗?如果是,则多处理模块不适用于此组合。您可以将 ipython notebook 导出(另存为)为常规 .py 文件,并使用常规 python 解释器运行它。然后你可以使用 n_jobs=-1

    【讨论】:

      【解决方案4】:

      当您在 jupyter notebook 中使用 n_jobs ≠ 1 运行 GridSearchCV 时,可以在您用于启动 jupyter notebook 的终端中找到搜索的输出。

      【讨论】:

        猜你喜欢
        • 2021-08-04
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多