在機器學習中如何應對不均衡分類問題?

2021-08-09 04:56:54 字數 4254 閱讀 4388

在處理機器學習等資料科學問題時,經常會碰到不均衡種類分布的情況,即在樣本資料中乙個或多個種類的觀察值明顯少於其他種類的觀察值的現象。在我們更關心少數類的問題時這個現象會非常突出,例如竊電問題、銀行詐騙**易、罕見病鑑定等。在這種情況下,運用常規的機器學習演算法的**模型可能會無法準確**。這是因為機器學習演算法通常是通過減少錯誤來增加準確性,而不考慮種類的平衡。這篇文章講了不同的方法來解決這個不均衡分類問題,同時說明了這些方法的好處和壞處。

不均衡資料集一般是指少數類所佔比例少於5%的資料集,少數類通常是指稀有事件的發生。例如在乙個公共欺詐檢測資料集中,有如下資料:

總觀測資料 = 1000

欺詐的觀測資料 = 20

非欺詐的觀測資料 = 980

事件發生率 = 2%

在分析這個資料集時最主要的問題是,如何通過合適的稀有事件的樣本數目得到乙個平衡的資料集?

傳統的模型評估方法不能準確的評價不均衡資料集訓練的模型的表現。顯然,模型趨向於**多數集,少數集可能會被當作噪點或被忽視。因此,相比於多數集,少數集被錯分的可能性很大。當使用乙個不均衡資料集訓練模型時,準確率並不是乙個合適的評價方式。假如乙個分類器可以達到98%的準確率,我們會認為這個模型表現很好,而對於乙個少數集佔總體2%的資料集來說,如果分類器把全部都**為多數集,準確率就能達到98%,可是這個分類器對於**沒有任何用處。

解決不均衡資料集帶來的模型**不準確的問題主要有兩種方法,第一種方法是在資料層面將資料集轉變為較為平衡的資料集,然後進行建模;第二種則是在演算法層面改進演算法模型的表現。

在將資料用於建模之前,先運用重抽樣技術使資料變平衡。平衡資料主要通過兩種方式達到:增加少數類的頻率或減少多數類的頻率。通過重抽樣來改變兩個種類所佔的比例。

隨機欠抽樣

隨機欠抽樣技術通過隨機刪除多數類的例項來平衡種類分布。在之前的例子中,我們無放回的取10%非欺詐資料,結合所有的欺詐資料形成新資料集。這樣,總觀測資料變為20+980*10%=118,而欠抽樣之後新資料集的事件發生率為20/118=17%。

當訓練資料很多時,隨機欠抽樣通過減少訓練資料的數量提高執行時間和解決儲存問題。然而,這也會帶來潛在有效資訊被刪除的問題。欠抽樣選擇的資料可能是偏差樣本,無法準確代表總體。因此,會導致在測試集中表現欠佳。

過抽樣技術是通過隨機複製少數類的例項來增加少數類的數量。在之前的例子中,複製20個少數例項20遍,使少數類資料變為400條,總觀測資料變為980+400=1380,事件發生概率為400/1380=29%。與欠抽樣不同,過抽樣不會損失任何資訊。一般來說,過抽樣表現好於欠抽樣。然而,由於過抽樣複製了多遍少數類資料,導致過擬合(over-fitting)的可能性變大。

基於聚類的過抽樣

基於聚類的過抽樣是將k-means聚類演算法分別應用在少數類和多數類中,識別出資料集中不同簇(cluster)。隨後,通過對每個簇過抽樣來確保多數類和少數類的簇中例項的數目相等。假設對於剛才的資料集做聚類結果如下:

簇1: 150觀測資料

簇2: 120觀測資料

簇3: 230觀測資料

簇4: 200觀測資料

簇5: 150觀測資料

簇6: 130觀測資料

對簇過抽樣之後,每個相同種類的簇含有相同的數量的觀測資料:

簇1: 170觀測資料

簇2: 170觀測資料

簇3: 170觀測資料

簇4: 170觀測資料

簇5: 170觀測資料

簇6: 170觀測資料

基於聚類的過抽樣之後,事件發生率為 500/(1020+500)=33%。這種方法考慮了多數類少數類由不同的簇組成,解決了每個簇所包含的例項不同的問題。然而,由於這是一種過抽樣技術,同樣也可能會導致過擬合。

合成少數類過抽樣(smote)

smote避免了複製少數類導致的過擬合問題。用少數類的子集來創造新的合成的相似少數類例項。將這些合成的例項加入原有資料集,豐富少數類的資料。下圖展示了創造合成例項的方法。

還是用之前的例子,在少數類中選取15個樣本例項,合成20次新的資料。少數類資料變為為300條,事件發生率為300/1280=23.4%。

這種方法通過合成新資料緩解了由於複製少數類帶來的過擬合問題,同時不會造成有效資訊丟失。然而,當合成新例項時,沒有考慮與其他類的相鄰例項,這可能會導致種類重疊,並且可能會添入額外的噪點。

演算法集合技術

上面所說的技術都是通過對原資料集進行重抽樣來得到均衡資料集。在這一部分中,我們將對於現有分類演算法進行改進,使其適用於不均衡資料集。演算法合成的目的是提公升單一分類器的表現,下圖展示了合成演算法的方法。

