驗證集與測試集

2021-08-21 05:18:39 字數 1108 閱讀 7518

在有監督的機器學習中,經常會說到訓練集(train)、驗證集(validation)和測試集(test),這三個集合的區分可能會讓人糊塗,特別是,有些讀者搞不清楚驗證集和測試集有什麼區別。

如果我們自己已經有了乙個大的標註資料集,想要完成乙個有監督模型的測試,那麼通常使用均勻隨機抽樣的方式,將資料集劃分為訓練集、驗證集、測試集,這三個集合不能有交集,常見的比例是8:1:1,當然比例是人為的。從這個角度來看,三個集合都是同分布的。

如果是做比賽,官方只提供了乙個標註的資料集(作為訓練集)以及乙個沒有標註的測試集,那麼我們做模型的時候,通常會人工從訓練集中劃分乙個驗證集出來。這時候我們通常不再劃分乙個測試集,可能的原因有兩個:1、比賽方基本都很摳,訓練集的樣本本來就少;2、我們也沒法保證要提交的測試集是否跟訓練集完全同分布,因此再劃分乙個跟訓練集同分布的測試集就沒多大意義了。

有了模型後,訓練集就是用來訓練引數的,說準確點,一般是用來梯度下降的。而驗證集基本是在每個epoch完成後,用來測試一下當前模型的準確率。因為驗證集跟訓練集沒有交集,因此這個準確率是可靠的。那麼為啥還需要乙個測試集呢?

這就需要區分一下模型的各種引數了。事實上,對於乙個模型來說,其引數可以分為普通引數

和超引數

。在不引入強化學習的前提下,那麼普通引數就是可以被梯度下降所更新的,也就是訓練集所更新的引數。另外,還有超引數的概念,比如網路層數、網路節點數、迭代次數、學習率等等,這些引數不在梯度下降的更新範圍內。儘管現在已經有一些演算法可以用來搜尋模型的超引數,但多數情況下我們還是自己人工根據驗證集來調。

那也就是說,從狹義來講,驗證集沒有參與梯度下降的過程,也就是說是沒有經過訓練的;但從廣義上來看,驗證集卻參與了乙個「人工調參」的過程,我們根據驗證集的結果調節了迭代數、調節了學習率等等,使得結果在驗證集上最優。因此,我們也可以認為,驗證集也參與了訓練。

那麼就很明顯了,我們還需要乙個完全沒有經過訓練的集合,那就是測試集,我們既不用測試集梯度下降,也不用它來控制超引數,只是在模型最終訓練完成後,用來測試一下最後準確率。

聰明的讀者就會模擬到,其實這是乙個無休止的過程。如果測試集準確率很差,那麼我們還是會去調整模型的各種引數,這時候又可以認為測試集也參與訓練了。好吧,我們可能還需要乙個「測試測試集」,也許還需要「測試測試測試集」...

算了吧,還是在測試集就停止吧。

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

當我們訓練好乙個模型時,我們不只希望這個模型只在訓練集上表現的好,更重要的是希望這個模型後續能表現的好,這時候就需要測試集,用於評估這個模型的泛化能力。通常情況下,我們將資料以8 2的比例分割訓練集和測試集。在演算法模型中,我們還要使用正則化技術,避免過擬合。其中乙個做法就是使用100個不同超引數訓...

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

初學者對於訓練集 train set 測試集 test set 驗證集 validation set 這三個概念和應用非常容易搞混,這裡我結合各種博文和書籍上的講解進行總結 參與訓練,模型從訓練集中學習經驗,從而不斷減小訓練誤差。這個最容易理解,一般沒什麼疑惑。不參與訓練,用於在訓練過程中檢驗模型的...

訓練集 驗證集 測試集

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