機器學習和深度學習中如何處理數據不平衡問題

如何處理數據不平衡問題

前言

在您正在處理數據集時您可以創建分類模型並立即獲得90%的準確度。你覺得“非常不錯”。但是當你深入一點時,發現90%的數據屬於一個類。

這是一個不平衡數據集的例子,它可能導致令人沮喪的結果。

當你發現你的數據有不平衡的類並且你認爲你得到的所有好的結果都變成了錯誤的時候,你會感到非常沮喪。

當你發現大部分書籍,文章和博客文章似乎並沒有爲您提供有關處理數據不平衡的良好建議時,下一波挫折就會出現。

放鬆,這裏有很多選擇去解決數據不平衡問題,我們將全面介紹它們。您可以爲不平衡數據構建預測模型。

什麼是數據不均衡

數據不均衡通常是指在分類問題中,有某一類或者某幾類數據與其他類別在數據量上不一致。

比如,你有一個100行的二分類數據集,其中屬於類別1的數據佔有80個,而屬於類別2的數據只有20個。

這是一個不平衡的數據集,類別1與類別2的數據比例爲80:20或更簡潔,爲4:1。

對於兩類分類問題以及多類分類問題,您都可能會遇到類別數據不平衡的問題。

接下來的討論將假設一個兩類分類問題,因爲它更容易思考和描述。

數據不平衡很常見

大多數分類數據集中每個類別的數據都沒有完全相同數量的實例,但是小的差異通常無關緊要。

有些問題的數據不平衡問題是在我們預期內的。例如,在那些表徵欺詐性交易的數據集中,這些數據集是不平衡的。絕大多數交易將在“非欺詐”類中進行,而極少數交易將在“欺詐”類中。另一個例子是客戶流失數據集,絕大多數客戶都使用該服務(“No-Churn”類),少數客戶取消訂閱(“Churn”類)。

如果上面的示例中存在類似4:1的類別數據不平衡,則可能會導致訓練出現問題。

準確性悖論

準確性悖論是本文簡介中確切情況的名稱。

在這種情況下,您的準確度測量可以說明您具有出色的準確性(例如90%),但準確性僅反映了潛在的階級分佈。

這是非常常見的情況,因爲分類準確性通常是我們在評估分類問題模型時使用的第一個衡量指標。

當我們在不平衡的數據集上訓練時,我們的模型中發生了什麼?

正如您可能已經猜到的那樣,我們在不平衡數據上獲得90%準確度的原因(在類別1中有90%的實例)是因爲我們的模型會擬合數據並巧妙地決定最好的做法是始終預測“1級”並實現高精度。

使用簡單的基於規則的算法時最好觀察到這一點。如果在最終模型中輸出規則,您將看到它很可能預測一個類別,而忽略其它被要求預測的數據。

解決不平衡訓練數據的8種策略

我們現在瞭解了什麼是數據類別不平衡,以及它爲什麼會提供誤導性的分類準確性。

那麼我們有什麼操作可以避免這類問題帶來的煩惱呢?

嘗試收集更多數據

您可能認爲這很愚蠢,但收集更多數據幾乎總是被大家忽視。
你能收集更多數據嗎?花點時間考慮一下您是否能夠收集有關問題的更多數據。
較大的數據集很大可能會使不平衡數據被平衡。

嘗試更改結果驗證指標

在使用不平衡數據集時準確性不是最佳的指標。我們已經看到它具有誤導性。

在使用不平衡類時,有一些指標可以告訴您更真實的訓練情況。在帖子“分類準確性不夠:可以使用的更多性能指標”中,文章中提供了更多關於選擇不同性能指標的建議。

在那篇文章中,我接觸了一個不平衡的數據集,它描述了患者乳腺癌復發的特徵。

在那篇文章中,我建議查看以下性能測量,這些測量可以比使用傳統的分類準確度更深入地瞭解模型的準確性:

  • 混淆矩陣:將預測分解爲表格,顯示正確的預測(對角線)和不正確的預測類型(分配了不正確的預測類別)。
  • 精確度:分類器精確度的度量。
  • 召回率:分類器覆蓋度的度量
  • F1分數(或F分數):精確度和召回率的加權平均值。

我還建議你看一下以下內容:

  • Kappa:度量兩個被觀測對象的一致程度。
  • ROC曲線:與精確度和召回率一樣,精度分爲靈敏度和特異性,可以根據這些值的平衡閾值選擇模型。

您可以在文章“評估和比較分類器性能與ROC曲線”中比較使用ROC曲線來比較分類準確性。

還不確定應該使用哪個指標嗎?可以從kappa開始,它將讓您更好地瞭解模型正在發生的事情,而不是分類準確性。

嘗試重新採樣數據集

您可以嘗試改變用於構建預測模型的數據集,以獲得更平衡的數據。

此更改變爲對數據集進行採樣,您可以使用兩種主要方法來均衡類別:

  1. 您可以從代表性不足的類中添加實例的副本,稱爲過採樣(或更正式的替換採樣)
  2. 您可以從過度表示的類中刪除實例,稱爲欠採樣。

這些方法通常很容易實現並且不會佔用太多時間。他們是一個很好的起點。

事實上,我建議你在所有不平衡的數據集上去嘗試這兩種方法,看看它是否能提高你的首選精確度量。

您可以在維基百科文章“數據分析中的過採樣和欠採樣”中瞭解到更多內容。

