解决样本不平衡问题的奇技淫巧 汇总
先舉一個“恐怖”的例子,直觀的感受一下樣本不平衡問題:
你根據1000個正樣本和1000個負樣本正確訓練出了一個準確率90%召回率90%的分類器,且通過實驗驗證沒有欠采樣過采樣的問題哦~完美的樣本,完美的模型,破費,你心里暗自得意。然后模型上線,正式預測每天的未知樣本~。
開始一切都很美好,準確率召回率都很好。直到有一天,數據發生了一點變化,還是原來的數據類型和特征,只是每天新數據中正負樣本變成了100個正樣本,10000個負樣本。注意,先前準確率90%的另一種表達是負樣本有10%的概率被誤檢為正樣本。好了,模型不變,現在誤檢的負樣本數是10000*0.1=1000個,正樣本被檢出100*0.9(召回)=90個,好了,這個時候召回率不變仍為90%,但是新的準確率=90/(1000+90)=8.26% 。震驚嗎!?恐怖嗎!?
結論: 同一個模型僅僅是改變了驗證集的正負樣本比例,模型已經從可用退化成不可用了!!樣本不平衡問題可怕就可怕在這,往往你的模型參數,訓練,數據,特征都是對的!能做的都做了,但你的準確率就是上不去!!絕望吧。。。。。。
問題定義:數據集中,每個類別下的樣本數目相差很大(數量級上的差距)。以下以二分類問題為例說明。
1. SMOTE(Synthetic Minority Over-sampling Technique)過采樣小樣本(擴充小類,產生新數據)
即該算法構造的數據是新樣本,原數據集中不存在的。該基于距離度量選擇小類別下兩個或者更多的相似樣本,然后選擇其中一個樣本,并隨機選擇一定數量的鄰居樣本對選擇的那個樣本的一個屬性增加噪聲,每次處理一個屬性。這樣就構造了更多的新生數據。(優點是相當于合理地對小樣本的分類平面進行的一定程度的外擴;也相當于對小類錯分進行加權懲罰(解釋見3))
2. 欠采樣大樣本(壓縮大類,產生新數據)
設小類中有N個樣本。將大類聚類成N個簇,然后使用每個簇的中心組成大類中的N個樣本,加上小類中所有的樣本進行訓練。(優點是保留了大類在特征空間的分布特性,又降低了大類數據的數目)
3. 對小類錯分進行加權懲罰
對分類器的小類樣本數據增加權值,降低大類樣本的權值(這種方法其實是產生了新的數據分布,即產生了新的數據集,譯者注),從而使得分類器將重點集中在小類樣本身上。一個具體做法就是,在訓練分類器時,若分類器將小類樣本分錯時額外增加分類器一個小類樣本分錯代價,這個額外的代價可以使得分類器更加“關心”小類樣本。如penalized-SVM和penalized-LDA算法。
對小樣本進行過采樣(例如含L倍的重復數據),其實在計算小樣本錯分cost functions時會累加L倍的懲罰分數。
4. 分治ensemble
將大類中樣本聚類到L個聚類中,然后訓練L個分類器;每個分類器使用大類中的一個簇與所有的小類樣本進行訓練得到;最后對這L個分類器采取少數服從多數對未知類別數據進行分類,如果是連續值(預測),那么采用平均值。
5. 分層級ensemble
使用原始數據集訓練第一個學習器L1;將L1錯分的數據集作為新的數據集訓練L2;將L1和L2分類結果不一致的數據作為數據集訓練L3;最后測試集上將三個分類器的結果匯總(結合這三個分類器,采用投票的方式來決定分類結果,因此只有當L2與L3都分類為false時,最終結果才為false,否則true。)
6. 基于異常檢測的分類
用異常檢測算法(如高斯混合模型、聚類等)檢測得到離群點或異常點;再對這些異常點為訓練集學習一個分類器。
7. 其他...待補充。
---------------------?
作者:songhk0209?
來源:CSDN?
原文:https://blog.csdn.net/songhk0209/article/details/71484469?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的解决样本不平衡问题的奇技淫巧 汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tfrecord可以以列表的形式传入多个
- 下一篇: 解决GPU模型训练的随机性