【发布时间】: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 (< 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 之间的正常范围内吗?谢谢!