陳 力 趙禮峰
(南京郵電大學理學院 南京 210023)
在數據分類問題中,不平衡數據分類是一種較為困難的問題,由于數據中存在少數類與多數類,不平衡數據的分類結果往往偏向于多數類,導致表面上的準確率虛高,實際上占重要位置的少數類樣本被錯分。這個問題在生活中亦普遍存在,例如,防盜門在人臉識別時會出現的四種判別情況:將房主(多數類)正確判別為房主,將房主誤判為入侵者(少數類),將入侵者正確判別為入侵者,將入侵者誤判為房主。顯然,最后一種情況最為嚴重,一旦誤判會造成財產甚至是生命安全的損傷,少數類的分類重要性可見一斑[1]。對不平衡數據分類的研究主要集中在數據層面和算法層面。數據層面包含下采樣和過采樣,算法層面包含代價敏感學習、集成學習和單分類器學習。本文著重算法層面中集成學習上的研究。集成學習是一種通過訓練多個弱分類器后將其集成為一個強的組合分類器再進行分類的方法,訓練期間通過不斷迭代改變弱分類器和樣本的權重,組合形成的強分類器綜合了眾多弱分類器的優勢。在集成算法中,AdaBoost是較為著名的一種算法,有許多針對不平衡數據的算法都是基于其改進而來的[2]。例如Joshi等提出的針對AdaBoost處理不平衡數據的缺陷的RareBoost算法[3],宋海燕將下采樣和過采樣與AdaBoost結合提出的SPBoost和KBOSBoost等[4]。這些方法有的在迭代過程中融入了代價敏感的思想,有的在算法執行之前就加入了數據層面的處理,但均未能直接適應不同數據集的不同錯分代價,往往需要多次迭代才能優化分類效果,這給運算量方面帶來了一定的負擔。故本文首先對不同分類情況進行分析,定義新的分類評價指標,在指標中引入關注度調整參數,使指標與不同特征的數據集高度相關,進而改變AdaBoost算法中每一輪迭代的弱分類器權重以及弱分類器中的樣本權重,使組合分類器自適應不同特征不平衡數據集的分類。
AdaBoost算法(adaptive boosting)是一種集成算法,其核心思想是針對同一個訓練集訓練不同的基分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的組合分類器(強分類器)[5]。AdaBoost算法一方面增大錯分樣本的權重,減小正確分類樣本的權重使得每次迭代后下一輪的弱分類器更關注錯分樣本,另一方面給予準確率高的弱分類器以更大的權重,準確率低的弱分類器以較小的權重使得性能更好的分類器占據主導地位[6~8],最終集成強分類器。
在集成學習中,最常用的方法之一是梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)算法。作為集成學習Boosting的成員,但是和傳統AdaBoost有很大不同,該方法是利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,以此迭代下去直至滿足收斂條件。GBDT采用前向分布算法,但是弱學習器限定只能使用CART回歸樹模型,它是在Adaboost算法的基礎上改進優化后的一種算法[9]。
GBDT能夠靈活處理各種類型的數據,包括連續值和離散值,而且在相對少的調參時間下能夠得到較高的預測準確率。
首先,在二分類問題中會發生四種分類情況[10],具體如下:
TP--將正類預測為正類數;
FN--將正類預測為負類數;
FP--將負類預測為正類數;
TN--將負類預測為負類數。
通常二分類常被表述為一種分類矩陣,即混淆矩陣,形式如表1。

表1 混淆矩陣
準確率是衡量一般性分類問題分類效果好壞的主要指標,但在處理不平衡數據分類問題時,由于錯分代價的不同,準確率的高低往往無法真實反映分類器的好壞,因此本文額外使用了兩種在研究不平衡數據分類時常用到的分類評價指標,三類指標分別如下。
1)準確率(Accuracy)

準確率A是指在所有樣本中,判別器正確預測的樣本數占所有樣本數的比例,其值越大表明分類器分類效果越好。
2)F1值(F-measure)
F1值是精確率和召回率的調和均值,即:

當精確率和召回率都高時,F1值也高,分類效果好。
3)G-mean
G-mean在不平衡數據分類的評價中使用較廣[11],它同時考慮了召回率和特異率,當兩者都高時其值較高,其綜合評估了算法性能,計算公式如下:

