Невозможно создать абсолютно равные разделы данных с помощью createDataPartition в R- получать 1396 и 1398 наблюдений каждый, но нужно 1397
Я хорошо знаком с R, но никогда не имел этого требования, когда мне нужно было создать абсолютно одинаковый раздел данных случайным образом, используя createDataPartition в R.
index = createDataPartition(final_ts$SAR,p=0.5, list = F)
final_test_data = final_ts[index,]
final_validation_data = final_ts[-index,]
Этот код создает два набора данных с размерами 1396 и 1398 наблюдений соответственно.
Я удивлен, почему р =0,5 не делает то, что должен делать. Имеет ли это какое-то отношение к результирующему набору данных, не имеющему нечетное количество наблюдений по умолчанию? Заранее спасибо!
1 ответ
Это связано с количеством случаев переменной ответа (final_ts$SAR
в твоем случае).
Например:
y <- rep(c(0,1), 10)
table(y)
y
0 1
10 10
# even number of cases
Теперь мы разделим:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 10 obs
train
0 1
5 5
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
Если мы построим и пример вместо этого с нечетным числом случаев:
y <- rep(c(0,1), 11)
table(y)
y
0 1
11 11
У нас есть:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 12 obs.
train
0 1
6 6
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
Больше информации здесь.
Вот еще один поток, который объясняет, почему число, возвращаемое функцией createDataPartition, может показаться нам "неуместным", но не в соответствии с тем, что эта функция пытается сделать. Итак, это зависит от того, что у вас есть в final_ts$SAR и разброса данных. Если это категориальное значение, например: T и F, если у вас всего 100, 55 - T, 45 - F. Когда вы вызываете путь в своем коде, он вернет вам 51, потому что: 55*0,5=27,5, 45*0,5=22,5, округляем каждый результат в большую сторону, 28+23=51.
Вы можете обратиться к потоку ниже, в котором есть отличное объяснение этого, когда значения, которые вы хотите разделить, являются числами.
R - каретка createDataPartition возвращает больше выборок, чем ожидалось