2

我有一个包含 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 值?

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

4

1 回答 1

4

当你做一个 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)
于 2014-01-13T13:25:21.670 回答