2016-12-15 12 views
1

モデルのチューニング時に生成されるROC/Sens/Specと、同じデータセットのモデルが実際に行った予測との違いがあるようです。私はkernlabのksvmを使用するキャレットを使用しています。私はglmでこの問題を経験していません。キャレットとsvmの予測のクロスバリデーション

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 

この矛盾の原因は何ですか?どのようなものが「真の」相互検証後の予測ですか?

答えて

1

関数getTrainPerfは、繰り返されるクロスバリデーションの折り返し全体で平均化された最適な調整パラメータの平均パフォーマンス結果を示しているようです。 、(

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倍以下の方法で達成される

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

:ここ

getTrainPerf

は、作品がどのように5回の繰り返し、各パフォーマンス測定の10 * 5 = 50合計値)。

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

したがって、getTrainPerfのみ最良同調パラメータで保持アウト(全体ではなく、トレーニングデータセットに)異なる時間に検証用データ折り目にクロスバリデーション性能の要約を与える(シグマ、C) 。

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

関連する問題