У меня есть набор данных с важными группировками, которые я хочу сохранить, чтобы не было утечки данных для какой-либо группы между обучением и тестовым набором, и я хотел бы сделать это с помощью пакета caret.Я понимаю, что groupKFold () можно использовать для сохранения группировок во время перекрестной проверки на обучающем наборе, а полученные сгибы используются в аргументе index команды traincontrol.
Мой вопрос заключается в том, каким образом можно предотвратить утечку данных в каждой группе (т. Е. Предположить, что определенные лица / группы имеют по несколько строк в кадре данных) между обучением и тестовым набором.Я предполагаю, что мне нужно сделать это, прежде чем я использую groupKFold () в обучающем наборе.
Извиняюсь, если я неправильно понимаю, что здесь делает CV.
Пример данных с кодом приведен ниже.
```
# Make random dataframe
x1 <- runif(n = 50, min = 1, max = 50)
x2 <- runif(n = 50, min = 100, max = 250)
class <- sample(x = c(0, 1), size = 50, replace = TRUE)
group <- sample(x = c(1:20), size = 50, replace = TRUE)
df = data.frame(x1, x2, class, group)
# perform 10 fold CV while preserving group
group_folds <- groupKFold(df$group, k = 10)
group_fit_control <- trainControl(## use grouped CV folds
index = group_folds,
method = "cv")
# fit model
set.seed(2019)
svm_fit <- train(as.factor(class) ~ .,
data = select(df, - group),
method = "svmLinear",
trControl = group_fit_control)
# run prediction
predict(svm_fit, newdata = select(df, - group))
```
Я думаю, что мне нужно разделить тренировочный и тестовый набор таким образом, чтобы ни одна группа в тренировочном наборе не была найдена в тестовом наборе, а затем использовать только обучающий набор в train () выше.Как я могу сделать это без утечки данных?
Спасибо за любую помощь.