訓練集 驗證集 測試集的作用

2021-09-09 05:57:46 字數 2387 閱讀 7312

在機器學習或者深度學習中,我們需要了解我們的模型包括什麼:1)模型設計:①模型架構(包括模型有多少層,每層有多少個神經元);②可訓練權重引數(模型內建引數);2)模型訓練的引數(模型外接引數,如學習率、優化策略等等)。

訓練集(train set)—— 用於模型擬合的資料樣本。在訓練過程中對訓練誤差進行梯度下降,進行學習,可訓練的權重引數。

驗證集(validation set)—— 是模型訓練過程中單獨留出的樣本集,它可以用於調整模型的超引數和用於對模型的能力進行初步評估。

驗證集可以用在訓練的過程中,一般在訓練時,幾個epoch結束後跑一次驗證集看看效果。(驗證得太頻繁會影響訓練速度)這樣做的第乙個好處是,可以及時發現模型或者引數的問題,比如模型在驗證集上發散啦、出現很奇怪的結果啦(如無窮大)、map不增長或者增長很慢啦等等情況,這時可以及時終止訓練,重新調參或者調整模型,而不需要等到訓練結束。另外乙個好處是驗證模型的泛化能力,如果在驗證集上的效果比訓練集上差很多,就該考慮模型是否過擬合了。同時,還可以通過驗證集對比不同的模型。在一般的神經網路中, 我們用驗證資料集去尋找最優的網路深度(number of hidden layers),或者決定反向傳播演算法的停止點或者在神經網路中選擇隱藏層神經元的數量;

由於驗證集是用來」訓練」超引數的,儘管驗證集的誤差通常會比訓練集誤差小,一般來說驗證集比較小會低估泛化誤差。所有超引數優化完成之後,泛化誤差可能會通過測試集來估計。   

在普通的機器學習中常用的交叉驗證(cross validation) 就是把訓練資料集本身再細分成不同的驗證資料集去訓練模型。

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

類別

驗證集

測試集

是否被訓練到

否 否 

作用純粹用於調超引數

純粹為了加試以驗證泛化效能

使用次數

多次使用,以不斷調參

僅僅一次使用

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

測試集為了具有泛化代表性,往往資料量比較大,測試一輪要很久,所以往往只取測試集的其中一小部分作為訓練過程中的驗證集

互相轉化 

驗證集具有足夠泛化性(一般來說,如果驗證集足夠大到包括大部分非訓練集時,也等於具有足夠泛化性了) 

驗證集具有足夠泛化性時,測試集就沒有存在的必要了

ps:1)驗證集是一定需要的; 

1)針對超參的選擇我們是根據驗證集上的效果來進行調整的,因此驗證集可以看做參與到「人工調參」的訓練過程; 

2)注意訓練集、驗證集和測試集應該服從同一資料分布,這樣我們才能進行玄學調參; 

3)測試集的存在只是為了驗證我們在訓練集和驗證集(通常驗證集只是非訓練集乙個小子集)上進行模型的超參和引數訓練後,驗證我們得到的模型是否具有泛化效能,再做一次確認。如果驗證集具有足夠泛化代表性,測試集是可以沒有的,但驗證集是必須有的。

驗證集的作用:

在每一步訓練之後,計算validation_data的分類精度。一旦validation_data的分類精度達到飽和,就停止訓練。這種策略叫做提前終止(early stopping)。為什麼要用validation_data而不是test_data來防止過擬合呢?通過validation_data來選擇不同的超引數(例如,訓練步數、學習率、最佳網路結構、等等)是乙個普遍的策略。我們通過這樣的評估來計算和設定合適的超引數值。

當然,上面的解釋不能回答為什麼我用validation_data而不是test_data來防止過擬合。如果基於test_data的評估結果設定超引數,有可能我們的網路最後是對test_data過擬合。也就是說,我們或許只是找到了適合test_data具體特徵的超引數,網路的效能不能推廣到其它的資料集。通過validation_data來設定超引數能夠避免這種情況的發生。然後,一旦我們得到了想要的超引數,就用test_data 做最後的精度評估。這讓我們相信test_data的精度能夠真正提現網路的泛化能力。換句話說,你能把validation_data視為幫助我們學習合適超引數的一種訓練資料。由於validation_datatest_data` 是完全分離開的,所以這種找到優秀超引數的方法被稱為分離法(hold out method)

訓練集 驗證集 測試集

訓練集loss 驗證集loss 測試集loss 乙個好的網路,二者的差距應該是很低的。但一般情況下因為網路不可避免地存在一定程度上的過擬合,所以肯定是train loss低於test lost,但如果低太多,就得考慮是過擬合的問題還是因為樣本的特徵空間不統一的問題。驗證集基本是在每個epoch完成後...

訓練集,驗證集,測試集

普通引數就是可以被梯度下降所更新的,也就是訓練集所更新的引數。超引數是指訓練開始之前設定的引數,不在梯度下降的更新範圍內,比如網路層數 網路節點數 迭代次數 學習率等等 1.訓練集 確定模型後,用於訓練普通引數 2.驗證集 交叉驗證集cv 驗證集在每個epoch訓練完成後,用來測試一下當前模型的準確...

訓練集 測試集 驗證集

訓練集 用來訓練和擬合模型。驗證集 當通過訓練集訓練出多個模型後,使用驗證集資料糾偏或比較 測試集 模型泛化能力的考量。泛化 對未知資料的 能力 from sklearn.model selection import train test split import numpy as np from ...