處理不平衡機器學習數據集的不同方法

處理不平衡機器學習數據集的不同方法

分類是最常見的機器學習問題之一。處理任何分類問題的最佳方法都是從分析和探索數據集開始,我們稱之為探索性數據分析(EDA),目的是儘可能多地從數據中生成見解和信息。它還用於查找數據集中可能存在的問題。用於分類的機器學習數據集中常見的問題之一是不平衡類問題。

什麼是數據不平衡?

數據不平衡通常反映數據集中類的不均等分佈。例如,在信用卡欺詐檢測數據集中,大多數信用卡交易不是欺詐,極少數類是欺詐。這使我們在欺詐和非欺詐類別之間的比例達到50:1。在本文中,我將使用Kaggle的信用卡欺詐交易數據集。您可以從 下載此數據集。

首先,讓我們繪製類分佈以查看不平衡。

處理不平衡機器學習數據集的不同方法

如您所見,非欺詐交易遠遠超過欺詐交易。如果我們不解決這個問題,就訓練一個二元分類模型,機器學習模型就會有偏見。

現在,有一些技術可以解決這個問題,我將逐一介紹它們。

重採樣(過採樣和欠採樣):

處理不平衡機器學習數據集的不同方法

這聽起來很直觀。欠採樣是您從多數類中隨機刪除某些觀察結果的過程。一個簡單的方法如下所示:

在對數據集進行欠採樣後,我再次繪製它並顯示相同數量的類:

處理不平衡機器學習數據集的不同方法

平衡數據集(欠採樣)

第二種重採樣技術叫做過採樣。這一過程比欠採樣更復雜。這是一個生成合成數據的過程,它試圖從觀察到的少數類中隨機抽取屬性樣本。對於典型的分類問題,有許多方法用於對數據集進行過採樣。最常見的技術是SMOTE。簡單地說,它觀察少數類數據點的特徵空間,並考慮其k個最近鄰。

處理不平衡機器學習數據集的不同方法

要在python中編寫代碼,我使用一個名為imbalanced -learn或imblearn的庫。下面的代碼顯示瞭如何實現SMOTE。

SMOTE過採樣Python示例代碼

處理不平衡機器學習數據集的不同方法

不平衡數據會如何影響特徵相關性時。

在重採樣之前:

下面的Python代碼繪製了所有特徵之間的相關矩陣。

處理不平衡機器學習數據集的不同方法

處理不平衡機器學習數據集的不同方法

重採樣後:

處理不平衡機器學習數據集的不同方法

注意,現在的特徵相關性要明顯得多。在解決不平衡問題之前,大多數特性沒有顯示出任何相關性,這肯定會影響機器學習模型的性能。

集成方法(採樣器集成):

當使用集成分類器時,bagging方法通過在不同隨機選擇的數據子集上構建多個estimators來工作。在scikit-learn中,分類器的名稱是baggingclassifier。但是,這個分類器不允許平衡每個數據子集。因此,在對不平衡數據集進行訓練時,該分類器會偏向於大多數類,產生biased模型。

為了解決這個問題,我們可以使用imblearn庫中的BalancedBaggingClassifier。它允許在訓練集合的每個估計器之前對數據集的每個子集重採樣。除了sampling_strategy和replacement這兩個控制隨機採樣器行為的參數外,BalancedBaggingClassifier還採用了與scikit-learn baggingclassifieras相同的參數。

這樣,您可以訓練一個能夠處理不平衡的分類器,而無需在訓練前手動進行欠採樣或過採樣。

最後

綜上所述,每個人都應該知道,在不平衡數據集上訓練的機器學習(ML)模型時,其整體性能將受到其預測罕見數據點和少數數據點的能力的限制。識別和解決這些點的不平衡對機器學習模型的質量和性能至關重要。


分享到:


相關文章: