衛(wèi)梅特,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
近些年軟件缺陷預(yù)測成為了計算機(jī)領(lǐng)域研究者的熱門課題[1]。目前提出的軟件缺陷預(yù)測常用的機(jī)器學(xué)習(xí)方法有支持向量機(jī)(Support Vector Machine)、隨機(jī)森林(Random forest)、決策樹(Decision Tree)、DP-Transformer、代價敏感分類(Cost-Sensitive Classification)[2-5]等。對于軟件項目,存在歷史數(shù)據(jù)庫丟失或者是損壞等一些原因,軟件缺陷預(yù)測所需要的數(shù)據(jù)無法從軟件項目自身的歷史庫中獲取,因此有研究者考慮到跨項目缺陷預(yù)測。Abdul Ali Bangash等人[6]提出了跨項目缺陷預(yù)測模型,該方法主要是對過去的模型進(jìn)行訓(xùn)練,而對將來的模型進(jìn)行評估。婁豐鵬等人[7]針對遷移學(xué)習(xí),提出了增加度量元的遷移學(xué)習(xí)跨項目軟件缺陷預(yù)測,從源項目中提取知識并將其轉(zhuǎn)移到目標(biāo)項目的轉(zhuǎn)移學(xué)習(xí)來提高預(yù)測性能。于巧等人[8]為了探究分類不平衡對軟件缺陷預(yù)測模型性能的影響程度,設(shè)計了一種新數(shù)據(jù)集構(gòu)造算法,將原不平衡數(shù)據(jù)集轉(zhuǎn)化為一組不平衡率依次遞減的新數(shù)據(jù)集,然后分別對構(gòu)造的新數(shù)據(jù)集進(jìn)行預(yù)測。對于公開數(shù)據(jù)集NASA,文獻(xiàn)[9]提出了基于集成學(xué)習(xí)的軟件缺陷預(yù)測方法與研究,針對數(shù)據(jù)集做特征選擇選取每個數(shù)據(jù)集前15個最優(yōu)特征。在所用數(shù)據(jù)集中特征向量維度分布在22-41,雖然利用前15個最優(yōu)特征,但對向量維度為41的特征有部分重要屬性被拋棄。
為充分利用數(shù)據(jù)集中的有效信息保證有效信息不被拋棄,本文提出基于特征優(yōu)選的軟件缺陷預(yù)測集成學(xué)習(xí)方法。主要是,對NASA中8個數(shù)據(jù)子集的45943條特征向量進(jìn)行研究,通過SMOTE對少數(shù)類樣本進(jìn)行分析并根據(jù)少數(shù)類樣本合成新樣本添加到數(shù)據(jù)集中。然后,通過信息增益(Information gain,IG)分析數(shù)據(jù)集的特征屬性,根據(jù)分析結(jié)果對特征屬性進(jìn)行選擇。最后,使用集成學(xué)習(xí)算法Stacking構(gòu)建學(xué)習(xí)器。結(jié)果表明,本模型有效提升了分類性能,與近年基于Stacking構(gòu)建學(xué)習(xí)器的實(shí)驗(yàn)結(jié)果進(jìn)行對比,Accuracy平均提升4.65%、F-Measure平均提升5.25%和AUC平均提升11.3%。本文第2節(jié)介紹特征優(yōu)選的軟件缺陷預(yù)測集成學(xué)習(xí)方法。第3節(jié)介紹集成學(xué)習(xí)方法具體實(shí)現(xiàn)細(xì)節(jié)。最后總結(jié)全文,并對下一步工作進(jìn)行展望。
特征選擇一直是軟件缺陷預(yù)測研究的核心問題之一。通過特征能否直接區(qū)分,軟件缺陷模塊與非缺陷模塊,直接決定模型的可行性。面對眾多特征,如果不加篩選,而直接使用全部特征則會造成兩方面問題:1)部分特征與軟件缺陷預(yù)測無關(guān),會嚴(yán)重影響軟件缺陷的預(yù)測性能。2)部分特征存在冗余,會增加軟件缺陷模型構(gòu)建的時間。正因如此,如何選擇合適的特征子集成為構(gòu)建高質(zhì)量數(shù)據(jù)集和軟件缺陷預(yù)測模型的重要基礎(chǔ)。
本文對經(jīng)典數(shù)據(jù)集美國國家航空航天局(NASA)MDP[10]中的8個項目的特征進(jìn)行分析,著重關(guān)注軟件模塊的冗余特征和無效特征,在對比了實(shí)驗(yàn)結(jié)果之后總結(jié)得出最優(yōu)特征。
通過對數(shù)據(jù)集中的特征進(jìn)行分析,首先確定了以軟件的代碼度量作為支撐基礎(chǔ),為NASA中的每個項目的度量標(biāo)準(zhǔn)建立提供了切實(shí)的理論依據(jù)。同時,代碼度量標(biāo)準(zhǔn)通常從軟件自身特點(diǎn)出發(fā),受限于項目本身的具體情況、開發(fā)語言和組織等因。因此,從NASA數(shù)據(jù)集特點(diǎn)考慮,由于數(shù)據(jù)集種類繁多,其規(guī)模較大,可能存在的軟件缺陷也越來越多。為保證軟件質(zhì)量,本文考慮將軟件質(zhì)量的度量納入數(shù)據(jù)集度量標(biāo)準(zhǔn)的組成中。
有關(guān)軟件質(zhì)量和軟件質(zhì)量評價的標(biāo)準(zhǔn)已經(jīng)存在多年,國內(nèi)開展軟件度量和評價的專業(yè)研究也取得了較多成果,于2006年發(fā)布了國際GB/T 16260.1《軟件工程產(chǎn)品質(zhì)量》[11]。但是并沒有得到廣泛應(yīng)用和推廣,目前實(shí)際工程項目中開展軟件全面質(zhì)量的成功范例較少。因此對軟件進(jìn)行代碼度量、特征選擇以及軟件缺陷預(yù)測具有重要的作用。文獻(xiàn)[12],指出信息增益是最有效的特征選擇方法之一。因此在本文中特征選擇使用的是信息增益,信息增益體現(xiàn)了特征的重要性。熵是IG中一個非常重要的概念,表示任何一種能量在空間中分布的均勻度,能量分布越均勻,越不確定,熵就越大。香農(nóng)[13]將熵應(yīng)用于信息處理,對信息進(jìn)行量化度量,因此為了衡量一個隨機(jī)變量取值的不確定程度,就此提出“信息熵”的概念。信息熵的計算公式
(1)
在式(1)中P(Ci)代表的是數(shù)據(jù)中i類出現(xiàn)的概率,共有k類。信息熵體現(xiàn)了信息的不確定性程度,熵越大表示特征越不穩(wěn)定,對于此次的分類,越大表示類別之間的數(shù)據(jù)差別越大。
條件熵的公式
(2)
其中
(3)
(4)
信息增益計算公式
IG(X)=H(C)-H(C|T)
(5)
由式(5)可知,信息增益=信息熵條件熵,顯然某個特征項的信息增益值(Information gain value,IGV)越大,表示其貢獻(xiàn)越大,對模型分類也就越重要。因此在特征選擇時,選取信息增益值大的特征向量有益于分類結(jié)果。
在軟件缺陷預(yù)測的研究領(lǐng)域,數(shù)據(jù)集的不平衡問題非常常見。對于正常的軟件項目來說,有缺陷的模塊遠(yuǎn)比無缺陷的模塊要少,若直接使用原數(shù)據(jù)進(jìn)行實(shí)驗(yàn),會造成結(jié)果預(yù)測不準(zhǔn)確。面對這一問題,必須進(jìn)行數(shù)據(jù)類不平衡處理,在數(shù)據(jù)類不平衡處理中,有兩種常用的方法分別是,過采樣(Oversampling)[14]和欠采樣(Undersampling)[15]。過采樣是復(fù)制少數(shù)類,也就是復(fù)制有缺陷模塊的實(shí)例。欠采樣是減少多數(shù)類,也就是減少無缺陷模塊的實(shí)例。欠采樣可能會導(dǎo)致關(guān)鍵的數(shù)據(jù)丟失,模型無法很好的進(jìn)行學(xué)習(xí)。
在構(gòu)建學(xué)習(xí)器時,本文選用集成學(xué)習(xí)(Ensemble Learning,EL)[17]方法,EL目前廣泛用于分類和回歸任務(wù)。其基本思想是:使用不同的方法改變原始訓(xùn)練樣本的分布,從而構(gòu)建多個不同的分類器,也就是組合多個弱監(jiān)督模型以期望得到一個更好更全面的強(qiáng)監(jiān)督模型。潛在思想是,即便某一個弱分類器得到了錯誤的預(yù)測,其它的弱分類器也可以將錯誤糾正回來,也就是將這些分類器線性組合得到一個更強(qiáng)大的分類器,來做最后的決策,本文選用集成學(xué)習(xí)方法中的Stacking方法。
Stacking是一種集成學(xué)習(xí)的算法,也是一種重要的結(jié)合策略。Stacking第一次訓(xùn)練的模型叫做初級學(xué)習(xí)器,第二次訓(xùn)練的模型叫做次級學(xué)習(xí)器。Stacking把訓(xùn)練得到的初級學(xué)習(xí)器作為次級學(xué)習(xí)器的輸入,進(jìn)一步訓(xùn)練學(xué)習(xí)得到最后的預(yù)測結(jié)果。stacking的算法偽代碼如下:
輸入:訓(xùn)練集
D={(x1,y1),(x2,y2),…,(xm,ym)}
初級學(xué)習(xí)算法:ξ1,ξ2,…,ξT
次級學(xué)習(xí)算法:ξ
過程:
1)for t=1,2,…,T do
2)ht=ξt(D)
3)end for
4)D′=?
5)for i=1,2,…,m do
6)for t=1,2,…T do
7)Zit=ht(Xi);
8)end for
9)D′=D′∪((Zi1,Zi2,…,ZiT),yi);
10)end for
11)h′=ξ(D′)
輸出:H(x)=h′(h1(x),h2(x),…,hT(x))
由偽代碼可知:
1-3:訓(xùn)練出來個體學(xué)習(xí)器,也就是初級學(xué)習(xí)器;5-9:使用訓(xùn)練出來的初級學(xué)習(xí)器來得預(yù)測的結(jié)果,這個預(yù)測的結(jié)果當(dāng)做次級學(xué)習(xí)器的訓(xùn)練集;11:用初級學(xué)習(xí)器預(yù)測的結(jié)果訓(xùn)練出次級學(xué)習(xí)器,得到最后訓(xùn)練的模型。在算法集成上,本文使用了下面三種算法:
算法1:邏輯回歸(Logistic Regression,LG)[18]是一個廣泛使用的二分類算法,形式簡單,模型的可解釋性非常好、訓(xùn)練速度較快,分類的時候,計算量僅僅只和特征的數(shù)目相關(guān)、資源占用小,尤其是內(nèi)存,因?yàn)橹恍枰鎯Ω鱾€維度的特征值、方便輸出結(jié)果調(diào)整,邏輯回歸可以很方便的得到最后的分類結(jié)果。因此本文選用LG算法作為Stacking的初級學(xué)習(xí)器。
算法2:J48決策樹(J48 decision tree)算法[19],對決策樹采取了貪婪和自上而下的方法。該算法用于分類,根據(jù)訓(xùn)練數(shù)據(jù)集標(biāo)記新數(shù)據(jù)。決策樹歸納始于數(shù)據(jù)集(訓(xùn)練集),該數(shù)據(jù)集在每個節(jié)點(diǎn)處進(jìn)行分區(qū),從而導(dǎo)致分區(qū)較小,因此遵循遞歸的分而治之策略。因此本文選用J48算法作為Stacking的初級學(xué)習(xí)器。
算法3:樸素貝葉斯(Naive Bayesian,NB)[20]是使用最為廣泛的分類算法之一,在貝葉斯算法的基礎(chǔ)上進(jìn)行了相應(yīng)的簡化。NB的思想基礎(chǔ)可以這樣理解:對于給出的待分類項,求解此項出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認(rèn)為此待分類項屬于哪個類別。因此本文選用NB算法作為Stacking的次級學(xué)習(xí)器。
每一個樣本在進(jìn)行預(yù)測之后,可能會產(chǎn)生四種不同的預(yù)測結(jié)果??赡艿慕Y(jié)果用混淆矩陣定義如表1所示。
表1 混淆矩陣
四種可能的結(jié)果為:TP(True positive)、FN(False negative)、FP(False positive)和TN(True negative)。利用這四種結(jié)果可以得到:Accuracy、Precision、Recall、AUC、F-measure等評測指標(biāo),在本實(shí)驗(yàn)中使用的評測指標(biāo)有Accuracy、F-Measure和AUC(Area Under The Curve)。
Accuracy:表示模型的準(zhǔn)確率,準(zhǔn)確率是預(yù)測正確的結(jié)果占總樣本的百分比,公式如式(6)所示
(6)
F-Measure:在查準(zhǔn)率和召回率的基礎(chǔ)上定義 F-Measure 值,表示查準(zhǔn)率和召回率的加權(quán)調(diào)和平均,結(jié)合查準(zhǔn)率和召回率的結(jié)果,得出對軟件缺陷預(yù)測模型綜合性能更好的評價,公式如式(7)所示
(7)
AUC:為了權(quán)衡召回率和假陽率,在實(shí)驗(yàn)中采用ROC(receiver operating characteristic)曲線,ROC曲線是召回率和假陽率之間折中的一種圖形化方法。AUC值為 ROC 曲線下方的面積,面積越大,表示預(yù)測模型越好。
經(jīng)過對集成學(xué)習(xí)和軟件缺陷預(yù)測相關(guān)模型的學(xué)習(xí)和總結(jié),本實(shí)驗(yàn)將結(jié)合過采樣、特征選擇、Stacking集成學(xué)習(xí)構(gòu)建軟件缺陷預(yù)測模型,通過十折交叉驗(yàn)證驗(yàn)證模型的準(zhǔn)確性。實(shí)驗(yàn)過程主要分成兩個階段,分別是數(shù)據(jù)預(yù)處理、Stacking集成學(xué)習(xí)。
第一階段:數(shù)據(jù)預(yù)處理。在原始的NASA MDP數(shù)據(jù)集中,有缺陷的數(shù)據(jù)占總數(shù)據(jù)的比例從0.41%~19.32%,導(dǎo)致了數(shù)據(jù)的極度不平衡問題,這樣也會導(dǎo)致準(zhǔn)確度下降,為了解決這個問題,在本文中使用SMOTE進(jìn)行數(shù)據(jù)的不平衡處理。其次通過觀察特征值,發(fā)現(xiàn)存在無關(guān)特征和冗余特征,故使用信息增益來選擇優(yōu)質(zhì)特征。
第二階段:Stacking集成學(xué)習(xí)。在該算法中使用J48和LR作為實(shí)驗(yàn)的初級學(xué)習(xí)器,然后使用NB作為實(shí)驗(yàn)的次級學(xué)習(xí)器,組合得到一個更強(qiáng)大的分類器,來做最后的決策。
本文構(gòu)建的軟件缺陷預(yù)測模型如圖1所示。
圖1 模型流程圖
3.2.1 不平衡處理結(jié)果
原始數(shù)據(jù)集的特征見表2,本模型采用MDP中的8個數(shù)據(jù)子集分別是:CM1、JM1、KC3、MC1、MW1、PC2、PC4、PC5,經(jīng)過SMOTE進(jìn)行類不平衡處理后達(dá)到平衡,在本模型中h值設(shè)置為5,在表中缺陷率%字段四舍五入保留兩位小數(shù)。
表2 缺陷數(shù)據(jù)集
3.2.2 特征選擇結(jié)果
從四個維度進(jìn)行特征選擇,進(jìn)行實(shí)驗(yàn)對比,分別是:信息增益值靠前的15個特征、信息增益值靠前的20個特征、信息增益值大于等于0.15的特征、信息增益值大于等于0.20的特征。選擇特征最優(yōu)的前15和前20原因是,為和文獻(xiàn)[9]進(jìn)行對比;選擇IGV大于等于0.15或0.20的特征原因是,這部分特征IGV較小,和整體特征屬性相關(guān)性不大,在不破壞整體數(shù)據(jù)集的情況下,可以優(yōu)化數(shù)據(jù)集。經(jīng)過信息增益值(IGV)特征選擇之后的CM1、JM1、KC3、MC1、MW1、PC2、PC4和PC5的數(shù)據(jù)集,每一個特征的信息增益值都不同,使用Ranker降序排序。在表3中以PC4為例,顯示了PC4的屬性以及信息增益值(IGV),從表中可以看出不同屬性的IGV不同,在實(shí)驗(yàn)中使用以上所述的四個維度進(jìn)行特征選擇,和原始特征進(jìn)行對比,以確定最合適的特征優(yōu)選結(jié)果。
表3 PC4的屬性和信息增益值
3.3.1 模型性能評估
本實(shí)驗(yàn)中,在數(shù)據(jù)進(jìn)行預(yù)處理之后,使用Stacking集成學(xué)習(xí)構(gòu)建學(xué)習(xí)器。本模型選擇的是經(jīng)過類不平衡處理和特征選擇后的數(shù)據(jù)集CM1、JM1、KC3、MC1、MW1、PC2、PC4和PC5進(jìn)行實(shí)驗(yàn),綜合每個數(shù)據(jù)集在Accuracy、F-Measure和AUC評價指標(biāo)下,分別從原特征、IGV前15、IGV前20、IGV≥0.15和IGV≥0.20不同的特征選擇對實(shí)驗(yàn)結(jié)果的影響。實(shí)驗(yàn)結(jié)果如圖2所示。
圖2 不同特征選擇實(shí)驗(yàn)結(jié)果
為方便查看不同特征選擇對實(shí)驗(yàn)結(jié)果的影響,取實(shí)驗(yàn)的平均值進(jìn)行對比,如表4所示:
表4 評價指標(biāo)對比表
由表4可知,針對每種評價指標(biāo),數(shù)值最高的用加粗字體進(jìn)行標(biāo)注,因此可以清晰的看到,在特征選擇中,IGV≥0.20實(shí)驗(yàn)結(jié)果相對于其它四種特征選擇,在評價指標(biāo)Accuracy和F-measure中都有優(yōu)勢,在評價指標(biāo)AUC上雖然只比IGV≥0.15高,但是并不比其它的特征選擇低。因此整體上可以看出,IGV≥0.20實(shí)驗(yàn)的預(yù)測效果最好。
3.3.2 模型對比
通過文獻(xiàn)[9],可知四種模型均使用Stacking進(jìn)行實(shí)驗(yàn),分別是LG+NN、LG+NB、J48+NN和J48+NB,在這四種模型中,初級學(xué)習(xí)器和次級學(xué)習(xí)器均只使用一種算法,其中“+”前是初級學(xué)習(xí)器算法,“+”后是次級學(xué)習(xí)器。本文匯總了另外四種模型的評價指標(biāo)Accuracy、F-Measure和AUC并且和本模型進(jìn)行對比,匯總數(shù)據(jù)見表5所示。
表5 模型結(jié)果對比表
在上面表格中,每一類評價指標(biāo)的最大值用加粗字體進(jìn)行標(biāo)注??梢钥闯?本模型在評價指標(biāo)Accuracy、F-Measure和AUC中均大于其它模型。通過計算LG+NN、LG+NB、J48+NN和J48+NB評價指標(biāo)的平均值發(fā)現(xiàn),本模型在Accuracy平均提升4.65%、F-Measure平均提升5.25%和AUC平均提升11.3%。為了更加直觀對比不同模型的實(shí)驗(yàn)結(jié)果,繪制圖3折線圖:
圖3 不同模型結(jié)果對比圖
由圖3可可知,本模型的各項指標(biāo)均比LG+NN、LG+NB、J48+NN和J48+NB模型的實(shí)驗(yàn)效果要好。本文的主要貢獻(xiàn)包括:
1)通過分析對比得出最優(yōu)特征子集。
2)通過集成LG、J48和NB算法提高軟件缺陷模型的分類性能。
為了提高軟件缺陷預(yù)測的精確度,本文提出了基于特征優(yōu)選的軟件缺陷預(yù)測集成學(xué)習(xí)方法。通過Stacking集成不同的分類算法,在初級學(xué)習(xí)器上使用兩種分類算法進(jìn)行組合,相比于初級學(xué)習(xí)器只有一個分類算法的軟件缺陷預(yù)測模型,在評價指標(biāo)Accuracy、F-Measure和AUC上都有提升。因?yàn)?0%的缺陷在20%的模塊,所以導(dǎo)致缺陷模塊類不平衡問題,采用 SMOTE方法解決類不平衡問題;使用IG進(jìn)行特征優(yōu)選;最后對模型進(jìn)行十折交叉驗(yàn)證。本實(shí)驗(yàn)在此基礎(chǔ)上,提高了軟件缺陷預(yù)測性能,有利于對缺陷模塊進(jìn)行檢測。
下一步的研究工作包括:集成學(xué)習(xí)的類別有三種,分別是Boosting、Bagging和Stacking,本文預(yù)測模型是基于Stacking方法??梢赃M(jìn)一步研究Boosting和Bagging集成學(xué)習(xí),然后和Stacking做對比,以得出更加適合的軟件缺陷預(yù)測模型;本實(shí)驗(yàn)的Stacking集成學(xué)習(xí)中,初級學(xué)習(xí)器使用LG、J48,次級學(xué)習(xí)器使用NB??梢赃M(jìn)一步研究在初級學(xué)習(xí)器中使用其它算法組合或者是單個算法,次級學(xué)習(xí)器也用其它算法,以提升軟件缺陷的預(yù)測率。