怎麼為小數據集劃分訓練集和測試集

前言

要想訓練一個好的深度學習模型需要大量的數據,只有當你收集到足夠多的數據構成訓練集時,算法的效果最好。

有時候我們很難收集到足夠多的數據,為了解決數據量的問題,其實我們可以爬蟲或購買數據等手段來獲取大量的數據。這樣會導致訓練集和測試集存在差異,所以在劃分數據集的時候需要掌握一些技巧。本篇文章的主要內容來自deeplearning.ai。

示例說明

怎麼為小數據集劃分訓練集和測試集

  • 問題描述

你想開發一個APP,當用戶上傳圖片的時候,系統能夠自動判斷圖片是不是貓的照片。而你實際能收集到用戶使用APP上傳的照片只有10000張,為了解決數據量的問題,你通過爬蟲從網上下載了200000張照片。

通過觀察發現,通過爬蟲下載的照片和用戶上傳的照片之間還是存在很大差異的。通過爬蟲獲取的照片相對會比較清晰,而用戶上的照片會比較模糊。

那麼我究竟應該如何利用這些數據來組合成數據集訓練模型呢?

  • 常規的劃分數據集方式
怎麼為小數據集劃分訓練集和測試集

我們將200000張爬蟲所獲取到的數據與10000張用戶使用APP所獲取到的數據進行混合打亂,然後隨機分配給訓練集205000張、開發集2500張、測試集2500張。

這種分配方式是我們常用的一種劃分數據集的方式。

這樣劃分數據集的好處在於,可以保證訓練集、開發集和測試集中的數據處於同一分佈下

同時也有壞處,仔細觀察我們不難發現,210k張圖片中,其中有大量的圖片都來自於爬蟲所獲取到的數據,只有很小一部分是來自用戶上傳的圖片。通過計算可以發現,2500張圖片中,大約有2381張圖片來自於爬蟲所獲取到的照片,只有119張來自於用戶上傳的圖片,這樣就會導致模型過多的關注爬蟲所獲取到的數據。

而我們想訓練的是一個能夠分辨APP上傳照片,而不是爬蟲所獲取的照片。所以,我們需要採用另外一種劃分方式。

  • 數據不同分佈的劃分

之前在介紹訓練集、開發集以及測試集劃分的時候需要訓練集與開發集在同一分佈上,不然可能會帶來大的方差。

現在為了使得我們的系統能夠分辨APP上傳的照片,而不是爬蟲所獲取的照片,我們需要改變之前數據集的劃分方式。

在劃分數據的時候,我們不將爬蟲所獲取的照片和APP上傳的照片進行混合,而是將APP上傳照片的一部分(5000張照片)劃分到訓練集中將爬蟲所獲取的照片全部(200000張)劃分到訓練集中,這樣訓練集中就有205000張照片,再將剩下的5000張分別劃分到開發集和訓練集中,這樣就能讓我們的目標瞄準APP上傳的照片,而不是爬蟲所獲取的照片。

這樣劃分數據所帶來的缺點就是,訓練集與開發集和測試集不在同一分佈,但事實證明這樣劃分數據能夠為你的系統帶來長期良好的性能,下一篇我會介紹如何處理訓練集和開發集數據分佈不一致的情況。


分享到:


相關文章: