類間樣本數量不平衡對分類模型性能的影響問題

我在作人臉檢測試驗的時候,發現了問題,別人的二分類器(判別是否是人臉)的閾值很高,大於90%點機率,而個人閾值要設置的很低10%點機率即認爲是臉,通過觀察,個人負樣本數數量上比正樣本數多的太多了,致使網絡對負樣本的判別有信心,對正樣本判別能力微弱,猜想正負樣本分佈對閾值有影響,故上網找了這篇文章html

這篇博文是做者的一個實驗筆記,研究一個」飛機-背景「二分類器在不一樣樣本比例下精度,召回率的規律。算法

1. 問題描述

  固定正樣本(飛機)2000個,改變負樣本(背景)的訓練數據量
1 : 0.5 、 1 : 1 、 1 : 2 、 1 : 5 、 1 : 10 、 1: 30.
隨着負樣本數量的增多,類間數據量不均衡的狀況更爲顯著。
  測試時,分別隨機選取4096張飛機、背景樣本(不出如今訓練集),對在每一種數據比例上訓練的模型進行測試。
安全

飛機分類的精度提高,召回率下降;
背景分類的精度下降,召回率升高。
markdown

  將這個問題歸結爲「類間樣本數量不平衡對分類結果的影響」問題。
  這裏寫圖片描述
網絡

  這裏寫圖片描述

2. 思考

1.問題抽象

  將探討問題歸結爲」類間數據量(比例)不平衡對分類結果的影響」問題。
2.思考點:
dom

2.1誰是引發這一變化的主因?

  對於飛機分類,隨着負樣本增多,精度上升,召回率降低;
  對於背景分類,精度降低,召回率上升。
誰是主因?誰是從因?
  在這個實驗中,飛機樣本數據不變,是控制變量。負樣本(背景)數據量逐漸增長,首先應該分析因爲負樣本增長而形成的精度、召回率變化;其次,要分析精度上升和召回率降低,哪個變化是直接由負樣本數據量最大引發的。
機器學習

3.假設

3.1從模型訓練的動力角度解釋

  當類間數據量相差較大時,模型傾向於將樣本判別爲數據量大的樣本,便可得到較低的損失,沒有動力繼續優化參數。
  極端的例子:訓練樣本中A類1個樣本,B類100個樣本,那麼模型將樣本判別爲B類便可得到很低的損失值,從而失去繼續訓練優化的動力,網絡性能弱。
分析實驗結果的混淆矩陣:
ide

airplane background
4088 8
72 4024

airplane background
4085 11
45 4051

airplane background
4084 12
18 4078

airplane background
4073 23
4 4092

airplane background
4067 29
2 4094

airplane background
4061 35
0 4096

  從混淆矩陣來看:
 
函數

隨着負樣本(背景)佔比愈來愈大,模型將更多原屬於飛機類的樣本判別爲背景【觀察第一行】。
而愈來愈少的背景樣本被劃分到飛機類別。從而背景分類的召回率增高,精度降低。
post

3.2 數據量大的類別擬合的更好

  一個直觀的假設是:在類間數據量不平衡的訓練過程當中,模型對數據量多的類別的分佈擬合的更好,致使對該類的分類性能更好。
  這個假設基於:某類型數據量越多,對模型的參數修改的越多,模型越能刻畫一類型的分佈,從而更好分類。
  這一假設有一些沒有問題沒有解釋:

當背景樣本數據量變大時,爲何是召回率上升?爲何只有召回率上升?

4 .一些啓發

  訓練樣本類間數據量的不平衡會引發分類性能的改變。具體到這一實驗:數據量越大的類別,其召回率會更高,相應地會損失一些精度。

5. TODO LIST

5.1 自動平衡樣本,觀察是否改善分類性能

  拷貝數據量少的類別的樣本,使得兩類的樣本數目一致。觀察自動平衡數據對分類結果是否有改進。

5.2 閱讀「類間數據不平衡」相關文獻

