![](/img/trans.png)
[英]How to auto-exclude unseen new factor levels in predict.randomForest?
[英]Error predict.randomForest, factor levels
數天來,我一直在努力解決這個問題,但沒有成功。 我已經審查了類似的線程( 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,而測試數據具有NA的Yields。
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)。
我與一位同事交談,他給了我一個快速解決問題的方法:
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))
基本上,級別必須相同,這是小數位不匹配的問題。 問題解決了。 事后,現在看來很簡單...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.