Как получить 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)