我已经连续几天没有成功了。我已经审核过类似的帖子(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)。
答案 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))
基本上,级别必须相同,小的十进制不匹配就是问题所在。问题解决了。事实之后,现在看起来很简单......