[英]Cross Validation on Train, Validation & Test Set
在擁有三套的場景下
train
集(用於model訓練)validation
集(用於 model 訓練)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 已經構建並使用組合train
和validation
集的每個數據點進行一次驗證。
接下來,我將在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.