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


一、前言

訓練集驗證集測試集這三個名詞在機器學習領域極其常見,但很多人並不是特別清楚,尤其是后兩個經常被人混用。

在有監督(supervise)的機器學習中,數據集常被分成2~3個,即:訓練集(train set),驗證集(validation set),測試集(test set)。

 

二、訓練集、驗證集、測試集

如果給定的樣本數據充足,我們通常使用均勻隨機抽樣的方式將數據集划分成3個部分——訓練集、驗證集和測試集,這三個集合不能有交集,常見的比例是8:1:1。需要注意的是,通常都會給定訓練集和測試集,而不會給驗證集。這時候驗證集該從哪里得到呢?一般的做法是,從訓練集中均勻隨機抽樣一部分樣本作為驗證集。

訓練集

訓練集用來訓練模型,即確定模型的權重和偏置這些參數,通常我們稱這些參數為學習參數。

驗證集

而驗證集用於模型的選擇,更具體地來說,驗證集並不參與學習參數的確定,也就是驗證集並沒有參與梯度下降的過程。驗證集只是為了選擇超參數,比如網絡層數、網絡節點數、迭代次數、學習率這些都叫超參數。比如在k-NN算法中,k值就是一個超參數。所以可以使用驗證集來求出誤差率最小的k。

測試集

測試集只使用一次,即在訓練完成后評價最終的模型時使用。它既不參與學習參數過程,也不參數超參數選擇過程,而僅僅使用於模型的評價。 
值得注意的是,千萬不能在訓練過程中使用測試集,而后再用相同的測試集去測試模型。這樣做其實是一個cheat,使得模型測試時准確率很高。

三、為何需要划分

簡而言之,為了防止過度擬合。如果我們把所有數據都用來訓練模型的話,建立的模型自然是最契合這些數據的,測試表現也好。但換了其它數據集測試這個模型效果可能就沒那么好了。就好像你給班上同學做校服,大家穿着都合適你就覺得按這樣做就對了,那給別的班同學穿呢?不合適的概率會高吧。總而言之訓練集和測試集相同的話,模型評估結果可能比實際要好。 

四、交叉驗證

之所以出現交叉驗證,主要是因為訓練集較小。無法直接像前面那樣只分出訓練集,驗證集,測試就可以了(簡單交叉驗證)。
需要說明的是,在實際情況下,人們不是很喜歡用交叉驗證,主要是因為它會耗費較多的計算資源。一般直接把訓練集按照50%-90%的比例分成訓練集和驗證集。但這也是根據具體情況來定的:如果超參數數量多,你可能就想用更大的驗證集,而驗證集的數量不夠,那么最好還是用交叉驗證吧。至於分成幾份比較好,一般都是分成3、5和10份。

交叉驗證的實現

首先我們給出下面的圖 

 

 圖上面的部分表示我們擁有的數據,而后我們對數據進行了再次分割,主要是對訓練集,假設將訓練集分成5份(該數目被稱為折數,5-fold交叉驗證),每次都用其中4份來訓練模型,粉紅色的那份用來驗證4份訓練出來的模型的准確率,記下准確率。然后在這5份中取另外4份做訓練集,1份做驗證集,再次得到一個模型的准確率。直到所有5份都做過1次驗證集,也即驗證集名額循環了一圈,交叉驗證的過程就結束。算得這5次准確率的均值。留下准確率最高的模型,即該模型的超參數是什么樣的最終模型的超參數就是這個樣的。

好像Keras就是用的交叉驗證或者固定超參數(知乎鏈接

 

 

參考鏈接:

1、https://blog.csdn.net/cczx139/article/details/80266101

2、https://blog.csdn.net/jmh1996/article/details/79838917?tdsourcetag=s_pctim_aiomsg

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM