我在作人臉檢測試驗的時候,發現了問題,別人的二分類器(判別是否是人臉)的閾值很高,大於90%點機率,而個人閾值要設置的很低10%點機率即認爲是臉,通過觀察,個人負樣本數數量上比正樣本數多的太多了,致使網絡對負樣本的判別有信心,對正樣本判別能力微弱,猜想正負樣本分佈對閾值有影響,故上網找了這篇文章html
這篇博文是做者的一個實驗筆記,研究一個」飛機-背景「二分類器在不一樣樣本比例下精度,召回率的規律。算法
固定正樣本(飛機)2000個,改變負樣本(背景)的訓練數據量
1 : 0.5 、 1 : 1 、 1 : 2 、 1 : 5 、 1 : 10 、 1: 30.
隨着負樣本數量的增多,類間數據量不均衡的狀況更爲顯著。
測試時,分別隨機選取4096張飛機、背景樣本(不出如今訓練集),對在每一種數據比例上訓練的模型進行測試。安全
飛機分類的精度提高,召回率下降;
背景分類的精度下降,召回率升高。markdown
將這個問題歸結爲「類間樣本數量不平衡對分類結果的影響」問題。
網絡
將探討問題歸結爲」類間數據量(比例)不平衡對分類結果的影響」問題。
2.思考點:dom
對於飛機分類,隨着負樣本增多,精度上升,召回率降低;
對於背景分類,精度降低,召回率上升。
誰是主因?誰是從因?
在這個實驗中,飛機樣本數據不變,是控制變量。負樣本(背景)數據量逐漸增長,首先應該分析因爲負樣本增長而形成的精度、召回率變化;其次,要分析精度上升和召回率降低,哪個變化是直接由負樣本數據量最大引發的。機器學習
當類間數據量相差較大時,模型傾向於將樣本判別爲數據量大的樣本,便可得到較低的損失,沒有動力繼續優化參數。
極端的例子:訓練樣本中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
一個直觀的假設是:在類間數據量不平衡的訓練過程當中,模型對數據量多的類別的分佈擬合的更好,致使對該類的分類性能更好。
這個假設基於:某類型數據量越多,對模型的參數修改的越多,模型越能刻畫一類型的分佈,從而更好分類。
這一假設有一些沒有問題沒有解釋:
當背景樣本數據量變大時,爲何是召回率上升?爲何只有召回率上升?
訓練樣本類間數據量的不平衡會引發分類性能的改變。具體到這一實驗:數據量越大的類別,其召回率會更高,相應地會損失一些精度。
拷貝數據量少的類別的樣本,使得兩類的樣本數目一致。觀察自動平衡數據對分類結果是否有改進。
【深度學習結構化/非均衡數據集處理】《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
9 條精選討論(選自165條原始評論和轉發)
感受都沒扯到點子上啊,最經典的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那篇文章選取訓練樣本的方法)
數據不平衡是機器學習裏面的常見的現象,一般是根據數據類別的分佈對損失函數進行加權處理,即正負兩類出現誤判的懲罰是不一樣的,好比,樣本量小的那一類懲罰會更大,或者也能夠在迭代的時候增長樣本小的那一類被選中來進行優化的機率,至關於將樣本小的那一類的數據人爲複製。