【深度學習結構化/非均衡數據集處理】《Practicing Guide on handling Structured & Imbalanced Datasets with Deep Learning》
https://www.analyticsvidhya.com/blog/2016/10/investigation-on-handling-structured-imbalanced-datasets-with-deep-learning/

Investigation on handling Structured & Imbalanced Datasets with Deep Learning
After extensive investigations, it does seem that Deep Learning has the potential to do well in the area of structured data. We investigate class imbalance as it is a challenging problem for anomaly detection. In this report, Deep Multilayer Perceptron (MLP) was implemented using Theano in Python and experiments were conducted to explore the effectiveness of hyper-parameters.

這在機器學習裏面被稱類別不平衡問題,能夠參考Haibo, H. and E. A. Garcia (2009). "Learning from Imbalanced Data." Knowledge and Data Engineering, IEEE Transactions on" 的survey.已有不少方法提出

標準解決方法:設計objective function的時候給不一樣misclassification的狀況不一樣的relative weights。也就是說給從小數量的樣本被分紅大數量的樣本更大的penalty

訓練數據與預測數據分佈不一致,有專門研究的課題,sample selection bias,主要方法是各類reweighting

 

按理是跟你的目標有關。若是你的目標是 預測的分佈 跟訓練的分佈一致,那就加大對分佈不一致的懲罰係數就是。

Learning Classifiers from Imbalanced, Only Positive and Unlabeled Data Sets

9 條精選討論(選自165條原始評論和轉發)

  機器學習那些事兒   2014-11-15 17:48
