2016-08-02 24 views
2

我想了解插入符控制設置如何工作。我正在通過Caret控制功能使用交叉驗證進行一些實驗,例如,插入符號交叉驗證

fitControl <- trainControl(## 10-fold CV 
          method = "repeatedcv", 
          number = 10, 
          ## repeated ten times 
          repeats = 10) 

control <- rfeControl(functions=rfFuncs, method="repeatedcv", number=5, repeats = 5) 

我的問題是,如果我設置一些種子數我跑之前的實驗,即

set.seed(5432) 
control <- trainControl(...) 
results <- train(..., control) 
... 

是否保證每個摺疊包含完全相同的樣品,每次我做了一個實驗?例如,假設我有id = {1:100}的樣本和Caret 10倍交叉驗證,我的摺疊是:fold1 = {1:10},fold2 = {11:20},...,fold10 = {91:100}。我的問題是,如果我使用相同的種子編號重新運行實驗,我的摺疊仍然與上一次運行完全相同?

我知道設置種子編號有助於重複性,但我只需要一個確認答案,那就是發生了什麼。

非常感謝,

回答

3

有兩種設置種子重現性的方法。

  1. 在列車功能前調用set.seed。
  2. 設置內部trainControl(或rfeControl)種子

欲瞭解更多信息的選項2支票的幫助,也該SO question

更詳細的信息可在訓練頁面上從caret website,部分重複性說明

+0

我檢查了您提到的文檔,但沒有明確說明採樣摺疊將完全相同。我嘗試使用相同的種子編號運行代碼兩次(使用兩種選項進行測試),並且在檢查之後,兩次運行之間的rowIndex是不同的。 – user1480478

+2

如果您在運行'train'之前將seed設置爲相同的數字,您將得到相同的重新採樣。 – topepo

+0

@topepo你絕對正確!我學到的是,你需要每次運行set.seed()來重新運行實驗。我在代碼的開頭調用了set.seed,並且我認爲它一直被設置爲這個數字,直到我改變它爲止。那裏完全錯了。再次感謝! :d – user1480478

0

而不是做你可能只是重複10個CV 100倍,而不是10,以穩定的答案。我認爲這是一個更誠實的做法。