将数据拆分为训练集和测试集:如何确保所有因素都包含在训练集中?

Split data into training and test set: How to make sure all factors are included in training set?

我有一个名为 b 的数据框。我把它分成训练集和测试集。

smp_size <- floor(0.75 * nrow(b))
set.seed(123)
train_ind <- sample(seq_len(nrow(b)), size = smp_size)
b_train <- b[train_ind, ]
b_test <- b[-train_ind, ]

b 包含一个 variable/column,比方说 x,我将其用作 factor() 和许多不同的类别。

我使用 b_train 得到函数为 lm() 的线性模型。之后,我将函数 predict()lm() 对象和 b_test 一起使用。遗憾的是,b_train$x 并未包含 b$x 中所有不同类型的字符。因此,无法使用函数 predict(),因为 b_test$x 包含不在 b_train$x.

中的类别

如何确保所有类型的类别都包含在b_train$x中?

这可以使用 caret 包的 createDataPartition() 函数轻松完成。

library(caret)
samp = createDataPartition(as.factor(b$x), p = 0.75, list = F)

train = b[samp,]
test = b[-samp,]