Как прогнозировать набор тестов после использования CV с groupKFold () для сохранения важных группировок в наборе данных - PullRequest
0 голосов
/ 14 мая 2019

У меня есть набор данных с важными группировками, которые я хочу сохранить, чтобы не было утечки данных для какой-либо группы между обучением и тестовым набором, и я хотел бы сделать это с помощью пакета 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 () выше.Как я могу сделать это без утечки данных?

Спасибо за любую помощь.

...