h2o 交叉验证预测摘要中 AUC NaN 值的解释

Interpretation of AUC NaN values in h2o cross-validation predictions summary

我注意到对于某些运行:

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)能被认为是可靠的吗?

在某些特定情况下,计算 ROC 曲线时可能会被零除,从而导致 AUC 为 NaN。很可能是由于数据量小,您有一些折叠没有真正的积极性,并导致了这个问题。

我们可以通过保留折叠列然后计算每个折叠中 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)告诉我们这不是一个稳健的模型,它很可能过度拟合。你能添加更多数据吗?