cv.glmnet дает значение auc больше 1

Я хочу получить AUC на тестовом наборе от cv.glmnet для лучшего набора гиперпараметров. согласно этому сообщению.

Я должен запустить 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?

Спасибо, Стив


person steve zissou    schedule 09.10.2017    source источник
comment
В вашем наборе данных всего 9 наблюдений! Вы не можете сделать CV с таким небольшим количеством точек данных, поскольку в каждой сгибе будет еще меньше данных. Рассмотрим 3-кратное CV, у вас останется 3 точки данных на кратность... Попробуйте добавить больше данных (не менее 100) и посмотрите, сохраняется ли проблема.   -  person acylam    schedule 09.10.2017
comment
возможно, введите warnings(), когда функция выводит: There were 13 warnings (use warnings() to see them) 12-е из предупреждений: 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.   -  person missuse    schedule 09.10.2017
comment
Привет, спасибо за отзыв. Я полностью осознаю, что набор данных смехотворно мал, это просто для иллюстрации. Однако вы считаете, что при большем наборе данных AUC будет находиться в пределах нормального диапазона от 0 до 1? Спасибо!   -  person steve zissou    schedule 10.10.2017


Ответы (1)


Для вашего набора данных cv.glmnet() измеряйте потери не по "AUC", а по "отклонению", которое вы получили по cv.glmmod$cvm.

Несмотря на то, что вы запускаете резюме cv.glmnet(type.measure="auc"), ваш набор данных слишком мал. В этой ситуации cv.glmnet() (на самом деле cv.lognet()) выдает предупреждение «Слишком мало (‹ 10) наблюдений за раз для type.measure='auc' в cv.lognet; изменено на type.measure='deviance'. В качестве альтернативы используйте меньшее значение для nfolds", и судя по тому, на что жалуется функция, устанавливает type.measure="deviance".

Вы можете убедиться в этом, показав cv.glmmod$name, что в вашем случае должно быть «Отклонение частичного правдоподобия», а не «AUC».

person Alex Huang    schedule 22.07.2019