机器学习-特征工程中的样本不均衡处理方法
?
?
? ? ? 如果你才開始學習機器學習,那么你使用過的數據集很大程度上都是簡單、普通、規整的。其中一個原因就是,當你構建分類器時,樣本類都是平衡的。在教學中,數據集通常是處理過的,這樣才能夠把注意力集中在特定算法或技巧上,而不被其它問題干擾。一般情況下,你遇到的樣本類似下方的二維圖表,其中的點代表樣本、點的不同顏色(或形狀)代表類:
分類算法的目標是嘗試學習出一個能夠分辨二者的分離器(分類器)。根據不同的數學、統計或幾何假設,達成這一目標的方法很多:
然而,當你開始面對真實的、未加工過的數據時,你會馬上注意到,這些數據要嘈雜且不平衡得多。真實數據的散點圖看起來更像是這樣的:
最主要的問題是這些類是不平衡的:藍點的數量遠超紅點。對于不平衡類的研究通常認為「不平衡」意味著少數類只占 10% 到 20% 。而在現實中,數據集甚至能夠比上面的例子更加不平衡,比如以下是一些例子:
-
每年,約 2% 的信用卡賬戶是偽造的。(多數的欺詐檢測領域是極其不平衡的);
-
針對某一病征的醫學篩查通常涵蓋了許多沒有此病征的人,以檢查出少數患者(例:美國的 HIV 感染率約為 0.4%);
-
每年,硬盤驅動器故障的發生率約為 1%;
-
在線廣告的轉化率在 10^-3 到 10^-6 的范圍區間內;
-
工廠的產品缺陷率一般在 0.1% 左右;
?
? ? ? ?類別不均衡是指在分類學習算法中,不同類別樣本的比例相差懸殊,它會對算法的學習過程造成重大的干擾。比如在一個二分類的問題上,有1000個樣本,其中5個正樣本,995個負樣本,在這種情況下,算法只需將所有的樣本預測為負樣本,那么它的精度(查準率)也可以達到99.5%,雖然結果的精度很高,但它依然沒有價值,因為這樣的學習算法不能預測出正樣本。這里我們可以知道不均衡問題會導致樣本較少那一類的高錯分率,即較少一類的樣本會有較大的比例會被預測成樣本數量較多的那一類。
? ? ? ?樣本不平衡程度的大小不同,解決的難易程度也可能不同,因為問題難易程度還取決于我們所擁有數據有多大。比如在預測癌癥診斷的場景中,因為患癌癥的人本來就很少,所以數據不但不平衡,樣本數還非常少,這樣的問題就非常棘手。綜上,可以把問題根據難度從小到大排個序:大數據+分布均衡<大數據+分布不均衡<小數據+數據均衡<小數據+數據不均衡。對于需要解決的問題,拿到數據后,首先統計可用訓練數據有多大,然后再觀察數據分布情況。經驗表明,訓練數據中每個類別有5000個以上樣本,數據量是足夠的,正負樣本差一個數量級以內是可以接受的,不太需要考慮數據不平衡問題(僅供參考)。
?
處理不平衡數據,可以從兩方面考慮:
一是改變數據分布,從數據層面使得類別更為平衡;
二是改變分類算法,在傳統分類算法的基礎上對不同類別采取不同的加權方式,使得模型更看重少數類。
?
一、改變數據分布
? ? ? ?改變數據分布主要是通過對數據進行采樣的方法完成,采樣分為上采樣(過采樣)(Oversampling)和下采樣(欠采樣)(Undersampling),上采樣是把小種類復制多份,下采樣是從大眾類中剔除一些樣本,或者說只從大眾類中選取部分樣本。
? ? ? ? ??
通過對數據集的不同的過采樣方法,大致可以分為以下四類,具體為:
1. 基礎版本的過采樣:隨機過采樣訓練樣本中數量比較少的數據;缺點,容易過擬合;
2. 改進版本的過采樣:SMOTE,通過插值的方式加入近鄰的數據點;
3. 基于聚類的過采樣:先對數據進行聚類,然后對聚類后的數據分別進行過采樣。這種方法能夠降低類間和類內的不平衡。
4. 神經網絡中的過采樣:SGD訓練時,保證每個batch內部樣本均衡。
?
1. 隨機過采樣
? ? ? ?通過增加少數類樣本數量最簡單的方法便是隨機復制少數類樣本,可以事先設置多數類與少數類最終的數量比例ratio,在保留多數類樣本不變的情況下,根據ratio隨機復制少數類樣本。在使用的過程中為了保證所有的少數類樣本信息都會被包含,可以先完全復制一份全量的少數類樣本,再隨機復制少數類樣本使得數量比例滿足給定的ratio。
-
優點:操作簡單,只依賴于樣本分布,不依賴于任何距離信息,屬于非啟發式方法。
-
缺點:重復樣本過多,容易造成分類器的過擬合。
?
2. SMOTE過采樣
SMOTE(Synthetic Minority Oversampling Technique),合成少數類過采樣技術.它是基于隨機過采樣算法的一種改進方案,由于隨機過采樣采取簡單復制樣本的策略來增加少數類樣本,這樣容易產生模型過擬合的問題,即使得模型學習到的信息過于特別而不夠泛化,SMOTE算法的基本思想是對少數類樣本進行分析并根據少數類樣本人工合成新樣本添加到數據集中。具體的步驟為:
(1)對于少數類中每一個樣本x,以歐氏距離為標準計算它到少數類樣本集中所有樣本的距離,得到其k近鄰。
(2)根據樣本不平衡比例設置一個采樣比例以確定采樣倍率N,對于每一個少數類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為xn。
(3)對于每一個隨機選出的近鄰xn,分別與原樣本按照如下的公式構建新的樣本。
公式為:
? ? ? ? ? ? ? ? ? ? ? ? ??
?SMOTE算法的思想是合成新的少數類樣本,合成的策略是對每個少數類樣本a,從它的最近鄰中隨機選一個樣本b,然后在a、b之間的連線上隨機選一點作為新合成的少數類樣本。如圖所示:
? ? ??
? ? ? 該算法主要存在兩方面的問題:一是在近鄰選擇時,存在一定的盲目性。從上面的算法流程可以看出,在算法執行過程中,需要確定K值,即選擇多少個近鄰樣本,這需要用戶自行解決。從K值的定義可以看出,K值的下限是M值(M值為從K個近鄰中隨機挑選出的近鄰樣本的個數,且有M< K),M的大小可以根據負類樣本數量、正類樣本數量和數據集最后需要達到的平衡率決定。但K值的上限沒有辦法確定,只能根據具體的數據集去反復測試。因此如何確定K值,才能使算法達到最優這是未知的。
? ? ? ?另外,該算法無法克服非平衡數據集的數據分布問題,容易產生分布邊緣化問題。由于負類樣本的分布決定了其可選擇的近鄰,如果一個負類樣本處在負類樣本集的分布邊緣,則由此負類樣本和相鄰樣本產生的“人造”樣本也會處在這個邊緣,且會越來越邊緣化,從而模糊了正類樣本和負類樣本的邊界,而且使邊界變得越來越模糊。這種邊界模糊性,雖然使數據集的平衡性得到了改善,但加大了分類算法進行分類的難度。
?
3. KMeansSMOTE
? ? ? ?KMeansSMOTE采用簡單和流行的k-means聚類算法結合SMOTE過采樣,以重新平衡數據集。它設法通過僅在安全區域進行過采樣來避免產生噪聲。此外,它的重點是類別間的不平衡和類別內的不平衡,通過使稀疏的少數類別樣本增加來對抗小的分離問題。由于其簡單性和kmeans以及SMOTE的廣泛可用性,該方法易于實現。它與相關方法的不同之處不僅在于其復雜度低,而且還因為其基于聚類分布生成樣本。?
? ? ? ?KMeansSMOTE包括三個步驟:聚類、過濾和過采樣。在聚類步驟中,使用k均值聚類為k個組。過濾選擇用于過采樣的簇,保留具有高比例的少數類樣本的簇。然后,它分配合成樣本的數量,將更多樣本分配給少數樣本稀疏分布的群集。最后,過采樣步驟,在每個選定的簇中應用SMOTE以實現少數和多數實例的目標比率。?
?
4. 隨機欠采樣
? ? ? ?減少多數類樣本數量最簡單的方法便是隨機剔除多數類樣本,可以事先設置多數類與少數類最終的數量比例ratio,在保留少數類樣本不變的情況下,根據ratio隨機選擇多數類樣本。
-
優點:操作簡單,只依賴于樣本分布,不依賴于任何距離信息,屬于非啟發式方法。
-
缺點:會丟失一部分多數類樣本的信息,無法充分利用已有信息。
?
5. EasyEnsemble
? ? ? ?EasyEnsemble算法是一種有效的不均衡數據分類方法。它將多數類樣本隨機分成多個子集,每個子集分別與少數類合并,得到多個新的訓練子集,并利用每個訓練子集訓練一個AdaBoost基分類器,最后集成所有基分類器,得到最終的分類器。EasyEnsemble算法有效解決了數據不均衡問題,且減少欠采樣造成的多數類樣本信息損失。但是,EasyEnsemble算法未考慮少數類樣本極度欠缺的情況,由于少數類樣本數遠小于正確訓練分類器所需的樣本數,導致基學習器的分類性能差,進而最終的分類器性能也很差。另外,噪聲是另一個影響分類器性能的關鍵因素,在EasyEnsemble算法中并未考慮。
?
6. 使用K-fold交叉驗證
K-fold交叉驗證就是把原始數據隨機分成K個部分,在這K個部分中選擇一個作為測試數據,剩余的K-1個作為訓練數據。交叉驗證的過程實際上是將實驗重復做K次,每次實驗都從K個部分中選擇一個不同的部分作為測試數據,剩余的數據作為訓練數據進行實驗,最后把得到的K個實驗結果平均。
?
7. 轉化為一分類問題
對于二分類問題,如果正負樣本分布比例極不平衡,我們可以換一個完全不同的角度來看待問題:把它看做一分類(One Class Learning)或異常檢測(Novelty Detection)問題。這類方法的重點不在于捕捉類間的差別,而是為其中一類進行建模,經典的工作包括One-class SVM等。
?
二、模型評價方式
? ? ? ?謹慎選擇AUC作為評價指標:對于數據極端不平衡時,可以觀察觀察不同算法在同一份數據下的訓練結果的precision和recall,這樣做有兩個好處,一是可以了解不同算法對于數據的敏感程度,二是可以明確采取哪種評價指標更合適。針對機器學習中的數據不平衡問題,建議更多PR(Precision-Recall曲線),而非ROC曲線,具體原因畫圖即可得知,如果采用ROC曲線來作為評價指標,很容易因為AUC值高而忽略實際對少兩樣本的效果其實并不理想的情況。
? ? ? ?不要只看Accuracy:Accuracy可以說是最模糊的一個指標了,因為這個指標高可能壓根就不能代表業務的效果好,在實際生產中,我們可能更關注precision/recall/mAP等具體的指標,具體側重那個指標,得結合實際情況看。
?
三、算法選擇
(1)選擇對數據傾斜相對不敏感的算法。如樹模型等。
(2)集成學習(Ensemble集成算法)。首先從多數類中獨立隨機抽取出若干子集,將每個子集與少數類數據聯合起來訓練生成多個基分類器,再加權組成新的分類器,如加法模型、Adaboost、隨機森林等。
(3)將任務轉換成異常檢測問題。譬如有這樣一個項目,需要從高壓線的航拍圖片中,將松動的螺絲/零件判斷為待檢測站點,即負樣本,其他作為正樣本,這樣來看,數據傾斜是非常嚴重的,而且在圖像質量一般的情況下小物體檢測的難度較大,所以不如將其轉換為無監督的異常檢測算法,不用過多的去考慮將數據轉換為平衡問題來解決。
?
四、總結
? ? ? 解決數據不平衡問題的方法有很多,上面只是一些最常用的方法,而最常用的方法也有這么多種,如何根據實際問題選擇合適的方法呢?接下來談談一些我的經驗。
- 在正負樣本都非常之少的情況下,應該采用數據合成的方式;
- 在負樣本足夠多,正樣本非常之少且比例及其懸殊的情況下,應該考慮一分類方法;
- 在正負樣本都足夠多且比例不是特別懸殊的情況下,應該考慮采樣或者加權的方法。
- 采樣和加權在數學上是等價的,但實際應用中效果卻有差別。尤其是采樣了諸如Random Forest等分類方法,訓練過程會對訓練集進行隨機采樣。在這種情況下,如果計算資源允許上采樣往往要比加權好一些。
- 另外,雖然上采樣和下采樣都可以使數據集變得平衡,并且在數據足夠多的情況下等價,但兩者也是有區別的。實際應用中,我的經驗是如果計算資源足夠且小眾類樣本足夠多的情況下使用上采樣,否則使用下采樣,因為上采樣會增加訓練集的大小進而增加訓練時間,同時小的訓練集非常容易產生過擬合。
- 對于下采樣,如果計算資源相對較多且有良好的并行環境,應該選擇Ensemble方法
?
?
?
?
參考鏈接:https://blog.csdn.net/heyongluoyao8/article/details/49408131
參考鏈接:https://blog.csdn.net/zjx459754206/article/details/81213778
參考鏈接:https://www.cnblogs.com/charlotte77/p/10455900.html
參考鏈接:https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650718717&idx=1&sn=85038d7c906c135120a8e1a2f7e565ad&scene=0#wechat_redirect
?
?
總結
以上是生活随笔為你收集整理的机器学习-特征工程中的样本不均衡处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-过拟合和欠拟合以及正则化处理
- 下一篇: 机器学习-特征工程中的数据预处理