工業界機器學習典型問題: 正負樣本分佈極不均勻(一般<1:10000),有什麼較好的方案構造訓練集的正負樣本分佈?構造後如何解決訓練數據與預測的分佈不一致?請大牛幫忙解釋下 @老師木 @李沐M @星空下的巫師@徐盈輝_仁基
北冥乘海生 轉發於 2014-11-15 17:50
這個跟模型的形式和估計方法都有關,有些狀況下正負例不均衡時估計有偏,能夠校訂一下。
小兔子大壞壞 評論於 2014-11-15 18:25
上採樣、下采樣、代價敏感,沒什麼好辦法
特級飛行員舒克 轉發於 2014-12-07 17:27  回覆 @phunter_lau
回覆 @phunter_lau:mark,sampling
範濤_中科大 評論於 2014-12-07 17:40  回覆 @特級飛行員舒克
這個以前調研過,主要分重採樣和欠採樣!這種不平衡是由於比率的不平衡給一些學習方法帶來問題。可是在某些領域,好比反欺詐和安全,不只是比率極不平衡,並且是正樣本樣本絕對數很小。須要擴散正樣本方法!
特級飛行員舒克 轉發於 2014-12-07 17:54
聚類而後從負樣本中找和正樣本比較緊鄰的做爲正樣本怎麼樣? @phunter_lau @範濤_中科大 @winsty
範濤_中科大 轉發於 2014-12-07 17:57
回覆 @特級飛行員舒克: Synthetic Minority Over-sampling Technique 我試過這個方法,解決部分問題,主要仍是須要增長樣本在特徵空間的覆蓋! 工程上光靠算法也解決不了問題,有的仍是須要加入下經驗知識來作。
睡眼惺忪的小葉先森 轉發於 2014-12-07 18:03  回覆 @範濤_中科大
我也說說。拋磚引玉:1,比例是一個關鍵的參數,據咱們的經驗,1:14是一個常見的「好」比例。[哈哈] 2,stratified sampling,也就是根據特徵來採樣,儘可能使樣本都覆蓋特徵空間。3,訓練的時候,這個正負樣本的「出場」順序也很關鍵,否則可能還沒遇到正(負)樣本模型就已經收斂了。
梁斌penny 轉發於 2014-12-07 18:05  回覆 @特級飛行員舒克
這就是一種僞標註方法,是可行的。固然最後仍是須要驗證一下效果,來證實這個方法對這類數據是solid的
孫明明_SmarterChina 轉發於 2014-12-07 18:16  回覆 @梁斌penny
這問題太籠統了。正負樣本不平衡只是個表象,處理方法要根據本質緣由來定。
齊浩亮 轉發於 2014-12-07 18:37  回覆 @梁斌penny
用排序思想構造所謂的序對,
宋雲濤 轉發於 2014-12-07 18:55
若是1:10算是均勻的話,能夠將多數類分割成爲1000份。而後將每一份跟少數類的樣本組合進行訓練獲得分類器。然後將這1000個分類器用assemble的方法組合位一個分類器。記得讀到的論文可行,但沒有驗證過
宋雲濤 評論於 2014-12-07 18:57
採樣的話要麼損失信息要麼影響數據分佈,基本的序對的話也會引發信息的損失~
特級飛行員舒克 轉發於 2014-12-07 19:55  回覆 @Juggernaut_One
回覆 @Juggernaut_One:我認爲有些場景下正負樣本之間並無嚴格明顯的界線,是能夠互相轉換的。
特級飛行員舒克 轉發於 2014-12-07 19:59  回覆 @Juggernaut_One
回覆 @Juggernaut_One:在百度實習作廣告點擊率預估時,曾經想過在模型訓練時不用0/1做爲label,而是根據特徵狀況給一個float值(在[0,1]區間周圍),或者更簡單一些分別對目標值0/1作一些擾動,後來因爲某些緣由沒作成。
wb王傳鵬 轉發於 2014-12-07 20:00
@劉尚堃 你說過有很多技巧[哈哈]
離家出走的托爾斯泰 轉發於 2014-12-08 02:34
這在機器學習裏面被稱類別不平衡問題,能夠參考Haibo, H. and E. A. Garcia (2009). "Learning from Imbalanced Data." Knowledge and Data Engineering, IEEE Transactions on" 的survey.已有不少方法提出
phunter_lau 轉發於 2014-12-08 05:02  回覆 @梁斌penny
或者試試看Transductive SVM (TSVM) 用當前訓練的模型標註新的sample,差很少相似的想法可是我也是聽同事說的
小吳COKE 轉發於 2014-12-08 05:26  回覆 @梁斌penny
聚類自己不是已經默認了類似度測定了麼。。。。[汗]
cswhjiang 轉發於 2014-12-08 05:33  回覆 @phunter_lau
Transductive 是指要求 label 的數據在training 一個model的時候已經肯定了,相對於inductive 而言。訓練數據和測試數據分佈不一樣是domain adaptation、sample bias、data shift。可是他原先的問題實際上是imblance problem,google下能找到方法,好比  http://t.cn/Rzph0Wt
思奇吞象 評論於 2014-12-08 05:50
標準解決方法:設計objective function的時候給不一樣misclassification的狀況不一樣的relative weights。也就是說給從小數量的樣本被分紅大數量的樣本更大的penalty
anch3or 轉發於 2014-12-08 07:53  回覆 @梁斌penny
@phunter_lau:或者試試看Transductive SVM (TSVM) 用當前訓練的模型標註新的sample,差很少相似的想法
孫明明_SmarterChina 轉發於 2014-12-08 08:35  回覆 @好東西傳送門
訓練數據與預測數據分佈不一致,有專門研究的課題,sample selection bias,主要方法是各類reweighting
機器學習那些事兒 轉發於 2014-12-08 09:06  回覆 @特級飛行員舒克
這應該和半監督的間諜算法相似吧,不過這隻能解決抽樣問題,無法較好的肯定正負樣本之間的比例吧?
老師木 轉發於 2014-12-08 10:12  回覆 @梁斌penny
我之前搞過一個support cluster machine,相似的想法,好久之前的工做了,僅能夠參考一下。
vinW 評論於 2014-12-08 10:17
按理是跟你的目標有關。若是你的目標是 預測的分佈 跟訓練的分佈一致,那就加大對分佈不一致的懲罰係數就是。
Jason_wbw 轉發於 2014-12-08 10:19  回覆 @特級飛行員舒克
我理解那麼多的負樣本的狀況下,其實負樣本已經並非真正的`負樣本`了,順帶扔個以前被推薦的paper http://t.cn/RzpInP3
王小科科科 轉發於 2014-12-08 10:32
個人處理方式挺簡單的,將負樣本取樣數量減小,而後在計算預測機率的時候,調整常數因子。
晴陰雨雪天各類讀書 轉發於 2014-12-08 11:11  回覆 @巖間花樹GT
早幾年kdd有篇paper解決這個的,其實原理都差很少
微笑刺客4067 轉發於 2014-12-08 12:09
關注。。僞標註有時間試一試!
夏睿 轉發於 2014-12-08 12:50  回覆 @孫明明_SmarterChina
Sample selection bias 能夠解決一部分預測與訓練數據分佈不一致(還包括遷移學習、領域適應問題),不過好像沒見過直接用它解決類別不平衡
昊奮 轉發於 2014-12-08 13:08
拋磚引玉,這個卻是能夠參考positive only learning等半監督學習中如早期的spy算法等來構造合適的負例來解決正負例不平衡的問題。在只有正例的學習問題中,負例千差萬別,且數量也遠超正例,符合樓主的問題描述
AixinSG 轉發於 2014-12-08 13:48  回覆 @昊奮
這個建議看起來比上採樣下采樣或者調權重更靠譜
小飛魚_露 轉發於 2014-12-08 17:12
這個看起來像 one-class recommendation 問題,不知是否能夠考慮轉化成 learning to rank 問題,若是不是爲了擬合一個分佈的話 (PS: 字數不夠了...)  @AixinSG @昊奮
NeoLScarlet 轉發於 2014-12-08 17:14  回覆 @算文解字
貌似生成不平衡那邊的樣本效果最好。
復旦李斌 轉發於 2014-12-08 17:39  回覆 @老師木
因而你們搜出來的都是個人那篇。。。[衰][衰]
離家出走的托爾斯泰 評論於 2014-12-08 18:04
我的以爲在類別不平衡條件下,Transductive SVM (TSVM)應該對於的active learning 來標註,可能結果更好。
昊奮 轉發於 2014-12-08 20:04
learning to rank對於訓練數據量的要求較高,同時要肯定用於learning to rank的pair,仍是須要找到負例,從而將正例和負例造成偏序配對。因此learning to rank是一種方法,但我的認爲這會將簡單問題複雜化,且本質仍是須要去找負例。
開機就好ing 轉發於 2014-12-08 21:06  回覆 @昊奮
用單類分類算法如svdd也能夠
杲a杲 評論於 2014-12-09 02:48

