Python h2o在数据子集上运行时出错,但在原始数据上运行正常

Python h2o在数据子集上运行时出错,但在原始数据上运行正常,python,classification,h2o,xgboost,gbm,Python,Classification,H2o,Xgboost,Gbm,我得到的错误是这样的。我的数据的子集[~100k个示例]的列数与原始数据集[400k个示例]的列数完全相同。但它在原始数据集上运行得非常好,但在子集上却没有 Traceback (most recent call last) <ipython-input-14-35cf02055a2e> in <module>() 15 from h2o.estimators.gbm import H2OGradientBoostingEstimator 16 gbm

我得到的错误是这样的。我的数据的子集[~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.'
回溯(最近一次呼叫上次)
在()
15来自h2o.estimators.gbm导入H2OGradientBoostingEstimator
16 gbm_cv3=H2O梯度增强估计器(Nfold=2)
--->17 gbm\u cv3.列车(x=x,y=y,列车帧=列车)
18##获取所有交叉验证模型
19所有模型=gbm\U cv3.交叉验证模型()
错误计数=2
http_status=412
msg=u'GBM模型的非法参数:
GBM_模型_python_1533214798867_179。详细信息:ERRR on字段:
_响应:响应不能是常量。”
GBM模型的dev_msg=u'非法参数:
GBM_模型_python_1533214798867_179。详细信息:ERRR on字段:
_响应:响应不能是常量。”
这是一个用户错误

“响应”是y列。对于给定的数据子集,每一行的y值相同。当每个y值都相同时,您无法训练有监督的机器学习模型-模型没有任何可学习的内容


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

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