2016-11-28 83 views
1

在插入符包中使用火車的默認值,我試圖訓練數據集xtr2(dim(xtr2):765 9408)的隨機森林模型。問題在於它難以置信地花費很長時間(一次訓練需要一天以上)來適應功能。據我所知在默認情況下使用自舉採樣(25次)和三次隨機選擇mtry,爲什麼它應該這麼長? 請注意,我需要在每次運行中訓練rf三次(因爲我需要用相同的數據來表示不同隨機森林模型的結果),並且需要大約三天的時間,我需要運行10個不同樣品的代碼,所以我需要30天才能得到結果。R caret randomforest

我的問題是我如何使它更快?

  1. 可以改變列車的默認值使運行時間減少嗎?例如使用簡歷進行培訓?

  2. 可以使用脫字符包進行並行處理嗎?如果是的話,該怎麼辦?

  3. 隨機森林包的tuneRF可以做任何更改的時間?

這是代碼:

rffit=train(xtr2,ytr2,method="rf",ntree=500) 
rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500, 
        keep.forest=TRUE,importance=TRUE,oob.prox =FALSE , 
        mtry = rffit$bestTune$mtry) 

謝謝

+1

你能分享你的樣本數據集嗎? –

+0

'dim(xtr2):765 9408'這是什麼意思? – user31264

+0

什麼需要24小時:'train'或'randomForest'? 'rffit $ bestTune $ mtry'的價值是什麼?你有沒有試着調用randomForest或者在小樣本的數據上使用相同的參數進行訓練(比如說50個元素)並且看看發生了什麼?您是否嘗試過在這些小樣本上玩參數:keep.forest,important,oob.prox,mtry? – user31264

回答

2

我對你的問題的想法:

  1. 是的!但不要忘記,您也可以控制搜索網格caret用於調整參數;在這種情況下,mtry。我不知道默認的搜索網格是什麼mtry,但請嘗試以下操作:

    CTRL < - trainControl( 「CV」,數= 5,verboseIter = TRUE)

    set.seed(101) #爲再現

    RFFIT < - 列車(xtr2,ytr2,方法= 「RF」,trControl = CTRL,tuneLength = 5)

  2. 是!請參閱caret網站:http://topepo.github.io/caret/parallel-processing.html

  3. 是,否! tuneRF只是使用OOB錯誤來找到最佳值mtryrandomForest中唯一的調整參數)。使用交叉驗證往往會更好地工作,並對模型性能產生更真實的估計。 tuneRF可能需要很長時間,但應該比k-fold交叉驗證更快。

總體而言,caret在線手冊是相當不錯的:http://topepo.github.io/caret/index.html

祝你好運!

2

您只能使用train來確定mtry。我會跳過train一步,並留在默認mtry

rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500, 
        keep.forest=TRUE,importance=TRUE,oob.prox =FALSE) 

我強烈懷疑這3次不同的運行是一個好主意。

如果你做了10次交叉驗證(我不確定它應該做什麼,因爲驗證根深蒂固到隨機森林中),如果時間不夠,10個部分太多了。 5部分就足夠了。

最後,randomForest的時間與nTree成正比。設置nTree = 100,你的程序運行速度提高5倍。