【问题标题】:Error predict.randomForest, factor levels误差 predict.randomForest,因子水平
【发布时间】:2018-08-17 20:32:01
【问题描述】:

几天来我一直在努力解决这个问题,但没有成功。我已经查看了类似的线程 (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) 进行子集化,这样我只考虑具有值的收益率,测试数据的收益率为 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)、训练数据 (pred.sub) 和测试数据 (pred.27k - pred.42k) 的 4 个级别的因子,我不确定还有什么做。在设置 pred.27k - pred.42k 的级别时,我尝试过对代码进行调整,但没有任何效果。

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

【问题讨论】:

  • 能否提供随机的 20 行训练和测试数据,dput

标签: r random-forest levels


【解决方案1】:

我与一位同事交谈,他给了我一个有效的快速解决方案:

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))

基本上,级别必须相同,小数不匹配是问题所在。问题解决了。事后,现在看起来很简单……

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多