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