cv.glmnet给出的auc值大于1

时间:2017-10-09 17:02:55

标签: r glmnet auc

我希望从cv.glmnet获取测试集上的AUC,以获得最佳的超参数集。根据这篇文章:

https://stats.stackexchange.com/questions/124288/r-glmnet-cross-validated-auc

我应该跑步" 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?

谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:1)

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

如果您通过cv.glmnet(type.measure="auc")运行CV,则数据集太小。在这种情况下,cv.glmnet()(实际上是cv.lognet())发出警告“在cv.lognet中,对type.measure ='auc'的观察结果太少(<10个)/折叠;更改为type.measure ='deviance '。或者,对nfold使用较小的值”,然后根据函数所抱怨的内容,设置type.measure="deviance"

您可以通过显示cv.glmmod$name(在您的情况下应为“部分可能性偏差”而不是“ AUC”)来进行验证。