2015-09-28 65 views
2

我正在使用ramdomForest包創建一個隨機森林模型。 5月份的數據集龐大,超過一百萬個200多個變量的觀測值。在用樣本數據訓練隨機森林時,我無法捕獲所有變量的所有因子水平。如何在predict.randomForest中自動排除看不見的新因子水平?

因此,當使用predict()預測驗證集時,它將引發錯誤,因爲存在新的因子級別,這些級別在訓練數據中未捕獲。

一種解決方案是確保訓練數據變量包含所有因子水平。但事實證明這是非常乏味的,我並不需要所有的因素水平。

在randomForest包中運行predict()時,是否存在自動排除包含以前未識別因子水平的驗證集中的觀察值的方法?在CRAN文件中可以找到任何爭論。我不認爲我可以爲此創造一個可重現的例子。

+0

但是,您如何預測培訓中不存在的水平? – 2015-09-28 06:19:25

+0

我不介意排除極低頻出現的某些水平的觀測值。我可以在預測的時候忽略那部分數據。 – Gaurav

回答

3

一個解決方案是組合列車和測試矩陣,並在組合矩陣上使用as.factor。然後再分開進入Train和Test。我在隨機森林中遇到了同樣的問題,這個解決方案對我來說很合適。

例如:

combine <- rbind(Train,Test) 
    combine$var1 <- as.factor(combine$var1) 

    ##Then split into Test and Train 
    Train$var1 <- combine[1:nrow(train)] 

    similar for Test. 

希望這有助於!

+0

好吧,現在可以使用,因爲它可以在訓練時消除持續的錯誤。但是它仍然可以預測含有新因子水平的變量的觀測值(如果這些水平不在訓練集中,這是有意義的,還是'randomForest()'有內部方法來處理新的因子水平?) – Gaurav

+0

有多少變量在驗證中存在這個新因素的問題?如果太多,那麼我認爲訓練數據不能很好地表示整個數據。也許你可能想嘗試分層抽樣。排除觀察結果,如果太多可能會導致模型預測能力的下降。在Stats Exchange上發佈此問題。 –

+0

所有變量都有問題,但低頻因子水平在所有觀測值的不到5%內發生......清除所有數據仍然是一項很大的努力......但是您的方法似乎只是一個開始。我想我應該爲'randomForest()'預測一個新的問題,用新的因子水平預測觀測值... – Gaurav