感受都沒扯到點子上啊,最經典的imbalanced的方法,cascade learning,詳見viola的face detection paper.


在face recognition問題中,每一個人的已註冊樣本通常都只有一張,在one-by-n的recognition時候,若是n較大,則通常positive pairs的數量會遠遠小於negative pairs的數量。這種狀況下,通常如何去balance用於訓練的pos 和neg pairs? 有沒有現成的code去處理相似問題? 好比作bootsrap等等。(具體能夠參考google的FaceNet那篇文章選取訓練樣本的方法)


 

Tackling Class Imbalance with Deep Convolutional Neural Networks



這個和深度學習不要緊,類別不平衡是機器學習一個常見問題 ,有一下幾個思路能夠參考
1 :數據採樣的時候,能夠把數量少的類別重複採樣,而把數量多的類別只採樣一部分
2:調整損失函數,對樣本多的類別進行懲罰
實際工程上,正負樣本比或者懲罰係數,須要進行調參



首先: 分清 face recognition/ identification /verification,媒體常常統一用face recognition
「已註冊樣本通常都只有一張」 感受是在說 「face identification /verification"(這兩略有不一樣,我更喜歡混爲一談)
  • identification /verification:這不是recognition,不須要去訓練一個分類器 一個註冊樣本也是能夠的,無非是註冊的特徵不夠robust,效果可能差一些,並不存在所謂的「balance pos neg pairs」(若是每個註冊的face都但願有一個特有的threshold的話 那是須要一部分pos neg來計算這個threshold)
  • recognition:問題就變爲「如何提高unbalance數據集上的準確率」,這個問題的研究就比較多了 能夠Google下;negative sample能夠 生成、「僞造」的;softmax(one vs all)不須要negative sample;sigmoid(對於部分分類任務 如:多標籤分類,其實蠻適合用sigmoid作神經網絡的最終輸出的)等大多數分類器 正負例 的樣本均等爲好;此外在語音識別中 神經網絡的訓練樣本是極爲不均衡的;在圖像任務中 也能夠考慮利用下 類別的先驗機率

