В идеале, вы должны выполнить подвыборку внутри процедуры повторной выборки.Я предлагаю использовать аргумент sampling
для trainControl
, чтобы указать различные понижающие выборки.Использование кода из @ mr.joshuagordon:
library(caret)
#> Loading required package: lattice
#> Loading required package: ggplot2
require(tidyverse)
#> Loading required package: tidyverse
df <-
data.frame(
class = factor(c(rep('POS', 60000), rep('NEG', 5000))),
random1 = runif(65000),
random2 = runif(65000)
)
sampler <- function(x, y) {
if (!is.data.frame(x))
x <- as.data.frame(x)
dat <-
x %>%
mutate(.y = y) %>%
group_by(.y) %>%
sample_n(2500) %>%
ungroup() %>%
as.data.frame()
list(x = dat[, names(dat) != ".y", drop = FALSE], y = dat$.y)
}
samp_info <- list(name = sampler, first = TRUE)
ctrl <- trainControl(method = "cv", sampling = sampler)
lr_mod <- train(class ~ ., data = df, method = "glm", trControl = ctrl)
length(lr_mod$finalModel$residuals)
#> [1] 5000
Создано в 2019-03-20 пакетом представлений (v0.2.1)