數據處理急救包 | 遇到有這六大缺陷的數據集該怎麼辦?
原作:Julien Despois
安妮 編譯自 Hackernoon量子位 出品 | 公眾號 QbitAI
不要再向你的機器學習模型里喂垃圾了!
在這篇文章中,身兼AI工程師/音樂家/圍棋愛好者多職的「斜杠青年」Julien Despois給出了數據科學中需要避免的6大錯誤。
量子位將全文編譯整理如下:
簡介
身為一名數據科學工作者,你應該聽說過一句話:
你的結果會和你的數據一樣好。
很多人試圖通過提升模型來彌補不太理想的數據集。這等同於你的舊車因為用了廉價汽油性能不好,但你買了一輛豪華跑車。很明顯葯不對症嘛!
在這篇文章中,我會講一講如何通過優化數據集提升模型結果,並將以圖像分類任務為例進行說明,但這些tips可被應用在各種各樣的數據集中。
今天的正餐,正式開始——
問題一:數據集太小
如果數據集太小,模型將沒有足夠樣例概括可區分特徵。這將使數據過擬合,從而出現訓練誤差(training error)低但測試誤差(test error)高的情況。
解決方案1:
去收集更多數據吧~嘗試找到更多和原始數據集來源相同的數據,如果圖像很相似或者你追求的就是泛化,也可用其他來源的數據。
小貼士:這並非易事,需要你投入時間和經費。在開始之前,你要先分析確定需要多少額外數據。將不同大小的數據集得出的結果做比較,然後思考一下這個問題。
解決方案2:
通過為同一張圖像創建多個細微變化的副本來擴充數據,可以讓你以非常低的成本創造很多額外的圖像。你可以試著裁剪、旋轉或縮放圖片,也可以添加噪音、模糊、改變圖片顏色或遮擋部分內容。
不管怎麼操作吧,只需保證這些數據仍代表相同類就好了。
雖然這種操作很厲害,但仍不如收集更多原始數據效果好。
小貼士:這種「擴充術」不適合所有問題,比如如果你想分類黃檸檬和綠檸檬,就不要調顏色了嘛~
數據集太小的問題解決後,第二個問題來了——
問題二:分類質量差
這是個簡單但耗時的問題,需要你瀏覽一遍數據集確認每個樣例的標籤打得對不對。
除此以外,一定為你的分類選擇合適的粒度(granularity)。基於要解決的問題,來增加或減少你的分類。
比如,要識別貓,你可以用全局分類器先確定它是動物,之後再用動物分類器確定它是一隻小貓。一個大型的模型能同時做到這兩點,但分起類來也更加困難。
問題三:數據集質量差
就像前言中說的那樣,數據質量差會導致結果的質量差。
可能你的數據集中有一些樣例離達標真的很遠,比如下面這幾張圖像。
這些圖像會干擾模型的正確分類,你需要將這些圖像在數據集中剔除。
雖然是個漫長枯燥的過程,但對結果的提升效果很明顯。
另一個常見問題是,數據集可能是由與實際應用程序不匹配的數據組成的。如果圖像來自完全不同來源,這個問題可能尤為嚴重。
解決方案:先思考一下這項技術的長期應用,因為它關係到獲取生產中的數據。嘗試用相同的工具查找/構建一個數據集。
問題四:分類不平衡
如果每個分類的樣例數量與其他類別數量差距太大,則模型可能傾向於數量佔主導地位的類,因為它會讓錯誤率變低。
解決方案1:
你可以收集更多非代表性的分類。然而這通常需要花費時較多間和金錢,也可能根本不可行。
解決方案2:
對數據進行過採樣/降採樣處理。這意味著你可能需要從那些比例過多的分類中移除一些樣例,也可以在比例較少的類別中進行上面提到過的樣例擴充處理。
問題五:數據不平衡
如果你的數據沒有專門的格式,或者它的值沒有在特定的範圍,模型處理起來可能很困難。如果圖像有特定的縱橫比或像素值,得到的結果會更好。
解決方案1:
裁剪或拉伸數據,使其與其他樣例的格式相同,如下圖所示。
解決方案2:
將數據規範化,使每個樣例在相同的值範圍內。
問題六:沒有驗證或測試
數據集被清理、擴充並打上標籤後,你就需要把它們分個組了。
許多數據研究人員會將這些數據分成兩組:80%用於訓練,20%用於測試,這將會使發現過擬合變容易。
然而,如果你在同一個測試集上嘗試多個模型,情況則有所不同。選擇測試精度的最佳模型,實際上是對測試集進行過擬合處理。
解決方案:
將數據集分為訓練、驗證和測試三組,這可以保護你的測試集,防止它因為所選的模型而過擬合。那這個過程就變成了:
- 在訓練集上訓練模型
- 在驗證集上測試它們,確保它們沒有過擬合
- 選擇最佳模型,並用測試集測試,看看你的模型準確性有多高。
注意:提醒一句,記得經常用整個數據集去訓練模型,數據越多,效果越好。
總結
最後,送廣大數據科學工作者一句N字箴言:
擁有最好模型的人不是贏家,擁有最好數據的人才是。
— 完 —
歡迎大家關注我們的專欄:量子位 - 知乎專欄
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。
量子位 QbitAI · 頭條號簽約作者
?? ? 追蹤AI技術和產品新動態
推薦閱讀:
※Python數據科學(五)- 數據處理和數據採集
※科技巨頭都愛的Data Pipeline,如何自動化你的數據工作?
※機器學習筆記:利用scikit-learn進行數據預處理