2017-05-28 5 views
1

caretパッケージを使用したクロスバリデーション後のバイナリクラシファイアから曲線下面積(AUC)を取得したいと考えています。キャレットの平均クラス確率からのAUC R

標準的な混同行列については、にはaverage引数が使用されています。

例:など

controls = trainControl(method="repeatedcv" 
        , number=5 
        , repeats=10 
        , selectionFunction = "oneSE" 
        , classProbs = T 
        , summaryFunction = twoClassSummary 
) 

svm_5k = train(veracity ~ . 
      , data = training_data 
      , method = "svmLinear" 
      , trControl = controls 
      , verbose = FALSE 
      , metric = 'ROC' 
) 

そして混同行列は精度のために使用され、F1、

confmat = caret::confusionMatrix(svm_5k 
          , 'average') 

は、今私はAUCと闘争:私は今、クラスちゃったごめんなさいを取得し、添付していますそれらのデータをtesting_data$prob = predict(svm_5k, testing_data, type='prob')[,2]

のように表示します。pROCパッケージを使用して

01のようなAUCを取得すると controlsに示されているが、分類器の単なるスナップショットとして

...

...私はクロスバリデーションを使用していません。

CVから平均化された確率を使用してAUCを得る方法はありますか?

答えて

0

は今、uはuは曲線の下の感度、特異性およびエリアのようなROCから必要なすべてのものを得ることができます

predict = predict(svm_5k, testing_data) 
roc <- roc(testing_data$veracity, as.numeric(predict)) 

を試してみてください。

auc <- auc(roc) 
sens <- roc$sensitivities[2] 
spec <- roc$specificities[2] 
+0

しかし、これは異なるCVの平均を与えません。あなたがそれを記述するとき、それは私がしたものに似ています。しかし、私は1回の反復だけではなく、すべてのCV反復の平均から予測を得ることを避けたい。 –

+0

Idk私は似たような仕事をしましたが、私は10倍のクロスバリデーションを使って、aucのフィールドを作ったのです。 forループでは、それらを連結し、最後に平均を使用しました。 – grahinho