2015-09-29 39 views
1

我是randomForest R軟件包的新用戶。我想爲mtry =1,5,7迭代運行randomForest分類。運行randomForest許多mtry值

例如,我想運行mtry =1 100次和mtry=2 100次。輸出應顯示每次運行的袋外誤差(100次結果爲mtry = 1,100次結果爲mtry = 2)。

我只能編寫1次運行的代碼,我不知道如何運行帶有不同值的代碼迭代mtry

rf <- randomForest(class_name ~ ., data=tr,ntree=1000, 
        importance=TRUE, proximity=TRUE, mtry=2) 

回答

4

這是一個使用內置的iris數據框的快速和骯髒的方法。下面的代碼給出了每個值爲mtry的最終OOB錯誤率。

mtry = 1:4 
oob = data.frame() 

# Loop over each value of mtry and store result in a data frame 
for (i in mtry) { 

    rf1 <- randomForest(Species ~ ., data=iris, ntree=100, mtry=i) 

    result = data.frame(mtry=i, 
         OOB=rf1[["err.rate"]][nrow(rf1[["err.rate"]]),"OOB"]) 
    oob = rbind(oob, result) 
} 

oob 
    mtry  OOB 
OOB  1 0.04666667 
OOB1 2 0.04000000 
OOB2 3 0.04000000 
OOB3 4 0.04000000 

爲了讓所有的ntree OOB錯誤,從mtry每個值,只是改變這一點:

OOB=rf1[["err.rate"]][nrow(rf1[["err.rate"]]),"OOB"]) 

要這樣:

OOB=rf1[["err.rate"]][ ,"OOB"]) 
+0

感謝eipi10。因爲我想重複運行mtry = 1,2,3(100次),所以每個mtry應該有100個結果。我用複製函數結合你的代碼,但它沒有奏效。請幫忙。 – user30985

+0

我的答案的最後一節顯示瞭如何獲取每個mtry值的所有100個OOB值。你只需要從for循環中的代碼中刪除'nrow(rf1 [[err.rate「]])''。 – eipi10