python - 为什么 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' 标签?有什么建议或解决方案吗?
任何帮助,将不胜感激!!
解决方案
推荐阅读
- java - 如何在没有 Hadoop 的情况下运行 Apache Crunch 应用程序?
- reactjs - React Native 显示/隐藏视图
- r - 为什么 R 中的 %in% 匹配不正确?
- json - 解析 json :测试是否存在 json 键
- java - 在初始化中向 Spring 定义的 FXMLController 注入 Spring 远程代理会引发 NoSuchBeanDefinitionException
- ffmpeg - 如何将这两个命令组合成一个命令?
- ios - Firebase 数据库读取 childByAutoId
- java - NotificationManager 错误 Android Studio
- r - 为什么 R 中的某些参数值的“外部”函数不能正常工作?
- ios - Apple 推送通知服务 SSL(沙盒和生产)证书是否通用?