Невозможно создать абсолютно равные разделы данных с помощью 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 возвращает больше выборок, чем ожидалось

Другие вопросы по тегам