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

时间:2013-06-12 06:58:53

标签: r random-forest

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

4 个答案:

答案 0 :(得分:9)

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

test$factor <- as.character(test$factor)

然后为每个都添加一个列,其中包含test / train标志,即

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列。然后你将拥有相同级别的集合,你可以训练和测试。可能有一个更优雅的解决方案,但这在过去对我有用,如果你需要经常重复它,你可以把它写成一个小函数。

答案 1 :(得分:2)

使用此选项可以使级别匹配(此处测试和训练指的是测试和训练数据集中的列)

test<-factor(test, levels=levels(train))

答案 2 :(得分:1)

对此的简单解决方案是将测试数据与训练数据相结合,进行预测并对预测中的rbind数据进行子集化。测试方法

答案 3 :(得分:0)

这是当测试数据的级别与训练数据的级别不匹配时发生的问题。

您可以为此做的简单修复是

  • 使用字符列作为因子加载测试数据
  • 然后将rbind()测试数据与火车数据
  • 现在从步骤2中提取测试数据行并进行预测