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"

私が間違っていることはありますか?また、各機能のLOOバランスの取れたAUC値を取得する他の方法またはRパッケージはありますか?

どんな助けでも本当に感謝します。ありがとうございました!

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 に答える