错误predict.randomForest,因子级别

时间:2018-03-09 09:48:00

标签: r random-forest levels

我已经连续几天没有成功了。我已经审核过类似的帖子(Error in predict.randomForest),但似乎没有任何帮助。我正在尝试开发一种模型来检验播种率(Rx)如何影响产量。

我想我需要弄清楚如何制作我的因子水平 测试数据与我的训练数据匹配,因为我收到此错误:

Error in predict.randomForest(randFor.mod, newdata = pred.27k) : 
New factor levels not present in the training data

我从完整数据(pred.all)中对我的训练数据(pred.sub)进行了子集,这样我只考虑具有值的Yields,测试数据的Yield值为NA。

pred.sub<-subset(pred.all, !(is.na(pred.all$Yield)))

模型在训练数据上运行良好。

然而,一个侧面步骤是我需要为每个播种率创建单独的数据帧:

pred.27k<-pred.all
pred.27k$Rx<-27000
pred.27k$Rx<-factor(pred.27k$Rx, c(27000, 32000, 37000, 42000))

pred.32k<-pred.all
pred.32k$Rx<-32000
pred.32k$Rx<-factor(pred.32k$Rx, c(27000, 32000, 37000, 42000))

pred.37k<-pred.all
pred.37k$Rx<-37000
pred.37k$Rx<-factor(pred.37k$Rx, c(27000, 32000, 37000, 42000))

pred.42k<-pred.all
pred.42k$Rx<-42000
pred.42k$Rx<-factor(pred.42k$Rx, c(27000, 32000, 37000, 42000))

我检查了pred.all,pred.sub和pred.27k - pred.42k,Rx是每个数据集中的一个因子,有4个级别(27000 - 42000)。

我已经为任何预测变量估算了任何缺失的数据。

具有讽刺意味的是,我过去使用过此代码没有问题。

鉴于Rx是整个数据集(pred.all)中4个级别的因子,训练数据(pred.sub)和测试数据(pred.27k - pred.42k)我不确定还有什么做。我在设置pred.27k - pred.42k的级别时尝试调整代码,但没有任何效果。

一个线索可能是pred.sub $ Rx和pred.all $ Rx有4个级别带小数(27000.0005),但pred.27k $ Rx有4个级别是指定的整数(27000)。

1 个答案:

答案 0 :(得分:0)

我和一位给我快速修复的同事交谈过:

pred.all$Rx<-factor(round(as.numeric(as.character(pred.all$Rx))))

其中pred.all是完整的数据集。这会将测试/训练数据中的任何值四舍五入以匹配此处的级别:

pred.27k<-pred.all
pred.27k$Rx<-27000
pred.27k$Rx<-factor(pred.27k$Rx, c(27000, 32000, 37000, 42000))

pred.32k<-pred.all
pred.32k$Rx<-32000
pred.32k$Rx<-factor(pred.32k$Rx, c(27000, 32000, 37000, 42000))

pred.37k<-pred.all
pred.37k$Rx<-37000
pred.37k$Rx<-factor(pred.37k$Rx, c(27000, 32000, 37000, 42000))

pred.42k<-pred.all
pred.42k$Rx<-42000
pred.42k$Rx<-factor(pred.42k$Rx, c(27000, 32000, 37000, 42000))

基本上,级别必须相同,小的十进制不匹配就是问题所在。问题解决了。事实之后,现在看起来很简单......