為什麼只能在訓練資料上平衡不平衡的資料集? Why should you deal with an imbalanced dataset only on training data?
最近有位同學向我詢問一些資料競賽相關的內容,剛好發現他在程式上犯了這個初心者可能會犯的常見錯誤,也就是將 SMOTE(Synthetic Minority Oversampling Technique) 這種針對不平衡資料集 (imbalanced Dataset) 產生資料來讓其平衡的相關演算法應用在整個資料集上,而非只用在訓練資料集上。
目前的數據分析相關競賽通常都是給參賽者一些不平衡的資料集或者是特徵非常多的資料集(通常多達上百個特徵,尤其是金融相關競賽),此時初學者也常常會查詢到像是 Imblearn 這種專門處理不平衡資料及的套件使用。但其實無論是上採樣或者下採樣又抑或是混合上下採樣的方法,它們其實都只能應用在訓練資料上,不能直接對整個資料集做平衡。錯誤的使用會造成模型作弊,並訓練出非常非常高的準確率,但實際上表現完全不好,就像過擬合(Overfitting)發生的時候那樣。
平衡資料集的方法
為什麼不可以直接平衡整個資料集呢?
為了回答這個問題,得先知道為什麼資料分割的獨立性是必須優先在所有方法之上的。這裡借用 Google 的MLCC(Machine Learning Crash Course) 教材來講解。
當你拿到一份資料並想對其使用機器學習演算法來解決你的任務時,至少得將資料分割為訓練資料 (Training Set) 與測試資料 (Test Set),訓練資料是用來教你的模型從x推理到y,測試資料是用來測試這個訓練資料所訓練出來的模型在沒有見過的資料 (unseen data) 上表現如何,測試資料得必須與訓練資料完全沒有交集,否則就等於是數學老師直接在上課的時候告訴你期中考的題目和答案,也就是會造成作弊的情形發生。這不僅完全無助於模型的訓練,反而會誤導訓練模型的人。不能直接平衡整個資料集的主要原因就是打破了這個測試資料與訓練資料必須獨立的前提。接下來我們舉例說明回答這個問題。
留言
張貼留言