PFBoost算法是本文基于Ada Boost算法提出的一種聚焦于不平衡數據集中正類(少數類)樣本分類的集成算法。首先觀察表1的2×2混淆矩陣,其中包含了二分類的四種分類情況:將正類預測為正類,將負類預測為負類,將正類預測為負類,將負類預測為正類。前兩種屬于分類正確的情況,比較可知,不平衡數據對正類樣本的正確分類關注程度高于負類樣本的,故在構造新的評價指標時給予第一種情況更大關注;后兩種屬于分類錯誤情況,在處理實際問題時,將更為重要的正類樣本預測為負類樣本比將負類樣本錯分類為正類樣本的損失來得更大[12],故給予第三種情況更大關注。至此,四種分類情況的重要性已厘清,接著,本文在研究F1值的計算公式時發現,F1值將正類錯分情況與負類錯分情況的損失等同視之,而在不平衡數據分類的具體問題中[13],這兩者的重要性并不相同,基于此本文開始構造新指標如下:

上式中,Bt是第t輪迭代下的新評價指標,TPt,FNt,FPt分別是第t輪迭代下的正類分類正確樣本個數、負類樣本錯分樣本個數、負類樣本正確分類樣本個數,β是關注度調整參數,作用是為了使最終的集成算法自適應不同特征的不平衡數據集。
接著將新指標引入分類器權重的構造中,進而對AdaBoost中的樣本權重[14]作改進,迭代集成弱分類器,形成本文的PFBoost算法。
PFBoost算法流程如下。

本文收集了KEEL數據庫和UCI數據庫中共計八組不平衡數據集,為證明PFBoost算法對不同特征數據分類的自適應性,收集到的數據涵蓋了各種不同的維度特征和不平衡程度特征,展示如表2。為方便聚類,先將數據集中存在的分類變量做啞變量處理[15]、單位不統一的變量做標準化處理[16]。

表2 數據集描述
本文對這八個數據集分別運用了AdaBoost算法、GBDT算法和PFBoost算法,并與未經過集成處理的單一決策樹作分類效果對比,分類效果采用Accuracy、F1值和G-mean值衡量。
從三種分類標準折線圖中可以發現,三種集成算法和未處理的決策樹算法對低維不平衡數據集的分類效果均不如高維數據集的。從Accuracy(準確率)角度來看,大多數數據集經過集成算法分類后準確率都有所下降,而PFBoost在重點關注少數類樣本分類的前提下仍能使準確率降幅相對最小,甚至在其中5個數據集上的準確率不低于初始未處理算法,計算其在8個數據集上的平均準確率為90.5%,比未經過集成的決策樹算法高出2.6%。而觀察F1值和G-mean值可發現,PFBoost算法除了在ZAlizadeh一個數據集上的F1值為0.77,比Ada?Boost算法的0.783低了0.013,在其余數據集上的表現均為最好,這充分證明PFBoost算法可以在大幅提升其他不平衡數據衡量指標的情況下盡可能少地犧牲分類準確率,對不平衡數據集分類效果優秀。

圖1 集成方法效果對比折線圖
本文根據不同特征不平衡數據分類情況重要性的不同,構造了新的適用于不平衡數據分類器的評價指標,并基于此提出了聚焦于正類樣本分類正確率的集成算法PFBoost。本算法首先對傳統的分類評價指標F1值作出調整,在公式中引入關注度調整參數β,構造出新的評價指標B,再利用此指標改進AdaBoost算法中的分類器權重和樣本權重,使PFBoost算法自適應于不同特征的不平衡數據的分類[17]。最后選擇決策樹算法作為基分類器算法進行仿真實驗證實了PFBoost的有效性。
雖然PFBoost算法能夠很好地處理不平衡數據的分類問題,其依舊存在缺陷。如隨著迭代次數的上升、數據量以及數據維度的上升,算法帶來的計算量也會大幅上升[18]。并且本文只使用了一種基分類器算法,可能會有泛化能力不足的問題,在接下來的工作中還可以在本算法中嘗試一些其他優秀的分類方法。