簡體   English   中英

randomForest()如何預測不在訓練數據中的新因子水平?

[英]How does randomForest() predict for new factor levels not in training data?

當我通過分割單個數據幀創建訓練集和測試集並使用randomForest包構建隨機森林時,對於訓練數據中不存在的某些因子水平, predict()函數仍然會拋出輸出。 盡管這沒有錯誤(這是我在相關問題中所尋找的),但我的問題是randomForest()模型是根據什么預測值的,因為理想情況下它應該引發以下錯誤...

Error in predict.randomForest() : New factor levels not present in the training data

只是出於好奇而想知道是否randomForest()方法對測試數據中的新因子水平做出了一些固有的假設。

這是一個可重現的示例:

seq1 <- c(5,3,1,3,1,"unwanted_char",4,2,2,3,0,4,1,1,0,1,0,1)
df1 <- matrix(seq1,6)
df1 <- as.data.frame(df1)
colnames(df1) <- c("a","b","c")
train <- df1[1:4,]
test <- df1[5:6,]

現在,當我們使用train創建森林並按如下方式在測試中運行predict()時...

forest1 <- randomForest(c~a+b,data=train,ntree=500)
test$prediction <- predict(forest1,test,type='response')

測試矩陣包含對最后一個觀測值為'1'的預測,其預測值為='unwanted_char'和b ='4'。

請注意:當您創建測試和訓練數據分開的預測函數拋出上述的錯誤,而不是預測。

我認為這是一個非常糟糕的例子。 但是,這是答案:

您創建的df1僅包含因子變量和4個觀察值。 在這里, mtry將等於1,這意味着大約1/2的樹木將根據b單獨和1/2上a孤獨。 b == "4" ,分類始終為1。IE- b == 4完美地預測了c 同樣, a == 1完美地預測c == 0

當你在一個單一的數據集創建數據,這個工作的原因是這兩個變量因素變量,其中可能的水平都存在traintest ,盡管在觀察量為一些等級== 0 train 由於“ unwanted_char”是train$a一個可能級別(盡管未觀察到),因此對您的預測沒有問題。 如果將它們創建為單獨的數據集,則會分別創建因子變量,並且test具有新的級別。

就是說,從本質上講,您的問題之所以有效,是因為您不了解R中的因素如何起作用。

predict.randomForest()中的錯誤:訓練數據中不存在新的因子水平

此錯誤非常令人困惑,您可能希望使用構建模型的數據集來預測需要預測的數據集並進行預測。

具有行編號的后預測子集,簡便易用且經過測試的方法

我同意亞歷克斯的觀點,這不是一個很好的例子。

這是您問題的答案:

       str(train)

如果檢查火車數據的結構,您將看到變量“ a”具有所有4個級別,因為在創建數據框df1時已分配了級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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