訓練集、驗證集劃分技巧

前言

在使用數據訓練模型之前,我們需要先將整個數據集分為

訓練集、驗證集、測試集。訓練集是用來訓練模型的,通過嘗試不同的方法和思路使用訓練集來訓練不同的模型,再通過驗證集使用交叉驗證來挑選最優的模型,通過不斷的迭代來改善模型在驗證集上的性能,最後再通過測試集來評估模型的性能。如果數據集劃分的好,可以提高模型的應用速度。如果劃分的不好則會大大影響模型的應用的部署,甚至可能會使得我們之後所做的工作功虧一簣。本文討論如何通過數據集分佈和數據集大小兩個方面來劃分數據集,文章中主要的內容來自於deeplearnl ai教程。

訓練集、驗證集劃分技巧

數據集分佈

訓練集、驗證集劃分技巧

我們現在有8個不同區域的數據,需要通過這些數據來訓練一個分類模型,那麼我們應該如何來利用這些數據集來劃分訓練集、驗證集和測試集?

我們可以從8個不同區域中隨機選4個區域來組成訓練集,然後再選擇剩下的4個區域來組成測試集。其實這種劃分的方式存在一個問題,那就是訓練集和測試集的數據分佈可能不相同,那麼必定會導致一個問題,模型在訓練集上的表現會非常的好,而在測試集上表現可能不會那麼理想。通過訓練數據來訓練模型,就是希望模型能夠從訓練集中學習到數據的分佈,如果訓練集和測試集數據不在同一個分佈中,那麼模型在測試集上的表現肯定是不會理想的。所以最佳的劃分方式應該是:先將這8個不同區域的數據都打亂混合在一起,然後再將數據集分為訓練集、驗證集和測試集,這樣就能保證它們都處於同一分佈中。在某些特殊情況下可能也不需要這個原則,具體情況後面的文章會詳細介紹。

為什麼需要保證訓練集和測試集在同一分佈中?

訓練集、驗證集劃分技巧

我們將訓練出來的模型理解成為一個尋找靶心的過程,通過訓練集不同的訓練,然後調整超參和使用不同的算法來提高模型性能的過程理解為想靶心逼近的過程。如果想要在測試集也要像有訓練集上的表現,那麼測試集的靶心也需要和訓練集的靶心位於同一位置。如果測試集的靶心相對訓練集的靶心有所移動,那麼模型在訓練集上的表現是10環的話,在測試集上的表現可能就只有8環、9環甚至更低。這個例子中的靶心分佈就是數據集的數據分佈。 

數據集的大小

除了數據的分佈對於數據集的劃分有影響之外,數據集的大小也對於數據集劃分也有影響。不同規模的數據集可能訓練集、驗證集、測試集的劃分會有所不同。

小規模數據集數據的劃分

在傳統的機器學習中,我們聽過70%/30%的劃分原則,就是指將整個數據集中的70%用於模型的訓練也就是訓練集,整個數據集中的30%用於模型的測試也就是測試集,其實這裡的測試集被稱為驗證集或者開發集會更適合。如果想要加入驗證集,可能劃分標準就改成了60%/20%/20%,也就是指將整個數據集的60%劃分為訓練集,20%劃分為驗證集,20%劃分為驗證集。以上的兩種劃分標準只適用於小規模的數據集,如果對於上百萬、甚至上千萬規模的數據集可能需要修改數據集的劃分原則。

大規模數據集數據的劃分

我們現在所處的是大數據時代,所以很多數據集的數據規模都是上百萬甚至上億,而且如果想要獲取一個好的模型是離不開大數據的。面對這種大規模的數據集時,傳統的數據劃分原則已經不適用了,驗證集和測試集的劃分可以低於30%和20%。對於百萬級別的數據集,我們可以採用98%/1%/1%的規則來劃分數據集。 

建議

在有些數據集的劃分中,沒有真正的測試集,也就是隻有訓練集和測試集。利用訓練集來訓練模型,然後通過測試模型在測試集上的表現來調整超參和採用不同的策略來提高模型在測試集上的表現,而沒有真正的測試集來評估模型的性能,缺少真正的測試集可能會導致模型過擬合,使用這種方式在測試集上所獲取的模型評估是不可靠的。建議不要省略驗證集,利用驗證集來調整模型,利用測試集來評估模型的指標。如果模型上線的指標要求比較高時,可以適當的加大測試集的數量以此來獲取更高精度的評估指標,建議不要超過30%。


分享到:


相關文章: