Проверьте createFolds
в пакете caret
для фиксированных сгибов.
Вот код, который вы можете изменить, чтобы соответствовать вашему конкретному случаю моделирования;В этом примере будет построена модель случайного леса, но вы можете переключить модель для SVM.Если вы следуете руководству по пакетам, есть ссылка (скопированная здесь для простоты: http://topepo.github.io/caret/train-models-by-tag.html#support-vector-machines) - в разделе 7.0.47 перечислены все доступные модели SVM и их параметры. Обратите внимание, что вам может потребоваться установить некоторые дополнительные пакеты, например kernlab
, для использования определенных моделей.
Существует пакет под названием rngtools
, который должен позволять вам создавать воспроизводимые модели на нескольких ядрах (параллельная обработка), но если вы хотите быть уверены, то одно ядровероятно, лучший способ в моем опыте.
folds <- 3
set.seed(42)
cvIndex <- createFolds(your_data, folds, returnTrain = T)
fit.control <- trainControl(method = "cv",
index = cvIndex,
number = folds,
classProbs = TRUE,
summaryFunction = twoClassSummary,
allowParallel = FALSE)
search.grid <- expand.grid(.mtry = c(seq.int(1:sqrt(length(your_data)))+1))
rfCaret <- train(your_data_x, your_data_y, method = "rf",
metric = 'ROC', ntree = 500,
trControl = fit.control, tuneGrid = search.grid,
)
По моему опыту, каретка довольно хороша для охвата практически всех баз. Если вы также хотите предварительно обработать свои данные (например, центр, масштаб) - тогда вы хотитефункция preProcess
- опять же, детали в пакете каретки, если вы наберете? train - но, например, вам захочется
preProcess(yourData, method = c("center", "scale"))
Каретка умна в том смысле, что она понимает, что она приняла предварительно обработанный ввод, иприменяет такое же масштабирование к вашим наборам тестовых данных.
edit - дополнительные: проблема с неиспользованными параметрами Чтобы ответить на вашответьте на вопрос о неиспользуемых параметрах - возможно, вы используете mtry, который является случайным параметром леса.
Вот версия для простого SVM:
folds <- 3
set.seed(42)
cvIndex <- createFolds(dataset$Outcome, folds, returnTrain = T)
fit.control <- trainControl(method = "cv",
index = cvIndex,
number = folds,
classProbs = TRUE,
summaryFunction = twoClassSummary,
allowParallel = FALSE)
SVMCaret <- train(Outcome ~ ., data = dataset, method = "svmLinear",
metric = 'ROC',
trControl = fit.control)
Вам не нужнотюнинг-сетка;Карета будет генерировать случайный.Конечно, если вы хотите проверить конкретные значения затрат, то создайте их самостоятельно так же, как я делал для параметра .mtry для randomForests.