一些經驗法則
  • 當您擁有大量數據(數十或數百萬個實例或更多)時,請考慮嘗試欠採樣
  • 當您沒有大量數據(數萬條記錄或更少)時,請考慮嘗試過採樣
  • 考慮使用隨機和非隨機(例如分層)的採樣方案。
  • 考慮嘗試不同的過採樣比率(例如,您不必在二進制分類問題中以1:1的比例爲目標,嘗試其他比率)

嘗試生成合成樣本

生成合成樣本的一種簡單方法是從少數類中的實例中隨機採樣屬性。

您可以在數據集中憑經驗對它們進行採樣,或者您可以使用像Naive Bayes這樣的方法,可以在反向運行時獨立地對每個屬性進行採樣。您將擁有更多不同的數據,但可能無法保留屬性之間的非線性關係。

您可以使用系統算法生成合成樣本。最流行的此類算法稱爲SMOTE或合成少數過採樣技術。

顧名思義,SMOTE是一種過採樣方法。它的工作原理是從次要類創建合成樣本,而不是創建副本。該算法選擇兩個或更多個類似的實例(使用距離測量)並且通過差異內的相鄰實例的隨機量一次干擾實例的一個屬性。

瞭解有關SMOTE的更多信息,請參閱2002年原創的題爲“ SMOTE:Synthetic Minority Over-sampling Technique ”的論文。

SMOTE算法有許多實現,例如:

嘗試不同的算法

我強烈建議您不要在每個問題上都使用您喜歡的算法。您應該至少在給定問題上對各種不同類型的算法進行抽樣檢查。

有關抽查算法的更多信息,請參閱我的文章“Why you should be Spot-Checking Algorithms on your Machine Learning Problems”。

話雖這麼說,但決策樹通常在不平衡的數據集上能夠有良好的表現。查看用於創建樹的類變量的拆分規則可以強制分開這兩個類。

如果有疑問,請嘗試一些流行的決策樹算法,如C4.5,C5.0,CART和隨機森林。

對於使用決策樹的R代碼的一些示例,請參閱帖子“Non-Linear Classification in R with Decision Trees”。

有關在Python和scikit-learn中使用CART的示例,請參閱帖子“Get Your Hands Dirty With Scikit-Learn Now ”。

嘗試懲罰模型

您可以使用相同的算法,但爲他們提供不同的懲罰視角。

懲罰分類會對模型造成額外成本,以便在訓練期間對少數樣本分類錯誤進行懲罰。這些處罰可能會使模型偏向於更多地關注少數樣本。

通常,類懲罰或權重的處理專用於學習算法。存在懲罰版本的算法,例如penalized-SVM和penalized-LDA。

也可以爲懲罰模型提供通用框架。例如,Weka有一個CostSensitiveClassifier,可以包裝任何分類器並應用自定義懲罰矩陣進行未命中分類。

如果您被限制在特定算法中並且無法重新取樣或者您的結果不佳,則需要使用懲罰。它提供了另一種“平衡”類的方法。設置懲罰矩陣可能很複雜。您很可能必須嘗試各種懲罰方案,看看什麼最適合您的問題。

嘗試不同的觀點

有專門針對不平衡數據集的研究領域。他們有自己的算法,度量和術語。

從這些角度看一看並思考你的問題有時會讓您產生一些新的想法。

您可能想要考慮的兩個是異常檢測和變化檢測。

異常檢測是罕見事件的檢測。這可能是由於其振動或由系統調用序列指示的程序的惡意活動而指示的機器故障。與正常操作相比,這些事件很少見。

思維的這種轉變將次要類別視爲異常類,這可能有助於您考慮分離和分類樣本的新方法。

變化檢測類似於異常檢測,除了尋找異常之外,它正在尋找變化或差異。這可能是使用模式或銀行交易所觀察到的用戶行爲的變化。

這兩種轉變都會對分類問題採取更實時的立場,這可能會爲您提供一些思考問題的新方法,也許還有一些嘗試的技巧。

嘗試獲取創意

真正深入瞭解你的問題並思考如何將其分解爲更容易處理的小問題。

爲了獲得靈感,請查看Quora上非常有創意的答案,回答“ 在分類中,您如何處理不平衡的訓練集?”

例如:

將較大的類分解爲較少數量的其他類...

...使用一類分類器......(例如像異常值檢測一樣處理)

......將不平衡的訓練集重新取樣到不是一個平衡集,而是幾個。在這些集合上運行分類集合可以產生比單獨一個分類器更好的結果

這些只是您可以嘗試的一些有趣且富有創意的想法。

有關更多想法,請在reddit帖子“Classification when 80% of my training set is of one class”中查看這些評論。

選擇一種方法並採取行動

您不需要是算法大師或統計學家來從不平衡數據集構建準確可靠的模型。

我們已經介紹了許多可用於建模不平衡數據集的技術。

希望您可以從上述方法中立即應用一兩個,例如更改精度指標和重新採樣數據集。兩者都很快,並會立即產生影響。

你打算嘗試哪種方法?

最後一句話,從小開始

請記住,我們無法知道哪種方法最適合您以及您正在處理的數據集。

您可以使用一些專家啓發式方法來選擇這種方法,但最後,我能給您的最佳建議是“成爲科學家”並根據經驗測試每種方法,並選擇能夠爲您提供最佳結果的方法。

從小處着手,以你學到的東西爲基礎。

想要更多?進一步閱讀…

如果您想更深入地瞭解一些關於處理課堂不平衡的學術文獻,請查看下面的一些鏈接。

Books

Papers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章