圖2:演算法集合技術的方法

基於bagging

bagging是bootstrap aggregating的縮寫。傳統的bagging演算法生成n個可以互相替換的bootstrap訓練樣本。基於每個樣本,訓練不同的模型,最後彙總這些模型的**結果。bagging可以減少過擬合,從而創造更精準的**模型。與boosting不同的是,bagging允許對訓練樣本集進行替換。下圖展示了bagging的流程。

在之前的例子中,從總體中可替換的抽取10個bootstrap樣本,每個樣本包含200個觀測值。每個樣本都與原始資料不相同,但是與原始資料的分布和可變性相似。很多機器學習演算法都可以用來訓練這10個bootstrap樣本,如邏輯回歸、神經網路、決策樹等,得到10個不同的分類器c1,c2…c10。將這10個分類器 集合成乙個復合分類器。這種集合演算法結合了多個單獨的分類器的結果,可以得到乙個更好的復合分類器。bagging演算法提公升了機器學習演算法的穩定性和準確性,並且解決了過擬合問題。在有噪點的資料環境中,bagging比boosting表現更加優異。

基於boosting

boosting也是乙個演算法集合技術,它將弱分類器結合起來,形成乙個可以準確**的強分類器。boosting從乙個為訓練集準備的弱分類器開始。弱分類器是指**準確率只比平均數高一點的分類器,如果資料發生一點變化就會導致分類模型發生很大變化。boosting是一種提高任意給定學習演算法精確度的方法。下圖展示了boosting的方法。

圖4: boosting的方法

下面介紹幾種不同的boosting技術。

ada boost是boosting演算法家族中的代表演算法,通過結合許多弱分類器形成乙個準確的**分類器。每個分類器的目的都是正確分類上一輪被分錯的例項。每一輪之後,被分錯的例項的權重增加,被正確分類的例項的權重降低。應用ada boost到剛才的不均衡資料集中,首先給每乙個例項相同的權重,假設基礎分類器只分對了400個例項,將這400個例項的權重減小為,剩下600個被錯分的例項的權重增加到。每一輪中,弱分類器通過更新權重來提公升它的表現。這個過程持續到錯分率明顯下降,分類器變成了強分類器為止。ada boost的好處在於它非常便於執行,而且非常普遍,適用於所有種類的分類演算法,也不會導致過擬合。壞處是它對於噪點和異常值非常敏感。

gradient boosting 是乙個最優化演算法,每個模型都按順序通過gradient descent方法最小化損失函式。在gradient boosting中,決策樹被當作乙個弱分類器。ada boost和gradient boosting都是將弱分類器變為強分類器的方法,但這兩種方法有本質的不同。ada boost在學習過程開始之前要求使用者設立弱分類器集或者隨機生成弱分類器集,每乙個弱分類器的權重會根據是否分類正確調整。gradient boosting則是在訓練集上建立第乙個分類器**,接著計算損失值,然後運用損失值來改進分類器。每一步中,損失函式的殘差都會通過gradient descent method來計算。在隨後的迭代中,新的殘差變成了目標變數。gradient tree boosting比隨機森林更難以擬合。它有三個引數可以微調,shrinkage引數,樹的深度和樹的數量。選擇合適的引數才能得到好的擬合的gradient boosted tree。如果引數調整的不正確,可能會導致過擬合。

結論當面對不均衡資料集時,沒有乙個解決方案可以提公升所有**模型的準確性。我們所需要做的可能就是嘗試不同的方法,找出最適合這個資料集的方法。最有效的解決不均衡資料集的技術取決於資料集的特徵。在大多數情況中,合成抽樣技術如smote會比傳統的過抽樣和欠抽樣表現更好。為了得到更好的結果,可以同時使用合成抽樣技術和boosting方法。在比較不同方法時,可以考慮相關的評估引數。在比較使用前述方法所建立的多個**模型的時候,可以用roc曲線下的面積來得出哪個模型效果更好。

機器學習分類資料不均衡的簡單處理

隨機選擇類別較多的資料與類別較少的資料一致。x特徵,y類別 x data.ix data.columns class y data.ix data.columns class 小類別資料個數 number records fraud len data data.class 1 小類別資料索引 fra...

機器學習中的類別不均衡問題

類別不均衡 指在分類演算法中,不同樣本類別的比例懸殊比較大,會對演算法的學習過程造成重大干擾。比如 乙個二分類的問題上,有1000個樣本,其中5個正樣本,995個負樣本,在這種情況下,演算法只需將所有的樣本 為負樣本,那麼它的精度也可以達到99.5 雖然結果的精度很高,但它依然沒有價值,因為這樣的學...

如何在不均衡類上使用機器學習?

當我們訓練分類器時,需要投入海量的資料,這些資料大致 於公開的資料庫和自己製作的資料庫。已公開的資料庫,以casia webface為例,共有10575個類,但每個類別包含的資料及其不平衡,從幾個到幾百個不等,因此這就給訓練分類器增加了難度。一種方法是均衡處理 獲取100張以上的類別,然後訓練集放8...