如果测试数据中存在新的因子级别,则R中的随机森林包显示预测期间的错误().有什么办法可以避免这个错误吗?

Ayu*_*ngh 4 r random-forest

我的训练数据中有30个因子级别的预测因子.在我的测试数据中,我再次拥有相同预测因子的30个因子水平,但某些水平不同.并且randomForest不会预测除非级别完全相同.它显示错误.说,predict.randomForest(模型,测试)中的错误训练数据中不存在的新因子水平

Tom*_*evi 10

我发现的一个解决方法是首先将列车中的因子变量和测试集转换为字符

test$factor <- as.character(test$factor)
Run Code Online (Sandbox Code Playgroud)

然后为每个添加一个列,其中包含测试/训练的标志,即

test$isTest <- rep(1,nrow(test))
train$isTest <- rep(0,nrow(train))
Run Code Online (Sandbox Code Playgroud)

然后rbind他们

fullSet <- rbind(test,train)
Run Code Online (Sandbox Code Playgroud)

然后转换回一个因子

fullSet$factor <- as.factor(fullSet$factor)
Run Code Online (Sandbox Code Playgroud)

这将确保测试和训练集具有相同的水平.然后你可以拆分:

test.new <- fullSet[fullSet$isTest==1,]
train.new <- fullSet[fullSet$isTest==0,]
Run Code Online (Sandbox Code Playgroud)

你可以isTest从每个列中删除/清空列.然后你将拥有相同级别的集合,你可以训练和测试.可能有一个更优雅的解决方案,但过去这对我有用,如果你需要经常重复它,你可以把它写成一个小函数.