1. 程式人生 > >機器學習系列(五)——訓練集、測試集、驗證集與模型選擇

機器學習系列(五)——訓練集、測試集、驗證集與模型選擇

在機器學習過程中,為了找到泛化效能最好的那個函式,我們需要確定兩方面的引數:1、假設函式引數,也就是我們通常所說的wb,這類引數可以通過各種最優化演算法自動求得。2、模型引數,比如多項式迴歸中的多項式次數,規則化引數λ等,這些引數被稱為超引數,一般在模型訓練之前通過手工指定(當然也可以採用網格法等演算法進行尋優)。確定模型超引數的過程稱為模型選擇。

模型選擇

借用吳恩達機器學習課程中的一頁PPT,如下圖:

這裡寫圖片描述

現在我們要確定多項式迴歸的次數d,我們手工指定d取值1到10,然後在訓練集上訓練模型,分別找出了最優引數θ(1),θ(2),,θ(10

),接著在測試集上對模型效能進行評估,得到測試誤差Jtest(θ(1)),Jtest(θ(2)),,Jtest(θ(10)),選擇測試誤差最小的那個作為最優模型,假設我們選擇了d=5的那個模型θ0+θ1x++θ5x5。現在問題來了,我們要怎麼去評價這個模型的泛化效能呢?仍然採用測試誤差嗎?如果我們採用測試誤差作為度量,那我們是不是可以繼續調整d的取值呢,直至測試誤差降到最低,但是此時的模型我們能相信嗎?顯然是不能相信的,因為我們已經提前窺見到了測試資料,我們的超引數都是圍繞更好的擬合測試資料而設定的,
Jtest(θ)
因此很有可能是泛化誤差的一個最優估計。問題就出在我們將測試資料多次使用,違背了測試資料僅僅只是用來評估最優函式的泛化效能的原則。
為了解決這個問題,我們在訓練集中單獨劃分出一塊,作為模型選擇的依據,我們把這部分資料稱為驗證集,現在我們的資料集由之前的訓練集和測試集兩部分組成變成了訓練集,驗證集和測試集三部分組成。

這裡寫圖片描述
  • 訓練集:用於訓練模型,找出最佳的wb
  • 驗證集:用以確定模型超引數,選出最優模型。
  • 測試集:僅用於對訓練好的最優函式進行效能評估。

訓練集、驗證集和測試集分工明確,各施其職,切不可互相取而代之。特別是不能混淆驗證集和測試集,下面用一個表整理下兩者的區別:

區別 驗證集 測試集
作用 確定模型超引數 僅用於對訓練好的最優函式進行效能評估
是否用於訓練 否(在選出最優模型後,需要將驗證集也放入訓練集一起訓練最優函式)
使用次數 多次使用,每次更新超引數後都要用驗證集對模型效能進行驗證 僅在最後使用一次

再強調一下:對最終學習得到的函式進行效能評估的資料叫作測試集,必須保證測試集完全獨立,直到模型調整和引數訓練全部完成前應該將測試集進行封存,以任何形式使用測試集中的資訊都是一種窺探。
所以,此時機器學習的全過程如下:

  1. 確定模型的一組超引數
  2. 用訓練集訓練該模型,找到使損失函式最小的最優函式。
  3. 在驗證集上對最優函式的效能進行度量。
  4. 重複1、2、3步,直到搜尋完指定的超引數組合。
  5. 選擇在驗證集上誤差最小的模型,併合並訓練集和驗證集作為整體訓練模型,找到最優函式。
  6. 在測試集上對最優函式的泛化效能進行度量。

最後,我們都知道同一模型在不同訓練集上學得的函式往往不同,那我們怎樣保證選出的模型和函式就是最好的呢?而不是剛好符合當前資料劃分的一個特例呢?可以採用交叉驗證(Cross Validation)法,其基本思路如下:將訓練集劃分為K份,每次採用其中K-1份作為訓練集,另外一份作為驗證集,驗證集上K次誤差的平均作為該模型的誤差。

這裡寫圖片描述