訓練集 測試集 驗證集與交叉驗證

2021-10-04 23:16:38 字數 1095 閱讀 7594

初學者對於訓練集(train set)、測試集(test set)、驗證集(validation set)這三個概念和應用非常容易搞混,這裡我結合各種博文和書籍上的講解進行總結:

參與訓練,模型從訓練集中學習經驗,從而不斷減小訓練誤差。這個最容易理解,一般沒什麼疑惑。

不參與訓練,用於在訓練過程中檢驗模型的狀態,收斂情況。驗證集通常用於調整超引數,根據幾組模型驗證集上的表現決定哪組超引數擁有最好的效能。

同時驗證集在訓練過程中還可以用來監控模型是否發生過擬合,一般來說驗證集表現穩定後,若繼續訓練,訓練集表現還會繼續上公升,但是驗證集會出現不公升反降的情況,這樣一般就發生了過擬合。所以驗證集也用來判斷何時停止訓練。

不參與訓練,用於在訓練結束後對模型進行測試,評估其泛化能力。在之前模型使用【驗證集】確定了【超引數】,使用【訓練集】調整了【可訓練引數】,最後使用乙個從沒有見過的資料集來判斷這個模型的好壞。

為了方便理解,人們常常把這三種資料集模擬成學生的課本、作業和期末考:

一般對於常用的公開資料集,訓練集和測試集是劃分好了的,以便於比較不同模型在特定任務上的好壞。驗證集往往需要我們從訓練集中抽取,抽取比例一般為20%。驗證集不是必須的

需要注意的是:從主觀上來講,我們完全可以使用測試集來訓練、使用訓練集來進行測試。但在科研中,這樣使用會違反一種統一的標準而失去了意義。比如,我們研究出一種新的模型,怎樣證明我們的模型比已有的某個模型要更好呢?我們需要使用完全相同的訓練集和測試集分別對兩個模型進行訓練和測試,然後對比準確率或者誤差。舉個極端的例子,如果別人僅使用10個訓練樣本進行訓練,而你使用10000個訓練樣本,這樣得到的結果是沒有可比性的。

這裡摘自:

交叉驗證法的作用就是嘗試利用不同的訓練集/測試集劃分來對模型做多組不同的訓練/測試,來應對單詞測試結果過於片面以及訓練資料不足的問題。

交叉驗證的做法就是將資料集粗略地分為比較均等不相交的k份,即

然後取其中的乙份進行測試,另外的k-1份進行訓練,然後求得error的平均值作為最終的評價,具體演算法流程西瓜書中的插圖如下:

以上,如果有總結的不到位的地方歡迎指出。

訓練集 測試集 驗證集與交叉驗證

當我們訓練好乙個模型時,我們不只希望這個模型只在訓練集上表現的好,更重要的是希望這個模型後續能表現的好,這時候就需要測試集,用於評估這個模型的泛化能力。通常情況下,我們將資料以8 2的比例分割訓練集和測試集。在演算法模型中,我們還要使用正則化技術,避免過擬合。其中乙個做法就是使用100個不同超引數訓...

訓練集,驗證集,測試集,K折交叉驗證

有了模型後,訓練集就是用來訓練引數的,說準確點,一般是用來梯度下降的。而驗證集基本是在每個epoch完成後,用來測試一下當前模型的準確率。因為驗證集跟訓練集沒有交集,因此這個準確率是可靠的。那麼為啥還需要乙個測試集呢?這就需要區分一下模型的各種引數了。事實上,對於乙個模型來說,其引數可以分為普通引數...

訓練集 驗證集 測試集

訓練集loss 驗證集loss 測試集loss 乙個好的網路,二者的差距應該是很低的。但一般情況下因為網路不可避免地存在一定程度上的過擬合,所以肯定是train loss低於test lost,但如果低太多,就得考慮是過擬合的問題還是因為樣本的特徵空間不統一的問題。驗證集基本是在每個epoch完成後...