首先你要肯定爲何須要balance,balance不必定就是好的,咱們須要的是同分布,而不是神馬balance。
改變分佈就有不少科學的方法了。
sample的話,好比MCMC。
還能夠生造數據,嗯,就是很火的reinforce。



我試着答一下 若有錯誤請你們指正
問題主要矛盾指不平衡數據處理 結論是分兩種處理 算法修正和數據修正
而後是正文

數據不平衡是一個很正常的現象 在神經網絡領域以外已經有不少相關研究了 尤爲在svm上(笑)
機器學習算法中一般兩種方法解決 一種是算法上的 用算法計算不一樣輸入數據的距離 將距離歸入算法訓練 或者說將距離歸入懲罰函數 有不少相關研究 手機打沒文獻 搜索imbalance會有不少 基於不平衡度和基於圖是我知道的兩種很好的算法
在深度學習上 不平衡的算法處理沒有單獨拿出來說的 由於隨着時代發展 這個被視爲解決問題中很小的一環 更多的是處理transfer learning
深度遷移學習網絡基本是深度網絡中會涉及不平衡的最重要 或者說效果最好的一類 可是正如前文所說 不平衡的解決只是順帶的
遷移網絡解決不平衡最好的例子是deep transfer metric learning,這篇文獻相似考慮距離懲罰 而且將懲罰歸入了能量函數 在根據能量函數作梯度遞減迭代時候發揮做用 相似的想法確定能夠解決 可是彷佛有些不合適 畢竟transfer learning 解決的是更麻煩一點的問題
代碼 不多 可是theano只改下update函數 caffe改一下能量函數式 訓練依舊是反向傳播 能夠有預訓練 不用改

前述麻煩 因此有數據採樣方法解決數據不平衡
採樣解決不平衡分欠採樣和過採樣兩種
可是說在前面 數據採樣上解決 實際是數據預處理的一步了 和深度不深度不要緊 這部分代碼很好寫 由於只操做數據
欠採樣就是有的數據不採用 過採樣就是少數的信息重複採樣或者差值擬合出新的少數類信 著名的是SMOTE算法
這些方法和信號採樣那些很像 可是也有一些新的方法和些微不一樣 相關文獻看得很少 臨時想不到


具體用到的時候 看你問題定義了 不必定要用到這些東西 深度網絡擬合能力很好 不平衡的丟過去極可能只有過擬合問題 而不須要特殊處理
文獻資料什麼的想不起來 可是搜索很好搜 百度就行 由於實驗室前輩有作過imbalance data 我也跟過一段時間

數據不平衡是機器學習裏面的常見的現象,一般是根據數據類別的分佈對損失函數進行加權處理,即正負兩類出現誤判的懲罰是不一樣的,好比,樣本量小的那一類懲罰會更大,或者也能夠在迭代的時候增長樣本小的那一類被選中來進行優化的機率,至關於將樣本小的那一類的數據人爲複製。

相關文章
相關標籤/搜索