我的训练数据有30个预测变量的水平。在测试数据中,同样的预测变量也有30个水平,但是其中一些水平不同。随机森林算法需要完全匹配才能进行预测,否则会出现错误提示,如下所示: Error in predict.randomForest(model,test) New factor levels not present in the training data
意思是测试数据中存在训练数据中不存在的新水平,无法进行预测。
我的训练数据有30个预测变量的水平。在测试数据中,同样的预测变量也有30个水平,但是其中一些水平不同。随机森林算法需要完全匹配才能进行预测,否则会出现错误提示,如下所示: Error in predict.randomForest(model,test) New factor levels not present in the training data
意思是测试数据中存在训练数据中不存在的新水平,无法进行预测。
我发现的一个解决方法是先将训练集和测试集中的因子变量转换为字符变量。
test$factor <- as.character(test$factor)
然后为每个表格添加一个测试/训练标志的列,例如:
test$isTest <- rep(1,nrow(test))
train$isTest <- rep(0,nrow(train))
然后使用rbind将它们合并
fullSet <- rbind(test,train)
然后将其转换回因子变量
fullSet$factor <- as.factor(fullSet$factor)
这将确保测试集和训练集具有相同的级别。然后您可以重新拆分:
test.new <- fullSet[fullSet$isTest==1,]
train.new <- fullSet[fullSet$isTest==0,]
你可以删掉每个集合中的isTest
列。然后你会得到具有相同级别的数据集,可以用于训练和测试。可能有更优雅的解决方案,但这在过去曾经对我有用,并且如果需要经常重复,你可以把它写成一个小函数。
test<-factor(test, levels=levels(train))
这个问题的简单解决方案是:
当你的测试数据级别与训练数据级别不匹配时,这就是出现的问题。
一个简单的修复方法: