在数据子集上运行但在原始数据上完美运行时出现 h2o 错误

Posted

技术标签:

【中文标题】在数据子集上运行但在原始数据上完美运行时出现 h2o 错误【英文标题】:h2o error when run on a subset of the data but runs perfectly on the original data 【发布时间】:2019-01-10 07:22:24 【问题描述】:

我得到的错误是这个。我的数据的子集 [~100k 示例] 与原始数据集 [400k 示例] 具有完全相同的列数。但是它在原始数据集上完美运行,但在子集上却没有。

Traceback (most recent call last)
<ipython-input-14-35cf02055a2e> in <module>()
     15 from h2o.estimators.gbm import H2OGradientBoostingEstimator
     16 gbm_cv3 = H2OGradientBoostingEstimator(nfolds=2)
---> 17 gbm_cv3.train(x=x, y=y, training_frame=train)
     18 ## Getting all cross validated models
     19 all_models = gbm_cv3.cross_validation_models()



error_count = 2
    http_status = 412
    msg = u'Illegal argument(s) for GBM model: 
GBM_model_python_1533214798867_179.  Details: ERRR on field: 
_response: Response cannot be constant.'
    dev_msg = u'Illegal argument(s) for GBM model: 
GBM_model_python_1533214798867_179.  Details: ERRR on field: 
_response: Response cannot be constant.'

【问题讨论】:

【参考方案1】:

这是一个用户错误。

“响应”是 y 列。对于您给出的数据子集,每一行都具有相同的 y 值。当每个 y 值都相同时,您无法训练有监督的机器学习模型——模型没有什么可学习的。

如果您有一个罕见的结果,则可能会发生这种情况 - 当您随机拆分数据时,您可能会得到一个仅表示一个值的分区。要检查 Python 响应列中有多少个唯一值,请执行以下操作:train[y].unique()

【讨论】:

这是用户错误吗?当然,模型不需要学习任何东西,但是库抛出这样的异常这一事实使得嵌入大型自动化应用程序变得不必要地困难。如果它只是构建一个预测相同常量类的模型,它将更加用户友好。相反,我们必须无缘无故地捕获这些异常并在我们的代码中添加变通方法。这是一个边缘案例吗?当然。但问题仍然没有定义不明确,非常简单。 我想我能对此做出回应的最佳方式是说,在过去五年中,我与之交谈过的任何数据科学家都不会故意给出一个恒定的 Y 列。这表明数据准备不正确。因此软件将其视为错误。根据我的经验,这就是这个用户角色所期望和喜欢的。

以上是关于在数据子集上运行但在原始数据上完美运行时出现 h2o 错误的主要内容,如果未能解决你的问题,请参考以下文章

程序 .exe 在 cygwin 上运行,但在调试和在 Visual Studio 上运行时出现异常

代码在我的计算机上运行良好,但在“hackerearth”平台上在线运行时出现 NullPointerException

在 VS2015 中访问类成员时出现运行时错误,但在 Linux 上没有

在 IDE 上完美运行,但行(如果 mat[j] == mat[colindex]:) 在为极客提交极客时出现索引超出范围错误

将图像保存到 mysql 数据库时出现问题。程序运行完美,没有错误

构建 Angular 8 项目时出现空白页面,但使用“ng serve”可以完美运行