4

我的训练数据中有 30 个预测因子的因子水平。我的测试数据中再次有 30 个相同预测因子的因子水平,但有些水平是不同的。除非水平完全相同,否则 randomForest 不会预测。它显示错误。说,predict.randomForest(model,test) 中的错误 训练数据中不存在新的因子水平

4

4 回答 4

10

我发现的一种解决方法是首先将您的训练和测试集中的因子变量转换为字符

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,]

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

于 2013-06-12T16:58:06.303 回答
2

使用它来使级别匹配(这里测试和训练指的是测试和训练数据集中的列)

test<-factor(test, levels=levels(train))
于 2015-09-17T06:27:42.760 回答
1

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

于 2015-11-04T13:17:04.770 回答
0

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

一个简单的修复方法:

  • 以字符列为因素加载测试数据
  • 然后 rbind() 用训练数据测试数据
  • 现在将步骤 2 中的测试数据行子集化并进行预测
于 2019-02-19T10:41:35.783 回答