Jak określić wstrzymanie walidacji ustawione na daszek

Naprawdę lubię używać karetki przynajmniej we wczesnych etapach modelowania, zwłaszcza że jest to naprawdę łatwe w użyciu metody ponownego próbkowania. Pracuję jednak nad modelem, w którym zestaw treningowy ma sporą liczbę przypadków dodanych za pomocą częściowo nadzorowanego samokształcenia, a moje wyniki walidacji krzyżowej są naprawdę zniekształcone z tego powodu. Moje rozwiązanie tego problemu polega na użyciu zestawu walidacyjnego do pomiaru wydajności modelu, ale nie widzę sposobu, w jaki można użyć zestawu walidacyjnego bezpośrednio w karetce - czy brakuje mi czegoś lub to po prostu nie jest obsługiwane? Wiem, że mogę napisać własne opakowanie, aby zrobić to, co normalnie zrobiłbym dla m, ale byłoby naprawdę miło, gdyby istniało obejście bez tego.

Oto trywialny przykład tego, czego doświadczam:

> library(caret)
> set.seed(1)
> 
> #training/validation sets
> i <- sample(150,50)
> train <- iris[-i,]
> valid <- iris[i,]
> 
> #make my model
> tc <- trainControl(method="cv")
> model.rf <- train(Species ~ ., data=train,method="rf",trControl=tc)
> 
> #model parameters are selected using CV results...
> model.rf
100 samples
  4 predictors
  3 classes: 'setosa', 'versicolor', 'virginica' 

No pre-processing
Resampling: Cross-Validation (10 fold) 

Summary of sample sizes: 90, 90, 90, 89, 90, 92, ... 

Resampling results across tuning parameters:

  mtry  Accuracy  Kappa  Accuracy SD  Kappa SD
  2     0.971     0.956  0.0469       0.0717  
  3     0.971     0.956  0.0469       0.0717  
  4     0.971     0.956  0.0469       0.0717  

Accuracy was used to select the optimal model using  the largest value.
The final value used for the model was mtry = 2. 
> 
> #have to manually check validation set
> valid.pred <- predict(model.rf,valid)
> table(valid.pred,valid$Species)

valid.pred   setosa versicolor virginica
  setosa         17          0         0
  versicolor      0         20         1
  virginica       0          2        10
> mean(valid.pred==valid$Species)
[1] 0.94

Początkowo myślałem, że mogę to zrobić, tworząc niestandardowysummaryFunction() dlatrainControl() obiekt, ale nie widzę, jak odwołać się do mojego obiektu modelu, aby uzyskać prognozy z zestawu sprawdzania poprawności (dokumentacja -http://caret.r-forge.r-project.org/training.html - wymienia tylko „dane”, „lew” i „model” jako możliwe parametry). Na przykład to wyraźnie nie zadziała:

tc$summaryFunction <- function(data, lev = NULL, model = NULL){
  data.frame(Accuracy=mean(predict(<model object>,valid)==valid$Species))
}

EDYCJA: Próbując znaleźć naprawdę brzydką poprawkę, szukam, czy mogę uzyskać dostęp do obiektu modelu z zakresu innej funkcji, ale nawet nie widzę ich w modelu przechowywanym gdziekolwiek. Mam nadzieję, że istnieje pewne eleganckie rozwiązanie, którego nawet nie zobaczę ...

> tc$summaryFunction <- function(data, lev = NULL, model = NULL){
+   browser()
+   data.frame(Accuracy=mean(predict(model,valid)==valid$Species))
+ }
> train(Species ~ ., data=train,method="rf",trControl=tc)
note: only 1 unique complexity parameters in default grid. Truncating the grid to 1 .

Called from: trControl$summaryFunction(testOutput, classLevels, method)
Browse[1]> lapply(sys.frames(),function(x) ls(envi=x))
[[1]]
[1] "x"

[[2]]
 [1] "cons"      "contrasts" "data"      "form"      "m"         "na.action" "subset"   
 [8] "Terms"     "w"         "weights"   "x"         "xint"      "y"        

[[3]]
[1] "x"

[[4]]
 [1] "classLevels" "funcCall"    "maximize"    "method"      "metric"      "modelInfo"  
 [7] "modelType"   "paramCols"   "ppMethods"   "preProcess"  "startTime"   "testOutput" 
[13] "trainData"   "trainInfo"   "trControl"   "tuneGrid"    "tuneLength"  "weights"    
[19] "x"           "y"          

[[5]]
[1] "data"  "lev"   "model"

questionAnswers(2)

yourAnswerToTheQuestion