我的训练数据中有 30 个因子水平的预测变量。我的测试数据中再次有 30 个相同预测因子的因子水平,但有些水平不同。除非级别完全相同,否则 randomForest 不会进行预测。它显示错误。说,
predict.randomForest(模型,测试)中的错误
训练数据中不存在的新因子水平
最佳答案
我发现的一种解决方法是首先将训练和测试集中的因子变量转换为字符
test$factor <- as.character(test$factor)
然后向每个列添加一个带有测试/训练标志的列,即
test$isTest <- rep(1,nrow(test))
train$isTest <- rep(0,nrow(train))
然后绑定(bind)它们
fullSet <- rbind(test,train)
然后转换回一个因子
fullSet$factor <- as.factor(fullSet$factor)
这将确保测试集和训练集具有相同的级别。然后你可以分开:
test.new <- fullSet[fullSet$isTest==1,]
train.new <- fullSet[fullSet$isTest==0,]
并且您可以从每个中删除/NULL 的
isTest
列。然后,您将拥有可以训练和测试的相同级别的集合。可能有一个更优雅的解决方案,但这在过去对我有用,如果您需要经常重复,您可以将它写成一个小函数。关于如果测试数据中存在新的因子水平,R 中的随机森林包在预测()期间会显示错误。有什么办法可以避免这个错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17059432/