◆楊昊天 顧乾暉 王嘉璐 施愷杰 徐力晨
(南昌工程學(xué)院信息工程學(xué)院 江西 330096)
軟件缺陷檢測是軟件工程的重要課題[1]。一些常見的機器學(xué)習(xí)方法,如支持向量機、決策樹、KNN、邏輯回歸、樸素貝葉斯等都能夠用來建立分類模型[2]。但是,對于軟件缺陷檢測問題,經(jīng)典的學(xué)習(xí)方法效果并不理想。由于傳統(tǒng)分類器的訓(xùn)練過程普遍遵循誤差最小化原則,當(dāng)訓(xùn)練數(shù)據(jù)不平衡時,分類面向多數(shù)類偏倚,因此最終的模型對少數(shù)類的分類性能較差,在嚴(yán)重情況下,模型甚至完全無效。類別不平衡指的是訓(xùn)練數(shù)據(jù)中不同類別樣本的數(shù)量差異很大,其中某些類別的樣本數(shù)目要遠小于其他類別樣本的數(shù)目[3]。這種情形廣泛存在于現(xiàn)實應(yīng)用中。不平衡的數(shù)據(jù)降低了少數(shù)類樣本的分類正確性[4]。
不平衡學(xué)習(xí)算法目標(biāo)可以簡單描述為在不嚴(yán)重降低多數(shù)類準(zhǔn)確性的情況下獲得一個能夠為少數(shù)類提供高準(zhǔn)確率的分類器[5]。類別不平衡學(xué)習(xí)一直是機器學(xué)習(xí)與數(shù)據(jù)挖掘領(lǐng)域的研究熱點與難點之一。目前,已有許多類別不平衡學(xué)習(xí)技術(shù)被提出,大致可以分為數(shù)據(jù)層處理技術(shù)、內(nèi)置技術(shù),混合技術(shù)。為了有效提升軟件缺陷預(yù)測精度,本文提出了一種將SMOTE_Tomek 采樣和集成學(xué)習(xí)算法XGBoost[3]相結(jié)合的分類預(yù)測模型。該模型先利用組合采樣方法SMOTE_Tomek 使失衡的數(shù)據(jù)平衡,同時濾除噪音樣本,然后再使用集成學(xué)習(xí)算法XGBoost 進行訓(xùn)練得到分類模型。為了評估提出的分類模型的有效性,我們利用十個NASA 軟件缺陷數(shù)據(jù)集進行了廣泛的比較實驗。實驗結(jié)果驗證了本文提出的模型解決軟件缺陷預(yù)測問題的優(yōu)越性。
XGBoost 是一種基于決策樹并使用梯度提升框架的集成學(xué)習(xí)算法。
本文利用XGBoost 集成學(xué)習(xí)算法在平衡后的數(shù)據(jù)集上進行訓(xùn)練。設(shè)每個數(shù)據(jù)集中有n 個樣本和m 個特征,記為:D={(xi,yi)}(|D|=n,xi∈Rm,yi∈R)。其中yi為實際缺陷標(biāo)簽。根據(jù)XGBoost 算法中決策樹函數(shù)fk(x),預(yù)測缺陷標(biāo)簽,其中k 為迭代次數(shù)。由損失函數(shù)和懲罰項Ω(fk)建立目標(biāo)函數(shù)。損失函數(shù)衡量目標(biāo)值yi與預(yù)測值之間的誤差,懲罰項用以避免過擬合,則目標(biāo)函數(shù)可表示為
其中γ為決策樹的復(fù)雜度,λ為懲罰因子,T 為決策樹的葉子節(jié)點數(shù)目,ω為數(shù)據(jù)分到?jīng)Q策樹中葉子節(jié)點的所在層數(shù)。將上式進行泰勒展開,則算法的第k 次的目標(biāo)函數(shù)可近似表示為
在模型訓(xùn)練階段,每次迭代選擇最優(yōu)的fk(x),使得式(3)最小化。
采樣技術(shù)主要包括欠采樣和過采樣。常見的欠采樣方法主要有:隨機欠采樣、Tomek Links、NearMiss-1、NearMiss-2、NearMiss-3 等。下面以NASA 數(shù)據(jù)集中的PC3 樣本為例。圖1 展示了PC3 原始數(shù)據(jù)樣本的分布情況。
圖1 PC3 原始數(shù)據(jù)樣本
SMOTE 采樣方法在平衡數(shù)據(jù)的同時,造成了分類面的過度偏倚,因此提出了組合采樣技術(shù)SMOTE_Tomek。該方法可以很好地改善SMOTE 過采樣中的噪聲和邊界問題。該方法包含兩步:首先利用SMOTE 采樣對不平衡數(shù)據(jù)進行過采樣處理,然后再通過Tomek Links采樣對新生成的樣本中存在的噪聲進行刪除。圖2 展示了采用SMOTE_Tomek 采樣方法后的新數(shù)據(jù)樣本分布。
圖2 SMOTE_Tomek 采樣
本文實驗使用了十個美國國家航空航天局(NASA)的軟件缺陷數(shù)據(jù)集。這些數(shù)據(jù)集是公開并被廣泛使用于軟件缺陷預(yù)測的數(shù)據(jù)集。每個數(shù)據(jù)集對應(yīng)NASA 某個軟件子系統(tǒng),其特征包括代碼行數(shù)、遞歸最大深度等。
軟件缺陷預(yù)測是一個分類問題,分類問題中我們評估實驗效果可以通過混淆矩陣來計算,由混淆矩陣計算出精確率、召回率、準(zhǔn)確率和F1 值。其中,F(xiàn)1 值表示的是精確率和召回率的調(diào)和平均值,它的值越大,模型的分類性能越好。
本文實驗的采樣階段分別比較了多種常用的欠采樣和過采樣。主要包括:隨機過采樣[6]、ADASYN、SMOTE,以及本文使用的SMOTE_Tomek 采樣方法等。為了驗證文中所提出的組合模型的性能,使用了不同的組合分類模型與之對比。表1 使用不同的采樣模型和XGBoost 分類模型相結(jié)合,隨機連續(xù)進行20 次實驗,計算出各個組合預(yù)測模型在十個NASA 數(shù)據(jù)庫中的準(zhǔn)確率。
圖3 八種采樣方法分別與XGBoost 分類器相組合的F1 值比較
圖4 九種分類器分別與SOMTE_Tomek 采樣相組合的F1 值比較
在NASA 數(shù)據(jù)集上,使用過采樣與XGBoost 的組合預(yù)測模型結(jié)果普遍優(yōu)于欠采樣與XGBoost 的組合模型。其中SMOTE_Tomek 與XGBoost 的組合模型有最優(yōu)的準(zhǔn)確率。但是,對于不平衡數(shù)據(jù)的分類,準(zhǔn)確率往往不是理想的比較指標(biāo)。因此,我們進一步對各個組合模型的F1 值進行比較。在十個NASA 數(shù)據(jù)集的預(yù)測結(jié)果中,過采樣方法比欠采樣方法有更好的F1 值。由各個采樣方法在每個數(shù)據(jù)集的F1 值計算得到各個采樣方法的F1 均值,如表1所示。表1 的實驗結(jié)果表明,對于NASA 軟件缺陷數(shù)據(jù)集,SMOTE_Tomek 采樣方法與XGBoost 相組合的分類模型獲得最優(yōu)的F1 值,即有最好的分類性能。為了進一步驗證SMOTE_Tomek 采樣與XGBoost 組合的分類模型的優(yōu)越性,我們進一步比較了SMOTE_Tomek 采樣算法與其他主流分類器相組合的分類模型,實驗結(jié)果如表2所示。
表1 10 個NASA 數(shù)據(jù)庫上的F1 均值
表2 10 個NASA 數(shù)據(jù)庫上的F1 均值
本文提出了一種SMOTE_Tomek 組合采樣方法和XGBoost 集成學(xué)習(xí)相結(jié)合的分類模型。我們在十個NASA 數(shù)據(jù)集上的仿真實驗結(jié)果表明:該組合模型在軟件缺陷預(yù)測上有著非常出色的表現(xiàn),獲得了最好的平均準(zhǔn)確率和平均F1 值。實驗結(jié)果證明了本文提出的分類模型能夠很好地處理軟件缺陷預(yù)測問題。