Как указать задержку проверки, установленную для каретки

Мне действительно нравится использовать каретку, по крайней мере, на ранних стадиях моделирования, особенно потому, что это действительно легко использовать методы пересэмплирования. Тем не менее, я работаю над моделью, в которой учебный набор имеет достаточное количество случаев, добавленных посредством самообучения под наблюдением, и из-за этого мои результаты перекрестной проверки действительно искажены. Мое решение этого заключается в использовании набора проверки для измерения производительности модели, но я не вижу способа использовать набор проверки непосредственно внутри каретки - я что-то упустил или это просто не поддерживается? Я знаю, что могу написать свои собственные обертки, чтобы делать то, что обычно делает каретка для m, но было бы очень хорошо, если бы был обходной путь без необходимости делать это.

Вот тривиальный пример того, что я испытываю:

> 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

Я изначально думал, что смогу сделать это, создавsummaryFunction() дляtrainControl() объект, но я не вижу, как ссылаться на мой объект модели, чтобы получить прогнозы из набора проверки (документация -http://caret.r-forge.r-project.org/training.html - перечисляет только «данные», «лев» и «модель» в качестве возможных параметров). Например, это явно не будет работать:

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

РЕДАКТИРОВАТЬ: В попытке придумать действительно уродливое исправление, я искал, могу ли я получить доступ к объекту модели из области действия другой функции, но я даже не вижу, чтобы их модель сохранялась где-либо. Надеюсь, есть какое-то изящное решение, которое я даже близко не вижу ...

> 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"

Ответы на вопрос(2)

Ваш ответ на вопрос