【问题标题】:Interpretation of AUC NaN values in h2o cross-validation predictions summaryh2o 交叉验证预测摘要中 AUC NaN 值的解释
【发布时间】:2019-07-09 17:59:04
【问题描述】:

我注意到对于一些运行:

train=as.h2o(u)
mod = h2o.glm(family= "binomial", x= c(1:15), y="dc",  
       training_frame=train, missing_values_handling = "Skip",
       lambda = 0, compute_p_values = TRUE, nfolds = 10,
       keep_cross_validation_predictions= TRUE)

对于模型的某些 cv 迭代,AUC 的交叉验证指标摘要中有 NaN。

例如:

print(mod@model$cross_validation_metrics_summary["auc",])

交叉验证指标摘要:

          mean         sd cv_1_valid cv_2_valid cv_3_valid cv_4_valid cv_5_valid cv_6_valid cv_7_valid cv_8_valid cv_9_valid cv_10_valid

auc 0.63244045 0.24962118       0.25  0.6666667  0.8095238        1.0  0.6666667 0.46666667        NaN        NaN        1.0         0.2

当我设置较小的 nfolds=7 时,CV 中的 NaN 似乎不太频繁出现。

应该如何解释这些 NaN 值以及 h2o 交叉验证何时输出它们?

我想在迭代中无法正确评估 AUC 时会发生这种情况。我的训练集有 70 行完整的行。

这样的 AUC 交叉验证结果(包含 NaN)是否可以认为是可靠的?

【问题讨论】:

  • 您可以发布完全可重现的代码 sn-p 吗?这样我们就可以尝试重现您所看到的内容。谢谢!
  • 你规范化数据了吗?
  • 我的输入数据框非常简单并且没有缩放:[drive.google.com/file/d/1UiIkxlHCq1tJZNOH6hQD30gEMaPdmhgh/… 如果在 h2o.glm 中设置种子 = 1234,您将获得 3 个 NaN。

标签: r cross-validation h2o glm auc


【解决方案1】:

在计算 ROC 曲线时,某些特定情况可能会导致除以零,这可能导致 AUC 为 NaN。很可能由于小数据,您有一些没有真正正面的折叠并导致此问题。

我们可以通过保留 fold 列然后计算每个折叠中 dc 的值来测试这一点:

...

train <- as.h2o(u)
mod <- h2o.glm(family = "binomial"
              , x = c(1:15)
              , y = "dc"
              , training_frame = train
              , missing_values_handling = "Skip"
              , lambda = 0
              , compute_p_values = TRUE
              , nfolds = 10
              , keep_cross_validation_fold_assignment = TRUE
              , seed = 1234)

fold <- as.data.frame(h2o.cross_validation_fold_assignment(mod))
df <- cbind(u,fold)

table(df[c("dc","fold_assignment")])

   fold_assignment
dc  0 1 2 3 4 5 6 7 8 9
  0 4 6 6 2 9 6 6 4 4 6
  1 2 2 3 4 0 2 0 0 1 2

mod@model$cross_validation_metrics_summary["auc",]

Cross-Validation Metrics Summary: 
          mean         sd cv_1_valid cv_2_valid cv_3_valid cv_4_valid cv_5_valid cv_6_valid cv_7_valid
auc 0.70238096 0.19357596      0.875  0.6666667        0.5      0.375        NaN  0.5833333        NaN
    cv_8_valid cv_9_valid cv_10_valid
auc        NaN        1.0   0.9166667

我们看到带有 NaN 的折叠与只有 dc=0 的折叠相同。

不计算 NaN,折叠的各种 AUC(从 0.2 到 1)告诉我们这不是一个稳健的模型,而且很可能过拟合。可以添加更多数据吗?

【讨论】:

  • 我无法添加更多数据,所以我尝试处理它;)此外,目标变量不平衡(60:19)。我尝试运行 GBM 100x 并收到平均 AUC=0.56 (sd=0.07) 和 MSE=0.25。数据下载链接现在应该是正确的。
  • 确实,没有正数的折叠的 AUC 等于 NaN。我还在 GBM 中设置了 balance_classes=TRUE,但 AUC 指标并没有变得更好。
猜你喜欢
  • 2019-10-04
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2018-09-09
  • 2018-04-10
  • 2018-07-17
  • 2021-01-09
  • 2017-12-03
相关资源
最近更新 更多