訓練集(train)驗證集(validation)測試集(test)與交叉驗證法(Cross Validation)

訓練集(train)驗證集(validation)測試集(test)與交叉驗證法(Cross Validation)

原文: Ph0en1x Notebook

機器學習中這三種數據集合非常容易弄混,特別是驗證集和測試集,這篇筆記寫下我對它們三個的理解以及在實踐中是如何進行劃分的。

訓練集

這個是最好理解的,用來訓練模型內參數的數據集,Classfier直接根據訓練集來調整自身獲得更好的分類效果

驗證集

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

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

測試集

測試集用來評價模型泛化能力,即之前模型使用驗證集確定了超參數,使用訓練集調整了參數,最後使用一個從沒有見過的數據集來判斷這個模型是否Work。

三者區別

形象上來說訓練集就像是學生的課本,學生 根據課本里的內容來掌握知識,驗證集就像是作業,通過作業可以知道 不同學生學習情況、進步的速度快慢,而最終的測試集就像是考試,考的題是平常都沒有見過,考察學生舉一反三的能力。

為什麼要測試集

訓練集直接參与了模型調慘的過程,顯然不能用來反映模型真實的能力,這樣一些 對課本死記硬背的學生(過擬合)將會擁有最好的成績,顯然不對。同理,由於驗證集參與了人工調參(超參數)的過程,也不能用來最終評判一個模型,就像刷題庫的學生也不能算是學習好的學生是吧。所以要通過最終的考試(測試集)來考察一個學(模)生(型)真正的能力。

但是僅憑一次考試就對模型的好壞進行評判顯然是不合理的,所以接下來就要介紹交叉驗證法

交叉驗證法

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

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

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

推薦閱讀:

基於 TensorFlow 的第一個神經網路
[貝葉斯一]之貝葉斯定理
聲紋識別演算法、資源與應用(一)
計算機視覺領域的一些牛人博客,超有實力的研究機構等的網站鏈接
機器學習-模型選擇與評價

TAG:機器學習 | 數據挖掘 | 人工智慧 |