標籤:

開發集和測試集

開發集和測試集

來自專欄 ML Yearning

讓我們回到前面的貓圖片的例子上:你運行了一個移動app,用戶上傳了許多不同的內容到你的app上。你想自動化的找出貓的圖片。

你的團隊通過從不同的網站下載貓圖片(正樣本)和非貓圖片(負樣本)獲得了一個很大的數據集。然後將數據集按照70%/30%的比例分成了訓練集和測試集。通過這些數據,你們構建了一個能夠在測試集和訓練集上表現很好的貓咪探測器。

但是當你們將這個分類器部署到移動app上時,你發現它的表現很差。

究竟發生了什麼導致這個問題?

你發現用戶上傳的數據和你從網站上下載組成你的訓練集的數據有很大的不同:用戶上傳的圖片大多是通過手機拍攝,容易導致低解析度,模糊而且光線不理想。但是你的訓練和測試集由網路圖片組成,你的演算法不能很好的推廣到由移動設備產生的數據上。

在現代大數據之前,將數據通過七三比例隨機的劃分為訓練集和測試集是很常見的做法。但是面對現在越來越多的訓練數據分布和實際關心的數據分布不一致的應用情況上,這實在是一個很壞的主意。

常見定義:

  • 訓練集(Training set)——用來訓練演算法的數據集
  • 開發集(development set)——用來對學習演算法調整參數,選擇特徵或者做其他的決策的數據集。也叫做交叉驗證集(hold-out cross validation set)
  • 測試集——僅僅用來評估演算法表現的數據集

一旦你們確定了開發集和測試集,你和你的團隊就可以嘗試各種不同的學習演算法的參數之類的想法來觀察什麼情況下演算法效果比較好。開發集和測試集提供了一個可以很快的觀察演算法效果的環境。

換句話說,**開發集和測試集的作用就是引導你們去發現建立機器學習系統最重要的方向。**

所以,注意下面這點:選擇能夠反映在實際應用中數據分布的數據來作為開發集和測試集。

也就是說,當你的實際數據和訓練集數據可能不一樣的情況下,不應該使用30%的原始數據作為測試集。

如果你並沒有上線你的移動app,可能現在並沒有任何用戶,因此你得不到任何能夠準確地反映目標情況的數據。但是你還是像去嘗試近似它,那麼你可以手動去獲取一些手機拍攝的圖片用來測試,然後當你的app上線之後,使用用戶的實際數據更新你的開發集和測試集。

推薦閱讀:

一鍵生成網頁的神器
阿里雲DTS大幅降價,即可獲得實現秒級延遲的數據傳輸服務
哈佛大學陳宇峰博士,分享仿生微型機器人在多種環境中的多態運動
無愧神劇——《黑鏡子第4季》
癌症研究,給製造喪屍帶來了啟示? | 科學人 | 果殼網 科技有意思

TAG:科技 |