【问题标题】:cv.glmnet gives auc value greater than 1cv.glmnet 给出大于 1 的 auc 值
【发布时间】:2017-10-09 17:02:55
【问题描述】:

我想从 cv.glmnet 获取测试集的 AUC,以获得最佳超参数集。根据这个post

我应该运行 cvm 并得到它,但是,当我这样做时,我得到一个大于 1 的值,我的理解是 AUC 应该在 0 和 1 之间。这是一个例子:

age     <- c(4, 8, 7, 12, 6, 9, 10, 14, 7) 
gender  <- as.factor(c(1, 0, 1, 1, 1, 0, 1, 0, 0))
bmi_p   <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88) 
m_edu   <- as.factor(c(0, 1, 1, 2, 2, 3, 2, 0, 1))
p_edu   <- as.factor(c(0, 2, 2, 2, 2, 3, 2, 0, 0))
f_color <- as.factor(c("blue", "blue", "yellow", "red", "red", "yellow", 
                       "yellow", "red", "yellow"))
asthma <- c(1, 1, 0, 1, 0, 0, 0, 1, 1)
xfactors <- model.matrix(asthma ~ gender + m_edu + p_edu + f_color)[, -1]
x        <- as.matrix(data.frame(age, bmi_p, xfactors))

cv.glmmod <- cv.glmnet(x, y=asthma, alpha=1,family="binomial", type.measure = "auc")

max(cv.glmmod$cvm)
[1] 7.0223

我如何解释这个数字?真的只是 .70223 吗?

谢谢, 史蒂夫

【问题讨论】:

  • 您的数据集只有 9 个观察值!你不能用这么少的数据点做 CV,因为每个折叠都会有更少的数据。考虑 3 折 CV,每折会留下 3 个数据点...尝试添加更多数据(至少 100 个),看看问题是否仍然存在。
  • 可能在函数输出时键入warnings()There were 13 warnings (use warnings() to see them) 第十二个警告是:Too few (&lt; 10) observations per fold for type.measure='auc' in cv.lognet; changed to type.measure='deviance'. Alternatively, use smaller value for nfolds。较小的 nfolds 值无济于事 - 检查@user 的评论。
  • 您好,感谢您的反馈。我完全知道数据集太小了,这只是为了说明。但是,您认为使用更大的数据集,auc 会在 0 到 1 之间的正常范围内吗?谢谢!

标签: r glmnet auc


【解决方案1】:

对于您的数据集,cv.glmnet() 不是通过“AUC”来衡量损失,而是“偏差”,这是您通过cv.glmmod$cvm 获得的。

尽管您通过 cv.glmnet(type.measure="auc") 运行 CV,但您的数据集太小。在这种情况下,cv.glmnet()(实际上是cv.lognet())发出警告“对于 cv.lognet 中 type.measure='auc' 的每折观察次数太少(type.measure="deviance"。

您可以通过显示 cv.glmmod$name 来验证这一点,在您的情况下应该是“部分似然偏差”,而不是“AUC”。

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2020-06-11
    • 2019-10-09
    • 2019-03-17
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多