【问题标题】:How to obtain AUC using leave-one-out cross-validation in R?如何在 R 中使用留一法交叉验证获得 AUC?
【发布时间】:2013-08-19 23:42:25
【问题描述】:

我有一个包含 100 个样本(行)和 10000 个独立特征(列)的矩阵 (x)。观察结果是二元的,样本是好的还是坏的 {0,1}(存储在向量 y 中)。我想执行遗漏交叉验证并分别确定每个功能的曲线下面积(AUC)(类似于 CAtools 包中的 colAUC)。我尝试使用 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 值?

我将非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: r cross-validation roc glmnet


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 2014-09-13
      • 2016-11-27
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      相关资源
      最近更新 更多