Рассчитать калибровку модели во время перекрестной проверки в карете?

первый плакат здесь, так что извиняюсь за ошибки новичка

Я использую пакет каретки в R. Я подбираю некоторые модели (GBM, linear SVM, NB, LDA), используя повторную 10-кратную перекрестную проверку на обучающем наборе. Используя настраиваемый trainControl, caret даже дает мне целый ряд показателей производительности модели, таких как ROC, Spec / sens, Kappa, Accuracy по тестовым складкам. Это действительно фантастика. Есть еще одна метрика, которую я хотел бы иметь: некоторая мера калибровки модели.

Я заметил, что внутри курсора есть функция, которая может создайте калибровочный график, чтобы оценить согласованность производительности модели по частям ваших данных. Возможно ли, чтобы каретка вычисляла это для каждой тестовой свертки во время построения модели с перекрестной проверкой? Или это можно применить только к некоторым новым имеющимся данным, на основании которых мы делаем прогнозы?

Для некоторого контекста на данный момент у меня есть что-то вроде этого:

fitControl <- trainControl(method = "repeatedcv", repeats=2, number = 10, classProbs = TRUE, summaryFunction = custom.summary)
gbmGrid <-  expand.grid(.interaction.depth = c(1,2,3),.n.trees = seq(100,800,by=100),.shrinkage = c(0.01))
gbmModel <- train(y= train_target, x = data.frame(t_train_predictors),
              method = "gbm",
              trControl = fitControl,
              tuneGrid = gbmGrid,
              verbose = FALSE)

Если это помогает, я использую ~ 25 числовых предикторов и N = 2200, предсказывая фактор с двумя классами.

Большое спасибо за любую помощь / совет. Адам


person Achekroud    schedule 06.02.2015    source источник


Ответы (1)


Функция calibration принимает любые данные, которые вы ей предоставляете. Вы можете получить повторно выбранные значения из train подобъекта pred:

> set.seed(1)
> dat <- twoClassSim(2000)
> 
> set.seed(2)
> mod <- train(Class ~ ., data = dat, 
+              method = "lda",
+              trControl = trainControl(savePredictions = TRUE,
+                                       classProbs = TRUE))
> 
> str(mod$pred)
'data.frame':   18413 obs. of  7 variables:
 $ pred     : Factor w/ 2 levels "Class1","Class2": 1 2 2 1 1 2 1 1 2 1 ...
 $ obs      : Factor w/ 2 levels "Class1","Class2": 1 2 2 1 1 2 1 1 2 2 ...
 $ Class1   : num  0.631 0.018 0.138 0.686 0.926 ...
 $ Class2   : num  0.369 0.982 0.8616 0.3139 0.0744 ...
 $ rowIndex : int  1 3 4 10 12 13 18 22 25 27 ...
 $ parameter: Factor w/ 1 level "none": 1 1 1 1 1 1 1 1 1 1 ...
 $ Resample : chr  "Resample01" "Resample01" "Resample01" "Resample01" ...

Тогда вы можете использовать:

> cal <- calibration(obs ~ Class1, data = mod$pred)
> xyplot(cal)

Просто имейте в виду, что при использовании многих методов повторной выборки один экземпляр обучающего набора будет удерживаться несколько раз:

> table(table(mod$pred$rowIndex))

  2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17 
  2  11  30  77 135 209 332 314 307 231 185  93  48  16   6   4 

Вы можете усреднить вероятности классов на rowIndex, если хотите.

Максимум

person topepo    schedule 15.02.2015
comment
Ооо спасибо! Вот о чем я подумал - спасибо за это решение. Я хотел проголосовать за ваше решение, но у меня еще нет репутации. Еще раз спасибо за вашу помощь и отличный пакет, Макс. - person Achekroud; 20.02.2015