機器學習新手在數據集上常犯的6個錯誤及避免方法
來自專欄景略集智26 人贊了文章
本文將教你如何避免機器學習和數據科學中新手常犯的 6 個錯誤,創建殺手級的數據集。
不知道你有沒有聽說過下面這句話,如果沒聽過,那現在我們囑咐你牢記這句機器學習界的箴言:你的數據質量怎樣,模型性能就怎樣。
很多人會犯一個錯誤:從不改善他們那「不忍直視」的數據集,反而只顧悶頭優化模型。這就好比你整天只用很便宜的汽油,搞得車子經常出毛病,結果你的解決方法卻是砸鍋賣鐵買了輛超跑。最合理的解決方案應當是先換成質量好的汽油,而不是想著先把汽車升級。下面就以圖像分類任務為例,教你怎樣通過提高數據集質量很容易的優化模型結果,當然這些方法適用於所有類型的數據集。
6 個最常見的錯誤及避免方法
一:沒有為模型準備足夠的數據
如果你的數據集很小,模型就無法獲得足夠的用於泛化的辨別特徵。這樣模型就會過擬合數據,造成訓練錯誤很低但測試錯誤很高的問題。
解決方法1:
獲取更多數據。可以從當前數據集的來源處收集更多數據,或另找具有相似特徵的數據集。
提醒:通常這並不是件容易的事情,需要投入很多時間和資源。而且,你或許也想知道需要再獲取多少數據。可以將你的結果和不同數據集大小做個比較,然後試著推斷。
比如上面這個例子中,似乎我們需要 50 萬個樣本才能達到目標誤差值。這意味著我們需要收集比當前數據多出 50 倍的數據。處理數據或模型的其它方面獲取更為有效。
解決方法2:
數據增強。比如通過為同一圖像創建多種副本,產生多個變體。這種方法能讓我們以很低的成本獲得大量的額外圖像,且效果很好。常見的圖像增強方法有旋轉、平移、裁切、高斯模糊、縮放、變換顏色等。不過你需要確保數據仍然表示相同的類。
詳細的圖像增強方法參見我們這篇回答:
使用深度學習(CNN)演算法進行圖像識別工作時,有哪些data augmentation 的奇技淫巧?圖:圖像增強示例,中間為原圖,其餘為同一張圖像的增強結果
提醒:嘗試完所有的增強方法可能仍然無法解決你的問題。例如,假如你想分類檸檬和酸橙,就別嘗試顏色增強了,因為這會讓模型認為顏色對於分類來說非常重要。這反而會讓模型更難發現可以辨別的特徵。
二:數據類的質量很低
這個錯誤很容易犯,如果可能,一定要花時間遍歷你的數據集,檢查每個數據樣本的標籤。這可能會花一些時間,但如果數據集中存在反例,會對模型的學習過程產生不利影響。
同樣,應當為你的數據類選擇正確的粒度級別。根據實際問題,你可能需要更多或更少的類。例如,你可以用一個全局分類器為一張貓咪的圖像分類,確定它是不是動物,然後再將圖像通過一個動物分類器來確定它是不是貓咪。較大的模型可以同時處理這兩種任務,但會比較困難。
三:數據的質量很低
如開頭所說,低質量的數據只會帶來低質量的模型。
你的數據集中可能存在離你的使用目標相去甚遠的數據樣本,而這些數據相比起到的作用而言,往往會讓模型更容易產生困惑。
解決方法:去除質量最差的圖像。這個過程會比較漫長,但是很值得,能夠優化你的模型結果。
圖:這些圖像雖然都是貓咪的照片,但模型根本沒法使用它們
另一個常見問題是,你的數據集中存在一些和實際應用並不匹配的數據。例如,有些圖像來自完全不同的數據源。
解決方法:想想模型的長遠應用,從這個角度考慮去獲取更貼合實際應用的數據。如果有時間,試著找找其它同類模型或工具使用的數據集。
四:數據類不均衡
如果每個類的樣本數量相對於所有的類來說不一樣,那麼模型可能會傾向於「青睞」佔主導地位的類,因為這樣它會產生更低的錯誤。我們常說的模型有偏差,就是因為數據的類分布不均衡。這是個比較嚴重的問題,需要你檢查模型的精確度、召回率或混合矩陣。
解決方法1:
為未被充分表示的類獲取更多數據樣本。不過,通常會花費一定的時間和資源。
解決方法2:對數據過採樣或降採樣。這意味著你需要從被過度表示的類中移除一些數據樣本,在未被充分表示的類中複製樣本。後者可以採取我們上面講過的數據增強方法。
如上圖,我們需要增強未被充分表示的類(貓咪),從被過度表示的類(酸橙)中去除部分樣本。這樣才能讓類分布更平滑更均衡。
五:數據不均衡
如果你的數據沒有特定的格式,或數據值不處於一定範圍內,那麼你的模型可能就無法很好的處理數據。如果圖像長寬比和像素值都分布均衡的話,模型會有更好的性能。
解決方法1:
裁切或拉伸數據,這樣就能有一致的長寬,這樣數據樣本就能有相同的長寬或格式。
解決方法2:
將數據標準化,這樣每個樣本的數據值都在相同範圍內。
六:沒有驗證或測試
等清洗、增強和正確標記數據集之後,你還需要對數據集進行分割。很多人是按照下面方法分割的:80%的數據用於訓練,20%的數據用於測試,這樣能讓你比較容易的發現過擬合問題。然而,如果你用同一測試集測試多個模型,有時會出現意外情況。選擇測試準確率最高的模型,其實意味著在過擬合測試集。出現這種問題是因為你在選擇一個模型時並非出於它的內在價值,而是它在具體數據集上的表現。
解決方法:將數據集分割為3部分:訓練集(60%)、驗證集(20%)和測試集(20%)。這樣能防止測試集被模型的選擇過擬合。應當選擇如下過程:
用訓練集訓練模型
在驗證集上測試模型,確保沒有出現過擬合
選擇表現最好的模型,用測試集對其測試,得到模型的真正準確率
注意:選好部署的模型後,不要忘了用整個數據集去訓練它!數據越多越好!
結語
本文我們談論了機器學習入門者訓練模型時,容易在數據集上出現的一些錯誤,對於如何避免這些坑,也提供了相應的方法和思路。總之,記住:「機器學習任務中的贏家可能沒有最好的模型,但一定有最好的數據集」。
參考資料:
https://hackernoon.com/stop-feeding-garbage-to-your-model-the-6-biggest-mistakes-with-datasets-and-how-to-avoid-them-3cb7532ad3b7
推薦閱讀:
※模型評估和選擇
※圖解機器學習:如何理解logistic regression與linear regression的區別
※吳恩達神經網路和深度學習心得總結(三):深層神經網路
※GBDT原理解析與手動實現
※機器學習篇-名詞:候選集,覆蓋率
TAG:機器學習 | 數據挖掘 | 深度學習DeepLearning |