我无法重现该问题。我认为这里没有足够的信息来重现该问题,但我确实有一些初步想法。
在训练/测试拆分之前运行虚拟数据处理
我看到您仅在训练数据上运行虚拟数据。我发现在整个数据集上运行虚拟数据处理通常是更好的策略,然后拆分为训练/测试。
有时当您先拆分时,您可能会遇到因素水平问题。
假设我有一个名为 colors 的字段,它是我的数据中包含级别 red、blue、green 的一个因素。如果我将数据拆分为训练数据和测试数据,我可能会遇到这样一种情况,即我的训练数据只有 red 和 blue 值而没有 green。现在,如果我的测试数据集包含所有三个,那么我的训练数据与测试数据中的列数将会有所不同。
我相信解决这个问题的一种方法是dummy.data.frame 函数中的drop 参数默认为 TRUE。
检查事项
在为训练和测试运行虚拟数据处理之前运行这些,以查看这些字段具有哪些特征被丢弃:
# find the class of each column
train_class <- sapply(train, class)
test_class <- sapply(test, class)
# find the number of unique values within each column
unq_train_vals <- sapply(train, function(x) length(unique(x)))
unq_test_vals <- sapply(test, function(x) length(unique(x)))
# combine into data frame for easy comparison
mydf <- data.frame(
train_class = train_class,
test_class = test_class,
unq_train_vals = unq_train_vals,
unq_test_vals = unq_test_vals
)
我知道这不是一个真正的“答案”,但我还没有足够的代表发表评论。