Как сохранить все уровни категориальных переменных при разделении фрейма данных в тестовом и обучающем наборе в R

Иногда при разделении фрейма данных с категориальными столбцами на тестовый и обучающий набор обучающий набор не будет содержать все уровни категориальной переменной. Когда вы затем обучите модель и попытаетесь предсказать набор тестов, прогноз не удастся:

Например:

x <- data.frame(...) # data frame with columns with very dispersed categorical variables
set.seed(123)
smp_size <- floor(0.75 * nrow(x))
train_idx <- sample(seq_len(nrow(x)), size = smp_size)
train_set <- x[train_idx, ]
test_set <- x[-train_idx, ]
m <- lm(some_formula, data=train_set)
predict(m, newdata=test_set)

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :  
    factor xxxx has new levels yyy ...

Кто-нибудь знает удобный способ установить уровни всех категориальных переменных как в обучающем, так и в тестовом наборе на уровни в исходном наборе данных?

Спасибо.


person botkop    schedule 14.11.2014    source источник


Ответы (1)


Функция каретки createDataPartition () пытается решить описанную вами проблему.

Учитывая приведенный выше пример, вы сможете использовать его следующим образом:

train_idx <- createDataPartition(y, times = 1, p = 0.75, list=F)

Вот часть документации R по функции createDataPartition: «случайная выборка выполняется в пределах уровней y, когда y является фактором в попытке сбалансировать распределения классов внутри разбиений».

person adpap    schedule 14.11.2014