2

モデルを調整するときに生成される ROC/Sens/Spec と、同じデータセットでモデルによって行われた実際の予測との間には違いがあるようです。kernlab の ksvm を使用するキャレットを使用しています。glm でこの問題は発生していません。

data(iris)
library(caret)
iris <- subset(iris,Species == "versicolor" | Species == "setosa") # we need only two output classess
iris$noise <- runif(nrow(iris)) # add noise - otherwise the model is too "perfect"
iris$Species <- factor(iris$Species)
fitControl <- trainControl(method = "repeatedcv",number = 10, repeats = 5, savePredictions = TRUE, classProbs = TRUE, summaryFunction = twoClassSummary)

ir <- train(Species ~ Sepal.Length + noise, data=iris,method = "svmRadial", preProc = c("center", "scale"), trControl=fitControl,metric="ROC")
confusionMatrix(predict(ir), iris$Species, positive = "setosa")
getTrainperf(ir) # same as in the model summary

この不一致の原因は何ですか? 「実際の」相互検証後の予測はどれですか?

4

1 に答える 1

2

この関数getTrainPerfは、繰り返される相互検証フォールド全体で平均化された、最適に調整されたパラメーターの平均パフォーマンス結果を提供するようです。

仕組みgetTrainPerfは次のとおりです。

getTrainPerf(ir) 
#  TrainROC TrainSens TrainSpec    method
#1   0.9096     0.844     0.884 svmRadial

これは次の方法で達成されます。

ir$results
#      sigma    C    ROC  Sens  Spec      ROCSD    SensSD    SpecSD
#1 0.7856182 0.25 0.9064 0.860 0.888 0.09306044 0.1355262 0.1222911
#2 0.7856182 0.50 0.9096 0.844 0.884 0.08882360 0.1473023 0.1218229
#3 0.7856182 1.00 0.8968 0.836 0.884 0.09146071 0.1495026 0.1218229
ir$bestTune
#      sigma   C
#2 0.7856182 0.5
merge(ir$results, ir$bestTune)
#      sigma   C    ROC  Sens  Spec     ROCSD    SensSD    SpecSD
#1 0.7856182 0.5 0.9096 0.844 0.884 0.0888236 0.1473023 0.1218229

これは、クロス検証フォールドのパフォーマンス結果からも取得できます (10 フォールド、5 回の繰り返し、10*5=各パフォーマンス測定値の合計値 50)。

colMeans(ir$resample[1:3])
#     ROC   Sens   Spec 
#  0.9096 0.8440 0.8840 

したがって、getTrainPerf最適に調整されたパラメーター (シグマ、C) を使用して、さまざまな時点で (トレーニング データセット全体ではなく) 検証のために保留されたデータ フォールドの交差検証パフォーマンスの概要のみを示します。

predictただし、トレーニング データセット全体を予測する場合は、調整されたモデルで関数を使用する必要があります。

于 2016-12-15T19:36:07.530 に答える