2015-05-04 88 views
2

使用train()函數擬合randomForest之後,我遇到了調用partialPlot()和plotmo()的問題。下面是一些可重複碼:在插入隨機森林模型之後使用partialPlot

library(AER) 
library(caret) 

data(Mortgage) 

fitControl <- trainControl(method = "repeatedcv" 
          ,number = 5 
          ,repeats = 10 
          ,allowParallel = TRUE) 

library(doMC) 

registerDoMC(cores=10) 

Final.rfModel <- train(form=networth ~ ., data=Mortgage, method = "rf", metric='RMSE', trControl = fitControl, tuneLength=10, importance = TRUE) 

#### partial plots fail 
partialPlot(Final.rfModel$finalModel, Mortgage, "liquid") 

library(plotmo) 
plotmo(Final.rfModel$finalModel) 

回答

1

之間有一定的功能(包括randomForesttrain)如何處理虛擬變量有些不一致。 R中使用公式方法的大多數函數會將因子預測變量轉換爲虛擬變量,因爲它們的模型需要數據的數字表示。例外情況是基於樹和規則的模型(可以在分類預測器上分割),樸素貝葉斯和其他一些模型。

所以randomForest當您使用randomForest(y ~ ., data = dat)train(和大多數人)將使用類似train(y ~ ., data = dat)通話不創建虛擬變量。

發生錯誤是因爲rate,married和其他一些預測因素。由train創建的虛擬變量不具有相同的名稱,因此partialPlot找不到它們。

train一起使用非公式方法會將因子預測變量傳遞到randomForest,並且所有內容都將工作。

TL; DR

使用非公式法train在這種情況下:

Final.rfModel <- train(form=networth ~ ., data=Mortgage, 
         method = "rf", 
         metric='RMSE', 
         trControl = fitControl, 
         tuneLength=10, 
         importance = TRUE) 

最大

+0

您可以顯示在火車上的非公式法的例子嗎?你的例子還有一個公式。 –

+0

Hi @williamchiu。你是正確的,看來Max最後把這個公式基於方法。我相信你已經知道了,非公式(或默認)方法是簡單地聲明x和y,因此S3類用於默認類: train((x,y, method =「rf」, preProcess = NULL, ..., – Scott