Как получить AUC, используя перекрестную валидацию в R?

У меня есть матрица (х), содержащая 100 образцов (строк) и 10000 независимых объектов (столбцов). Наблюдения являются двоичными, выборка хорошая или плохая {0,1} (хранится в векторе y). Я хочу выполнить перекрестную проверку, оставив одну, и определить область под кривой (AUC) для каждой функции отдельно (что-то вроде colAUC из пакета CAtools). Я пытался использовать glmnet, но это не сработало. Как сказано в руководстве, я попытался установить параметр nfold равным количеству наблюдений (100).

>result=cv.glmnet(x,y,nfolds=100,type.measure="auc",family="binomial")

И я получаю эти предупреждения:

>"Warning messages:
1: Too few (< 10) observations per fold for type.measure='auc' in   
cv.lognet; changed to type.measure='deviance'. Alternatively, use smaller  
value for nfolds 
2: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per  
fold"

Есть идеи, что я делаю не так? И есть ли другой способ или пакет R для получения LOO-сбалансированных значений AUC для каждой из функций?

Я действительно ценю любую помощь. Спасибо!

1 ответ

Когда вы делаете LOO-CV, у вас есть набор тестов, содержащий только 1 образец, и вы, конечно, не можете создать AUC с этим. Однако вы можете зацикливать и сохранять прогнозы на каждом этапе:

k <- dim(x)[1]
predictions <- c()
for (i in 1:k) {
  model <- glmnet(x[-i,], y[-i], family="binomial")
  predictions <- c(predictions, predict(model, newx=x[i,]))
}

Так что в конце вы можете сделать кривую ROC, например:

library(pROC)
roc(y, predictions)
Другие вопросы по тегам