徐海濤, 高 瑩, 蘇 娜
(杭州電子科技大學(xué) 計(jì)算機(jī)學(xué)院,浙江 杭州310018)
軟件缺陷預(yù)測(cè)是從軟件過(guò)去的缺陷記錄文件中提取代碼屬性并建立適當(dāng)?shù)哪P蛠?lái)預(yù)測(cè)下一次發(fā)布中可能存在缺陷的組件。機(jī)器學(xué)習(xí)分類算法在近年內(nèi)被廣泛使用,常用的有邏輯回歸、支持向量機(jī)(support vector machine,SVM)等。Shivaji S[1]研究發(fā)現(xiàn)不同的預(yù)處理或特征選擇算法與相同的分類算法結(jié)合會(huì)具有差異性的效果,單獨(dú)研究分類算法的意義不大,更重要的是結(jié)合預(yù)處理、特征提取等步驟。Hinton G E等人[2]于2006年提出的基于深度學(xué)習(xí)思想的自動(dòng)編碼器(auto-encoder,AE)深層結(jié)構(gòu)[3]在機(jī)器學(xué)習(xí)領(lǐng)域取得了巨大的成功,可以進(jìn)行有效的學(xué)習(xí)和分類。
原始的軟件缺陷數(shù)據(jù)集的數(shù)據(jù)分布不平衡,其中有缺陷模塊數(shù)量遠(yuǎn)少于無(wú)缺陷模塊,而對(duì)于作為少數(shù)類的有缺陷樣本的分析其實(shí)更為重要[4]。傳統(tǒng)的分類方法不能很好地應(yīng)對(duì)數(shù)據(jù)集不平衡和特征冗余的情況,如SVM會(huì)偏向于學(xué)習(xí)多數(shù)類而忽略少數(shù)類。針對(duì)軟件缺陷數(shù)據(jù)普遍存在數(shù)據(jù)不平衡性嚴(yán)重,數(shù)據(jù)特征冗余的特點(diǎn),本文提出的分類模型將數(shù)據(jù)預(yù)處理,特征選擇和分類算法結(jié)合來(lái)檢測(cè)軟件中具有缺陷的成分。為了彌補(bǔ)少數(shù)類樣本在數(shù)據(jù)分布方面不足的問(wèn)題,首先通過(guò)Chawla N V等人[5]提出的SMOTE算法均衡原始數(shù)據(jù)集,再結(jié)合稀疏自編碼神經(jīng)網(wǎng)絡(luò)訓(xùn)練學(xué)習(xí)均衡化后的數(shù)據(jù)特征,訓(xùn)練完成后將提取到的特征使用分類器分類。其中神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程包括通過(guò)貪婪逐層訓(xùn)練學(xué)習(xí)算法進(jìn)行前向無(wú)監(jiān)督訓(xùn)練,和反向傳播 (back propagation,BP) 算法后向有監(jiān)督微調(diào)整體網(wǎng)絡(luò)參數(shù)。實(shí)驗(yàn)證明,本文組合分類模型通用性高,對(duì)于數(shù)據(jù)不平衡和特征冗余的數(shù)據(jù)集可以在盡量保留原始信息的前提下有效提高預(yù)測(cè)準(zhǔn)確率,尤其改善了缺陷樣本作為少數(shù)類的分類效果。
稀疏自編碼(sparse auto-encoder,SAE)神經(jīng)網(wǎng)絡(luò)在深度學(xué)習(xí)傳統(tǒng)模型自動(dòng)編碼器的基礎(chǔ)上加入了稀疏性懲罰項(xiàng),如圖1所示。優(yōu)勢(shì)在于通過(guò)尋找某些基礎(chǔ)特征來(lái)更高效地表示樣本數(shù)據(jù),即通過(guò)一組基向量的線性組合來(lái)表示輸入向量,且盡可能少的幾個(gè)基就可以表示輸入信號(hào),可以在不丟失數(shù)據(jù)本質(zhì)特征的基礎(chǔ)上盡量減少數(shù)據(jù)維度。在稀疏約束條件下學(xué)習(xí)相對(duì)稀疏簡(jiǎn)明的數(shù)據(jù)特征,可以更好地表達(dá)輸入數(shù)據(jù)。
圖1 稀疏自編碼器
編碼過(guò)程最終需要得到優(yōu)化的參數(shù)θ={W,b},可通過(guò)最小化SAE神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù)得到
SAE旨在找到比原始特征更適合分類任務(wù)的特征表示方式,但在誤差計(jì)算和傳遞的過(guò)程中,SAE網(wǎng)絡(luò)對(duì)于不同類別是平等對(duì)待的并沒(méi)有加以區(qū)分。在缺陷預(yù)測(cè)過(guò)程中,正常的樣本量一般遠(yuǎn)多于有缺陷的樣本量,很容易造成缺陷漏報(bào)的現(xiàn)象。
針對(duì)軟件缺陷數(shù)據(jù)存在嚴(yán)重不平衡以及特征冗余的特性,提出一種結(jié)合SMOTE[5]和SAE神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)的分類模型。將原始數(shù)據(jù)樣本作為SMOTE算法[6]的輸入,再將SMOTE算法的輸出作為SAE神經(jīng)網(wǎng)絡(luò)的輸入,利用SAE神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練學(xué)習(xí)和特征抽象,最后使用邏輯回歸算法作為最終分類器對(duì)提取到的特征進(jìn)行分類。圖2為整個(gè)算法的模型表示,圖3為算法流程。算法具體步驟如下:
1)輸入原始數(shù)據(jù)集,選擇少數(shù)類樣本集Xmin={x1,…xi,…,xn}。
2)設(shè)置SMOTE算法參數(shù):采樣率N,選取近鄰的個(gè)數(shù)k,對(duì)于每個(gè)xi合成少數(shù)類樣本yj=xi+rand(0,1)×(xi-xij)并加入到數(shù)據(jù)集中,得到新數(shù)據(jù)集Xnew。
3)隨機(jī)初始化網(wǎng)絡(luò)參數(shù)θ={W,b},其中W為網(wǎng)絡(luò)的權(quán)重,b為偏置;初始化懲罰系數(shù)β和稀疏性參數(shù)ρ;設(shè)置隱含層層數(shù)為l。
4)貪婪逐層訓(xùn)練各隱含層:
a.第1層的輸入為步驟(2)的輸出Xnew;
b.第k層的輸出作為第k+1層的輸入;通過(guò)最小化代價(jià)函數(shù)JSAE(W,b)確定θk+1。
5)將稀疏懲罰系數(shù)置0,執(zhí)行類似于步驟(4)的反向傳播算法過(guò)程微調(diào)整個(gè)網(wǎng)絡(luò),更新參數(shù)。
6)利用訓(xùn)練好的整個(gè)網(wǎng)絡(luò),對(duì)測(cè)試數(shù)據(jù)特征壓縮降維。
7)使用邏輯分類器進(jìn)行分類,返回Accuracy等結(jié)果。
圖2 算法模型
圖3 算法流程
實(shí)驗(yàn)使用的是NASA軟件缺陷公共數(shù)據(jù)庫(kù)。該數(shù)據(jù)庫(kù)由若干個(gè)專門用于進(jìn)行軟件屬性研究的數(shù)據(jù)集組成,每個(gè)數(shù)據(jù)集都代表NASA軟件系統(tǒng)或者子系統(tǒng),其中包含了一些軟件模塊及相應(yīng)的故障數(shù)據(jù),這些模塊以靜態(tài)代碼度量(Bennin K E[7]和Kamei Y[8]等)作為特征,被轉(zhuǎn)換為數(shù)值化的樣例。當(dāng)某軟件模塊存在一個(gè)或多個(gè)缺陷時(shí),其樣本就被標(biāo)記為正類,反之則為負(fù)類。
軟件缺陷預(yù)測(cè)[10]屬于偏斜類(skewed classes)問(wèn)題,該問(wèn)題表現(xiàn)為訓(xùn)練集中有非常多的同一種類的樣例,只有很少或沒(méi)有其他類的樣例。而軟件缺陷預(yù)測(cè)中對(duì)于作為少數(shù)類的缺陷樣本的正確判斷意義更為重要,因此,需要使用更合適的度量來(lái)評(píng)價(jià)算法的性能:
1)準(zhǔn)確率(accuracy):表示被準(zhǔn)確預(yù)測(cè)的樣本在所有樣本中所占的比例,可表示為
式中FP,TP,F(xiàn)N,TN均為混淆矩陣參數(shù),分別代表假正類、真正類、假負(fù)類和真負(fù)類。
2)F-score:在更全面地衡量預(yù)測(cè)算法性能的基礎(chǔ)上相對(duì)偏向于少數(shù)類的分類效果,可表示為
3)G-mean:少數(shù)類和多數(shù)類分類準(zhǔn)確率的幾何平均值,可表示為
實(shí)驗(yàn)設(shè)置SMOTE的近鄰個(gè)數(shù)k=5,采樣率N=5。SAE神經(jīng)網(wǎng)絡(luò)設(shè)置為4層網(wǎng)絡(luò)結(jié)構(gòu),包括輸入層、2層隱含層、輸出層,輸入層節(jié)點(diǎn)數(shù)為各數(shù)據(jù)集屬性數(shù)。隨機(jī)初始化網(wǎng)絡(luò)參數(shù)θ={W,b},初始化懲罰系數(shù)β=3 和稀疏性參數(shù)ρ=0.05;第一隱層數(shù)量定在區(qū)間[15,20],第二隱含層數(shù)量定在區(qū)間[8,10],設(shè)置輸出層的節(jié)點(diǎn)個(gè)數(shù)為5。在訓(xùn)練時(shí)采用L-BFGS算法進(jìn)行優(yōu)化,迭代次數(shù)為500次,實(shí)驗(yàn)采取10折交叉驗(yàn)證。
為了驗(yàn)證本文提出的SMOTE+SAE網(wǎng)絡(luò)+LR(SSL)的分類模型的性能,還進(jìn)行了先通過(guò)SAE進(jìn)行特征提取,再由LR算法進(jìn)行分類的實(shí)驗(yàn),其中神經(jīng)網(wǎng)絡(luò)的參數(shù)設(shè)置不變。先使用主成分分析(principal component analysis,PCA)提取特征再用LR分類器分類的實(shí)驗(yàn)中,提取的因子個(gè)數(shù)也設(shè)置為5,與SAE的輸出節(jié)點(diǎn)個(gè)數(shù)一致。此外還直接使用LR對(duì)未進(jìn)行預(yù)處理的原始數(shù)據(jù)進(jìn)行了分類。在各個(gè)數(shù)據(jù)集上的分類效果如表1所示。
表1 不同分類方法的評(píng)估指標(biāo)對(duì)比
對(duì)比實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn),本文提出的SSL模型的分類效果比其他算法有所提高。對(duì)比傳統(tǒng)的特征提取和分類的方法,能更好地提煉數(shù)據(jù)的特征,尤其對(duì)于不平衡數(shù)據(jù)集中的少數(shù)類分類具有明顯優(yōu)勢(shì)。在MC1 數(shù)據(jù)集上,分類精度有一定的提升,但是描述整體分類性能的G-mean指標(biāo)變動(dòng)不大。觀察原始數(shù)據(jù)集判斷是由于其不平衡率過(guò)高造成,SMOTE的采樣率為5時(shí)遠(yuǎn)不足以均衡原始數(shù)據(jù)集,即過(guò)采樣后的新數(shù)據(jù)依然是有偏的,這使得對(duì)于少數(shù)類的分類效果未明顯提高。但對(duì)比其他算法的G-mean值可以判斷,本文提出的SSL分類模型在總體更優(yōu)。
本文提出的SSL組合分類模型通過(guò)結(jié)合SMOTE采樣技術(shù)和SAE神經(jīng)網(wǎng)絡(luò)的處理方法,可以有效提高分類器的分類性能,能夠更好地識(shí)別軟件缺陷。具體表現(xiàn)在:
1)對(duì)于作為有缺陷的樣本類作為少數(shù)類的分類精度有明顯提高;
2)相對(duì)傳統(tǒng)的特征提取方法,本模型在進(jìn)行數(shù)據(jù)降維的同時(shí)更好地保留了其原始信息,更利于分類效果的提升;
3)模型通用性高,在屬性數(shù)量、樣本數(shù)量有很大差異的各個(gè)數(shù)據(jù)集上均有良好的表現(xiàn)。
通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)數(shù)據(jù)集屬性數(shù)量、樣本數(shù)量都可能對(duì)分類效果產(chǎn)生影響。此外如何針對(duì)不同的數(shù)據(jù)集選擇合適的過(guò)采樣率,對(duì)于不平衡率過(guò)高的數(shù)據(jù)集如何有效地合成少數(shù)類樣本等問(wèn)題也值得進(jìn)一步研究。