2011-12-03 186 views
61

我想,以適應隨機森林模型,但是當我打電話如何在R中創建具有缺失(NA)值的隨機森林?

library(randomForest) 
cars$speed[1] <- NA # to simulate missing value 
model <- randomForest(speed ~., data=cars) 

我收到以下錯誤

Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, : 
    missing values in object 
+0

在目前的狀態下,這個問題很難回答。你能用一些樣本數據更新你的問題嗎? – Chase

+1

@ MattO'Brien還有趣的是,問題的質量是基於觀點數而不是問題本身的優點來討論的。答案是,因爲@Joran不知道要問什麼,並且爲提問者的問題提供了一個很好的解決方案。 – user7610

回答

101

我對這個問題的第一反應是,它並沒有表現出多大的研究因爲「每個人」都知道隨機森林不能處理預測變量中的缺失值。但是在檢查?randomForest時,我必須承認它可以更明確地說明這一點。

(雖然,Breiman的PDF鏈接到文檔中並明確地說,遺漏值只是沒有得到處理的)。

的官方文檔,我可以看到的唯一明顯的線索是默認值na.action參數爲na.fail,這對新用戶來說可能太神祕了。

在任何情況下,如果你的預測有缺失值,你有(基本)兩種選擇:

  1. 使用不同的工具(rpart手柄缺失值很好。)
  2. 歸咎於缺少的值

毫不奇怪,randomForest包具有這樣做的功能,rfImpute?rfImpute的文檔貫穿其使用的基本示例。

如果只有少數情況下缺少值,您也可以嘗試設置na.action = na.omit來簡單地刪除這些情況。

當然,這個答案有點猜測你的問題確實只是缺少了值。

+0

你碰巧知道在OP的第一個參數中有什麼'WIN〜.'意思?這當然不是提問的最佳地點,但想知道你是否會知道。謝謝。 –

+4

@ user273158這是模型公式,在'?randomForest'和'formula'參數下記錄。它告訴R使用'WIN'作爲響應變量,'.'是速記,意思是「數據幀中的所有其他變量」。所以它告訴R使用'WIN'作爲響應變量,所有其他可用變量都是預測變量。有關更多詳細信息,請參閱「?公式」。 – joran

3

如果有可能缺失值的信息,那麼你可以inpute缺失值,並增加額外的二元變量(與new.vars<-is.na(your_dataset)),並檢查它是否降低誤差,如果new.var過大集將它添加到your_dataset那麼你可以使用唯有它,挑significiant變量與varImpPlot並將它們添加到your_dataset,你也可以嘗試單變量添加到your_dataset,其對NAnew.var <- rowSums(new.vars)

的數字。這是不是離topick回答,如果缺少變量信息會計因爲他們可以單獨糾正由於不完美的插補程序導致的模型誤差增加。

缺失值是信息性的,然後它們是由於非隨機原因引起的,它在社會實驗環境中尤其常見。