在人工智能機器學(xué)習(xí)中,很容易將“驗證集”與“測試集”,“交叉驗證”混淆。
一、三者的區(qū)別
- 訓(xùn)練集(train set) —— 用于模型擬合的數(shù)據(jù)樣本。
- 驗證集(development set)—— 是模型訓(xùn)練過程中單獨留出的樣本集,它可以用于調(diào)整模型的超參數(shù)和用于對模型的能力進行初步評估。
在神經(jīng)網(wǎng)絡(luò)中, 我們用驗證數(shù)據(jù)集去尋找最優(yōu)的網(wǎng)絡(luò)深度(number of hidden layers),或者決定反向傳播算法的停止點或者在神經(jīng)網(wǎng)絡(luò)中選擇隱藏層神經(jīng)元的數(shù)量;
在普通的機器學(xué)習(xí)中常用的交叉驗證(Cross Validation) 就是把訓(xùn)練數(shù)據(jù)集本身再細分成不同的驗證數(shù)據(jù)集去訓(xùn)練模型。
- 測試集 —— 用來評估模最終模型的泛化能力。但不能作為調(diào)參、選擇特征等算法相關(guān)的選擇的依據(jù)。
類別 |
驗證集 |
測試集 |
---|
是否被訓(xùn)練到 |
否 |
否 |
作用 |
用于調(diào)超參數(shù),監(jiān)控模型是否發(fā)生過擬合(以決定是否停止訓(xùn)練) |
為了評估最終模型泛化能力 |
使用次數(shù) |
多次使用,以不斷調(diào)參 |
僅僅一次使用 |
缺陷 |
模型在一次次重新手動調(diào)參并繼續(xù)訓(xùn)練后所逼近的驗證集,可能只代表一部分非訓(xùn)練集,導(dǎo)致最終訓(xùn)練好的模型泛化性能不夠 |
測試集為了具有泛化代表性,往往數(shù)據(jù)量比較大,測試一輪要很久,所以往往只取測試集的其中一小部分作為訓(xùn)練過程中的驗證集 |
一個形象的比喻:
訓(xùn)練集-----------學(xué)生的課本;學(xué)生 根據(jù)課本里的內(nèi)容來掌握知識。
驗證集------------作業(yè),通過作業(yè)可以知道 不同學(xué)生學(xué)習(xí)情況、進步的速度快慢。
測試集-----------考試,考的題是平常都沒有見過,考察學(xué)生舉一反三的能力。
傳統(tǒng)上,一般三者切分的比例是:6:2:2,驗證集并不是必須的。
二、為什么要測試集
a)訓(xùn)練集直接參與了模型調(diào)參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學(xué)生擁有最好的成績,即防止過擬合)。
b)驗證集參與了人工調(diào)參(超參數(shù))的過程,也不能用來最終評判一個模型(刷題庫的學(xué)生不能算是學(xué)習(xí)好的學(xué)生)。
c) 所以要通過最終的考試(測試集)來考察一個學(xué)(模)生(型)真正的能力(期末考試)。
但是僅憑一次考試就對模型的好壞進行評判顯然是不合理的,所以接下來就要介紹交叉驗證法
三、交叉驗證法(模型選擇)
a) 目的
交叉驗證法的作用就是嘗試利用不同的訓(xùn)練集/驗證集劃分來對模型做多組不同的訓(xùn)練/驗證,來應(yīng)對單獨測試結(jié)果過于片面以及訓(xùn)練數(shù)據(jù)不足的問題。(就像通過多次考試,才通知哪些學(xué)生是比較比較牛B的)
交叉驗證的做法就是將數(shù)據(jù)集粗略地分為比較均等不相交的k份,即

然后取其中的一份進行測試,另外的k-1份進行訓(xùn)練,然后求得error的平均值作為最終的評價,具體算法流程如下:

舉個例子:假設(shè)建立一個BP神經(jīng)網(wǎng)絡(luò),對于隱含層的節(jié)點數(shù)目,我們并沒有很好的方法去確定。此時,一般將節(jié)點數(shù)設(shè)定為某一具體的值,通過訓(xùn)練集訓(xùn)練出相應(yīng)的參數(shù)后,再由交叉驗證集去檢測該模型的誤差;
然后再改變節(jié)點數(shù),重復(fù)上述過程,直到交叉驗證誤差最小。
b) 交叉驗證算法的具體步驟如下:
1. 隨機將訓(xùn)練數(shù)據(jù)等分成k份,S1, S2, …, Sk。
2. 對于每一個模型Mi,算法執(zhí)行k次,每次選擇一個Sj作為驗證集,而其它作為訓(xùn)練集來訓(xùn)練模型Mi,把訓(xùn)練得到的模型在Sj上進行測試,這樣一來,每次都會得到一個誤差E,最后對k次得到的誤差求平均,就可以得到模型Mi的泛化誤差。
3. 算法選擇具有最小泛化誤差的模型作為最終模型,并且在整個訓(xùn)練集上再次訓(xùn)練該模型,從而得到最終的模型。
K折交叉驗證,其主要 的目的是為了選擇不同的模型類型(比如一次線性模型、非線性模型、),而不是為了選擇具體模型的具體參數(shù)。比如在BP神經(jīng)網(wǎng)絡(luò)中,其目的主要為了選擇模型的層數(shù)、神經(jīng)元的激活函數(shù)、每層模型的神經(jīng)元個數(shù)(即所謂的超參數(shù))。每一層網(wǎng)絡(luò)神經(jīng)元連接的最終權(quán)重是在模型選擇(即K折交叉驗證)之后,由全部的訓(xùn)練數(shù)據(jù)重新訓(xùn)練。
目的在模型選擇,而非模型訓(xùn)練調(diào)整參數(shù)。
c) K值的選擇
K值的選取是一個偏差與方差的權(quán)衡:
K=1時,所有數(shù)據(jù)用于訓(xùn)練,容易過擬合;
K=N時,相當于留一法LOOCV (Leave-one-out cross-validation ).;
通常建議K=10.,2017年的一項研究給出了另一種經(jīng)驗式的選擇方法[3],作者建議 且保證 
|