1. 程式人生 > 其它 >訓練集、驗證集和測試集區別

訓練集、驗證集和測試集區別

我們在進行模型評估和選擇的時候,先將資料集隨機分為訓練集、驗證集和測試集,然後用訓練集訓練模型,用驗證集驗證模型,根據情況不斷調整模型,選擇其中最好的模型,再用訓練集和測試集訓練模型得到一個最好的模型,最後用測試集評估最終的模型。

  • 訓練集

訓練集是用於模型擬合數據樣本。

  • 驗證集

是模型訓練過程中單獨留出的樣本集,它可以用於調整模型的超引數和用於對模型的能力進行初步評估。 通常用來在模型迭代訓練時,用以驗證當前模型泛化能力(準確率,召回率等),以決定是否停止繼續訓練。在神經網路中,用驗證集去尋找最優的網路深度,或者決定反向傳播演算法的停止點,或者在神經網路中選擇隱藏層神經元的數量。驗證集是可以多次使用的,來不斷調節引數。

缺陷:模型在一次次重新手動調參並繼續訓練後所逼近的驗證集,可能只代表一部分非訓練集,導致訓練好的模型泛化能力不夠。

  • 測試集

用來評估最終模型的泛化能力,但不能作為調參、選擇特徵等演算法相關的依據,測試集只能使用一次。

為什麼要用交叉驗證?

如果驗證集較大,那麼訓練集就會變得很小,如果資料集本身就不大的話,顯然這樣訓練出來的模型就不好。如果驗證集很小,那麼此驗證誤差就不能很好地反映出泛化誤差。此外,在不同的劃分方式下,訓練出的不同模型的驗證誤差波動也很大(方差大)。到底以哪次驗證誤差為準?誰都不知道。但是如果將這些不同劃分方式下訓練出來的模型的驗證過程重複多次得到的平均誤差可能就是對泛化誤差的

一個很好的近似。

  • 交叉驗證法

就是嘗試利用不同的訓練集或者驗證集來對模型進行多組不同的訓練或者驗證,來解決對單獨測試結果過於片面以及訓練資料不足的問題。

K折交叉驗證法就是將資料(除去測試集的資料)分成相對來說資料量相同但是資料互不相交的k份,依次從K份中選出1份作為驗證集,其餘K-1份作為訓練集,這樣就進行了K次單獨的模型訓練和驗證,最後將K次驗證結果取平均值,作為模型的驗證誤差。