簡體   English   中英

錯誤預測。隨機森林,因子水平

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM