首页 > 解决方案 > 为什么 H2O XGBoost 预测 NaN?

问题描述

该数据集有 177927 行和 820 列的 one-hot 编码特征。数据集中没有 NaN。我想建立两个 H2O XGBoost 模型,分别使用相同的特征矩阵对两种标签('count_5'和'count_overlap')进行回归。我在 Ubuntu 上使用 python 3.8。

“count_5”有 4 个唯一的数字标签(从 0 到 4)。

标签 频率
0 159466
1 18102
2 346
3 13

“count_overlap”有 2416 个唯一的数字标签。

标签 计数重叠
0 53077
1 9989
2 5430
3 3224
4 2570
... ...
6558 1
2257 1
2385 1
2204 1
2047 1

这是两种模型的主要代码部分:

# Generate H2O frame
train = h2o.H2OFrame(mydf)
y = label_name
X = list(train.columns)
X.remove(y)
train[y] = train[y].asnumeric() 

# Model
estimator = H2OXGBoostEstimator(
            seed=1,
            distribution="poisson",
            model_id='XGB_default',
            keep_cross_validation_predictions=True,
            keep_cross_validation_fold_assignment=True,
            nfolds=2,
        )
estimator.train(X, y, train)

# save predictions
y_pred = estimator.cross_validation_holdout_predictions()
y_true = train[y]
y_true_pd = h2o.as_list(y_true)
y_pred_pd = h2o.as_list(y_pred)

# performance
estimator.cross_validation_metrics_summary().as_data_frame()

'count_5' 上的 H2O XGBoost 模型给出了合理的结果:

培训: 标签:count_5 模型:XGB xgboost 模型构建进度:|████████████████████████████████████ ███████| 100%

意思是 sd cv_1_valid cv_2_valid
0.20095341 2.6120833E-4 0.20076871 0.20113811
mean_residual_deviance 0.74664176 0.0035013587 0.74911755 0.7441659
毫秒 0.11081107 0.0011397477 0.11161699 0.11000515
r2 -0.027853519 9.893299E-4 -0.027153956 -0.02855308
残差偏差 0.74664176 0.0035013587 0.74911755 0.7441659
rmse 0.33288077 0.0017119459 0.3340913 0.33167022
rmsle 0.22899812 5.8065885E-4 0.22940871 0.22858754

得分历史:

时间戳 期间 number_of_trees 培训_rmse training_mae 训练偏差
2021-01-13 13:35:09 15.256 秒 0.0 0.506659 0.503162 1.158219
2021-01-13 13:35:12 18.632 秒 1.0 0.433015 0.422635 1.004022
2021-01-13 13:35:12 18.830 秒 2.0 0.387392 0.363154 0.899638
2021-01-13 13:35:13 19.034 秒 3.0 0.360412 0.319287 0.830496
…… …… …… …… …… ……
2021-01-13 13:35:15 21.244 秒 14.0 0.325060 0.203695 0.706665
2021-01-13 13:35:15 21.452 秒 15.0 0.324720 0.202657 0.704868
2021-01-13 13:35:16 22.861 秒 50.0 0.311705 0.191559 0.649280

这是 y_true ('count_5') 和 y_pred

count_5 y_pred
0 0.098148
1 0.129788
1 0.181357
0 0.037972
0 0.165198
... ……
0 0.156512
0 0.138887
1 0.257443
0 0.077034
0 0.037227

但是,'count_overlap' 上的 H2O XGBoost 模型给出了 NaN 预测,没有警告或错误:

培训: 标签:count_overlap 模型:XGB xgboost 模型构建进度:|████████████████████████████████████ ███████| 100%

意思是 sd cv_1_valid cv_2_valid
0.0
mean_residual_deviance 0.0
毫秒 0.0
r2 0.0
残差偏差 0.0
rmse 0.0
rmsle 0.0
时间戳 期间 number_of_trees 培训_rmse training_mae 训练偏差
2021-01-13 17:04:44 12.047 秒 0.0 415.741082 110.880732 154.986121
2021-01-13 17:04:47 15.042 秒 1.0 信息 信息

这是 y_true ('count_overlap') 和 y_pred:

计数重叠 y_pred
0
1247
960
0
39
... ……
24
0
540
0
57

问题是:

H2O XGBoost 在“count_5”标签上做得很好。我还尝试了其他 H2O 模型。随机森林、SVM、深度学习和 GLM 都为这两个标签提供了良好的结果(根本没有 NaN)。为什么 H2O XGBoost 预测 NaN 'count_overlap' 标签?有什么建议或解决方案吗?

任何帮助,将不胜感激!!

标签: pythonnanxgboosth2o

解决方案


推荐阅读