簡體   English   中英

訓練、驗證和測試集的交叉驗證

[英]Cross Validation on Train, Validation & Test Set

在擁有三套的場景下

  • 例如80%的train集(用於model訓練)
  • 例如 10% 的validation集(用於 model 訓練)
  • 例如 10% 的test集(用於最終 model 測試)

假設我對[1,2,3,4,5,6,7,8,9,10]的示例數據集執行 k 折交叉驗證(CV)。 也說一下

  • 10是本例中的test
  • 剩余的[1,2,3,4,5,6,7,8,9]將用於訓練和驗證

留一法式簡歷看起來像這樣

# Fold 1
[2, 3, 4, 5, 6, 7, 8, 9] # train
[1]                      # validation
# Fold 2
[1, 3, 4, 5, 6, 7, 8, 9] # train
[2]                      # validation
# Fold 3
[1, 2, 4, 5, 6, 7, 8, 9] # train
[3]                      # validation
# Fold 4
[1, 2, 3, 5, 6, 7, 8, 9] # train
[4]                      # validation
# Fold 5
[1, 2, 3, 4, 6, 7, 8, 9] # train
[5]                      # validation
# Fold 6
[1, 2, 3, 4, 5, 7, 8, 9] # train
[6]                      # validation
# Fold 7
[1, 2, 3, 4, 5, 6, 8, 9] # train
[7]                      # validation
# Fold 8
[1, 2, 3, 4, 5, 6, 7, 9] # train
[8]                      # validation
# Fold 9
[1, 2, 3, 4, 5, 6, 7, 8] # train
[9]                      # validation

太棒了,現在 model 已經構建並使用組合trainvalidation集的每個數據點進行一次驗證。

接下來,我將在test集 ( 10 ) 上測試我的 model 並獲得一些性能。

我現在想知道的是,為什么我們不也使用test集執行 CV並將結果平均以查看不同測試集的影響? 這意味着為什么我們不執行上述過程 10 次,以便我們在test集中也有每個數據點?

這顯然在計算上非常昂貴,但我在考慮這個原因似乎很難選擇合適的test集。 例如,當我選擇1作為測試集並在其余點上進行訓練和驗證時,我上面的 model 可能會有很大的不同。

在我的數據中有組的情況下,我想知道這一點。 例如

  • [1,2,3,4]來自A組,
  • [5,6,7,8]來自B組並且
  • [9,10]來自組C

In this case when choosing 10 as the test set, it could perform much differently than choosing 1 right, or am I missing something here?

您所有的訓練驗證測試拆分都應該隨機抽樣並且足夠大 因此,如果您的數據來自不同的組,您應該在訓練、驗證和測試池中具有大致相同的組分布。 如果您的測試性能因采樣種子而異,那么您肯定做錯了什么。

至於為什么不使用測試集進行交叉驗證,這會導致過擬合。 通常,您會使用不同的超參數多次運行交叉驗證,並將 cv 分數用於 select 個最佳模型。 如果您沒有單獨的測試集來評估 model 選擇結束時的 model,您永遠不會知道在 model 選擇迭代期間您是否過度擬合訓練池。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM