Как случайным образом выбрать обучающие и тестовые подмножества с одинаковой пропорцией значений для конкретной переменной в R? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть набор данных data с 16 переменными. Одна из переменных, DiseasePositive, указывает, был ли кто-то положительным на заболевание. Поэтому его значения либо 0, либо 1.

Я хочу сделать следующее:

  1. Произвольно выбрать подмножество из 70% моих данных для обучения модели.
  2. Убедитесь, что поезди наборы тестов имеют примерно равные пропорции людей с DiseasePositive==0 и людей с DiseasePositive==1.

Я читал, что могу использовать sample.split, чтобы сделать 70%, но я незнать, как сделать второе. Как я могу сделать это, используя функцию sample.split (из пакета caTools)?

Я сделал следующее, но я не уверен, работает ли эта функция следующим образом:

* +1023 *

1 Ответ

0 голосов
/ 01 октября 2019

Вот заказное решение R:

stratified.sample <- function(var, p) {
  obs  <- seq_along(var)
  grps <- unique(var)
  inds <- numeric()
  for(g in grps) {
    inds <- c(inds, sample(obs[var==g], floor(sum(var==g)*p)))
  }
  inds
}

Вы можете использовать вышеупомянутую функцию для стратификации в тест и обучения для любой переменной, даже если она имеет более 2 уровней. Вот демонстрация с использованием iris:

tinds <- stratified.sample(iris$Species, 0.7)
train <- iris[tinds,]
test  <- iris[-tinds,]

Убедитесь, что баланс классов был сохранен:

table(train$Species)
table(test$Species)

Использование sample.split и ваших данных:

inds  <- sample.split(data$DiseasePositive, SplitRatio = 0.7)
train <- data[inds,]
test  <- data[!inds,]
...