定義
以二分類問題為例,假設我們的數據集是S,數據集中的多數類為S_maj,少數類為S_min,通常情況下把多數類樣本的比例為100:1,1000:1,甚至是10000:1,這種情況下為不平衡數據,不平衡數據的學習即需要在如此分布不均勻的數據集中學習到有用的信息。
問題:不均衡的數據理解預測起來很簡單,永遠都是預測多的數據的那一方,這樣准沒錯,特別是數據多很多的情況的那一方,比如多的占了90%,少的占10%.只要每一次都預測多的那一批數據,預測的准確性就可以達到90%了。
為什么類不平衡是不好的
1.從模型的訓練過程來看
從訓練模型的角度來說,如果某類的樣本數量很少,那么這個類別所提供的“信息”就太少。
使用經驗風險(模型在訓練集上的平均損失)最小化作為模型的學習准則。設損失函數為0-1 loss(這是一種典型的均等代價的損失函數),那么優化目標就等價於錯誤率最小化(也就是accuracy最大化)。考慮極端情況:1000個訓練樣本中,正類樣本999個,負類樣本1個。訓練過程中在某次迭代結束后,模型把所有的樣本都分為正類,雖然分錯了這個負類,但是所帶來的損失實在微不足道,accuracy已經是99.9%,於是滿足停機條件或者達到最大迭代次數之后自然沒必要再優化下去,訓練結束,於是模型沒有學習到如何去判別出少數類。
2.從模型的預測過程來看
考慮二項Logistic回歸模型。輸入一個樣本X ,模型輸出的是其屬於正類的概率y^ 。當 y^ > 0.5 時,模型判定該樣本屬於正類,否則就是屬於反類。
為什么是0.5呢?可以認為模型是出於最大后驗概率決策的角度考慮的,選擇了0.5意味着當模型估計的樣本屬於正類的后驗概率要大於樣本屬於負類的后驗概率時就將樣本判為正類。但實際上,這個后驗概率的估計值是否准確呢?
從幾率(odds)的角度考慮:幾率表達的是樣本屬於正類的可能性與屬於負類的可能性的比值。模型對於樣本的預測幾率為 y^/(1-y^) 。
模型在做出決策時,當然希望能夠遵循真實樣本總體的正負類樣本分布:設 N等於正類樣本數除以全部樣本數,那么樣本的真實幾率為N/(1-N) 。當觀測幾率大於真實幾率時,也就是y^ >0 時,那么就判定這個樣本屬於正類。
雖然我們無法獲悉真實樣本總體,但之於訓練集,存在這樣一個假設:訓練集是真實樣本總體的無偏采樣。正是因為這個假設,所以認為訓練集的觀測幾率 n^/(1-n^) 就代表了真實幾率n/(1-n) 。
解決方法
方法1:想辦法獲取更多的數據
首先我們要想一想我們是否可以獲取更多的數據,有的時候我們在獲取數據的前期,通常數據會呈現一個變化的趨勢,這時候表現為某一種數據量偏多,等到數據的后半段的時期,數據的變化的趨勢可能就會不一樣了。
如果沒有獲取后半期的數據,從整體來看,預測就可能不會那么的精准.所以想辦法獲得更多的數據有可能會改善這個情況~
方法2:換一種評判方式
通常情況下,我們會使用准確率(Accuracy)和誤差(Cost)兩種方式來判斷機器學習的成果.但是在不均衡的數據面前,高的准確率和低的誤差就顯得沒有那么有用和重要了.
所以我們就可以換個方式去計算,很多時候我們會使用Confusion Matrix去計算Precision&Recall,然后在通過Precision&Recall去計算F1 Score(or F-score).通過這樣的數據,我們可以很大程度上去區分不均衡數據,並且可以給出更好的分數.
方法3:重組數據
這中方法相對來說最為簡單粗暴,對不均衡的數據進行重新組合,使之均衡。第一種方式是復制少數數據里的樣本,使其可以達到和多數數據樣本差不多的數量,也就是過采樣。第二種方式就是對多數樣本的數據進行開刀,砍掉一些多數樣本的數據,還是使兩者的數量差不多 ,即欠采樣方法。
但是,簡單粗暴的去處或者增加數據容易改變原有分布,降低模型泛化能力,需要考慮到數據的分布。
隨機過采樣: 從少數類樣本中隨機重復有放回的抽取樣本以得到更多樣本。
缺點: 對少數類樣本多次復制,擴大了數據規模,增加了模型復雜度,容易過擬合。
解決辦法: SMOTE算法
簡單來說,就是對少數類每一個樣本x,從他在少數類樣本的K近鄰中隨機選一個樣本y,然后在x和y的連線上隨機選取一點作為新的合成的樣本。這種方法避免了復制少數類樣本,增加了樣本的多樣性,可以降低過擬合的風險。
但是這種方法會增大類間重疊度,並且會產生一些不能提供有效信息的樣本。為此出現了Borderline-SMOTE(只給那些處在分類邊界上的少數類樣本合成新樣本),ADASYN(給不同的少數類樣本合成不同個數的新樣本)隨機欠采樣:從多數類樣本中隨機的有放回(或無放回)選取較少的樣本。
缺點:丟棄一部分樣本,可能會損失部分有用信息,造成模型只學到整體模式的一部分。
解決辦法:Easy Ensemble算法
每次從多數類隨機抽取一個子集,和少數類訓練一個分類器;重復若干次,得到多個分類器,最終的結果是多個分類器的融合。
Balance Cascade算法
級聯結構,在每一級中從多數類中隨機抽取子集,和少數類訓練該級的分類器,然后從多數類樣本中剔除掉當前分類器能正取識別的樣本,繼續下一級的操作,重復若干次,最后的結果也是各級分類器的融合。實際上,經常用到的數據擴充方法也是一種過采樣,對樣本進行一些噪聲擾動或變換(裁剪,翻轉,加光照等等)
方法4:使用其他的機器學習方法
在使用一些機器學習的方法中,比如神經網絡,在面對不均衡數據的時候都是束手無策的,但是像決策樹這樣的方法就不會受到不均衡數據的影響
方法5:修改算法
在所有方法中,最具有創造力的方法莫過於這個修改算法了,如果你使用的是Sigmoid函數,他會有一個預測的門檻,如果低於門檻,預測的結果為梨,如果超過了門檻,預測的結果為蘋果。
不過因為現在梨的數量過多,這個時候我們就需要調整下門檻的位置,使得門檻更加的偏向於蘋果這一邊,只有數據非常准確的情況下,模型才會預測為蘋果,從而使機器學習學習到更好的效果.

此外,還可以改變模型訓練時的目標函數;也可以將問題轉化為單類學習。