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 함수를 사용해야합니다.