深度學習 處理不平衡資料的方法

2021-10-07 04:06:22 字數 2819 閱讀 6548

以二分類問題為例,假設我們的資料集是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函式,他會有乙個**的門檻,如果低於門檻,**的結果為梨,如果超過了門檻,**的結果為蘋果。

不過因為現在梨的數量過多,這個時候我們就需要調整下門檻的位置,使得門檻更加的偏向於蘋果這一邊,只有資料非常準確的情況下,模型才會**為蘋果,從而使機器學習學習到更好的效果.

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

處理不平衡資料的方法

處理不平衡資料我們可以採用欠 下 取樣和過 上 取樣的方法。欠 下 取樣 就是從資料量較多那類樣本中,隨機選出與資料較少那類樣本數量相同的樣本,最終組成正負樣本數量相同的樣本集。過 上 取樣 對樣本中數量較少的那類樣本生成演算法補齊,使之達到與較多那類樣本相匹配的數量,如smoto演算法。合成新樣本...

不平衡資料處理

在做實驗中遇到了非平衡資料集,導致實驗結果很憂傷,資料類別不均對模型訓練有挺大影響,尤其是在類別極度不均的時候。目前還沒有很好的解決方法,還處於查詢資料,比著葫蘆找葫蘆的過程中,記錄一下,或許能有所啟發。對於不平衡資料,其實類別精度 precise 和召回率 recall 或者是準確率 accura...

類別不平衡資料的處理

1.不平衡學習的基本概念及處理方法分類 重點學習 分類中解決類別不平衡問題 綜述重點 2.學習adacost對adaboost的改進方式 實現基於代價敏感的adacost演算法 3.smote演算法的matlab實現 基於matlab,應用smote演算法對小樣本類進行過取樣 python中可以呼叫...