徐海濤, 高 瑩, 蘇 娜
(杭州電子科技大學 計算機學院,浙江 杭州310018)
軟件缺陷預測是從軟件過去的缺陷記錄文件中提取代碼屬性并建立適當的模型來預測下一次發布中可能存在缺陷的組件。機器學習分類算法在近年內被廣泛使用,常用的有邏輯回歸、支持向量機(support vector machine,SVM)等。Shivaji S[1]研究發現不同的預處理或特征選擇算法與相同的分類算法結合會具有差異性的效果,單獨研究分類算法的意義不大,更重要的是結合預處理、特征提取等步驟。Hinton G E等人[2]于2006年提出的基于深度學習思想的自動編碼器(auto-encoder,AE)深層結構[3]在機器學習領域取得了巨大的成功,可以進行有效的學習和分類。
原始的軟件缺陷數據集的數據分布不平衡,其中有缺陷模塊數量遠少于無缺陷模塊,而對于作為少數類的有缺陷樣本的分析其實更為重要[4]。傳統的分類方法不能很好地應對數據集不平衡和特征冗余的情況,如SVM會偏向于學習多數類而忽略少數類。針對軟件缺陷數據普遍存在數據不平衡性嚴重,數據特征冗余的特點,本文提出的分類模型將數據預處理,特征選擇和分類算法結合來檢測軟件中具有缺陷的成分。為了彌補少數類樣本在數據分布方面不足的問題,首先通過Chawla N V等人[5]提出的SMOTE算法均衡原始數據集,再結合稀疏自編碼神經網絡訓練學習均衡化后的數據特征,訓練完成后將提取到的特征使用分類器分類。其中神經網絡的學習過程包括通過貪婪逐層訓練學習算法進行前向無監督訓練,和反向傳播 (back propagation,BP) 算法后向有監督微調整體網絡參數。實驗證明,本文組合分類模型通用性高,對于數據不平衡和特征冗余的數據集可以在盡量保留原始信息的前提下有效提高預測準確率,尤其改善了缺陷樣本作為少數類的分類效果。
稀疏自編碼(sparse auto-encoder,SAE)神經網絡在深度學習傳統模型自動編碼器的基礎上加入了稀疏性懲罰項,如圖1所示。優勢在于通過尋找某些基礎特征來更高效地表示樣本數據,即通過一組基向量的線性組合來表示輸入向量,且盡可能少的幾個基就可以表示輸入信號,可以在不丟失數據本質特征的基礎上盡量減少數據維度。在稀疏約束條件下學習相對稀疏簡明的數據特征,可以更好地表達輸入數據。

圖1 稀疏自編碼器
編碼過程最終需要得到優化的參數θ={W,b},可通過最小化SAE神經網絡的代價函數得到


SAE旨在找到比原始特征更適合分類任務的特征表示方式,但在誤差計算和傳遞的過程中,SAE網絡對于不同類別是平等對待的并沒有加以區分。在缺陷預測過程中,正常的樣本量一般遠多于有缺陷的樣本量,很容易造成缺陷漏報的現象。
針對軟件缺陷數據存在嚴重不平衡以及特征冗余的特性,提出一種結合SMOTE[5]和SAE神經網絡的優點的分類模型。將原始數據樣本作為SMOTE算法[6]的輸入,再將SMOTE算法的輸出作為SAE神經網絡的輸入,利用SAE神經網絡進行訓練學習和特征抽象,最后使用邏輯回歸算法作為最終分類器對提取到的特征進行分類。圖2為整個算法的模型表示,圖3為算法流程。算法具體步驟如下:
1)輸入原始數據集,選擇少數類樣本集Xmin={x1,…xi,…,xn}。
2)設置SMOTE算法參數:采樣率N,選取近鄰的個數k,對于每個xi合成少數類樣本yj=xi+rand(0,1)×(xi-xij)并加入到數據集中,得到新數據集Xnew。
3)隨機初始化網絡參數θ={W,b},其中W為網絡的權重,b為偏置;初始化懲罰系數β和稀疏性參數ρ;設置隱含層層數為l。
4)貪婪逐層訓練各隱含層:
a.第1層的輸入為步驟(2)的輸出Xnew;
b.第k層的輸出作為第k+1層的輸入;通過最小化代價函數JSAE(W,b)確定θk+1。
5)將稀疏懲罰系數置0,執行類似于步驟(4)的反向傳播算法過程微調整個網絡,更新參數。
6)利用訓練好的整個網絡,對測試數據特征壓縮降維。
7)使用邏輯分類器進行分類,返回Accuracy等結果。

圖2 算法模型

圖3 算法流程
實驗使用的是NASA軟件缺陷公共數據庫。該數據庫由若干個專門用于進行軟件屬性研究的數據集組成,每個數據集都代表NASA軟件系統或者子系統,其中包含了一些軟件模塊及相應的故障數據,這些模塊以靜態代碼度量(Bennin K E[7]和Kamei Y[8]等)作為特征,被轉換為數值化的樣例。當某軟件模塊存在一個或多個缺陷時,其樣本就被標記為正類,反之則為負類。

軟件缺陷預測[10]屬于偏斜類(skewed classes)問題,該問題表現為訓練集中有非常多的同一種類的樣例,只有很少或沒有其他類的樣例。而軟件缺陷預測中對于作為少數類的缺陷樣本的正確判斷意義更為重要,因此,需要使用更合適的度量來評價算法的性能:
1)準確率(accuracy):表示被準確預測的樣本在所有樣本中所占的比例,可表示為
式中FP,TP,FN,TN均為混淆矩陣參數,分別代表假正類、真正類、假負類和真負類。
2)F-score:在更全面地衡量預測算法性能的基礎上相對偏向于少數類的分類效果,可表示為

3)G-mean:少數類和多數類分類準確率的幾何平均值,可表示為
實驗設置SMOTE的近鄰個數k=5,采樣率N=5。SAE神經網絡設置為4層網絡結構,包括輸入層、2層隱含層、輸出層,輸入層節點數為各數據集屬性數。隨機初始化網絡參數θ={W,b},初始化懲罰系數β=3 和稀疏性參數ρ=0.05;第一隱層數量定在區間[15,20],第二隱含層數量定在區間[8,10],設置輸出層的節點個數為5。在訓練時采用L-BFGS算法進行優化,迭代次數為500次,實驗采取10折交叉驗證。
為了驗證本文提出的SMOTE+SAE網絡+LR(SSL)的分類模型的性能,還進行了先通過SAE進行特征提取,再由LR算法進行分類的實驗,其中神經網絡的參數設置不變。先使用主成分分析(principal component analysis,PCA)提取特征再用LR分類器分類的實驗中,提取的因子個數也設置為5,與SAE的輸出節點個數一致。此外還直接使用LR對未進行預處理的原始數據進行了分類。在各個數據集上的分類效果如表1所示。

表1 不同分類方法的評估指標對比
對比實驗結果可以發現,本文提出的SSL模型的分類效果比其他算法有所提高。對比傳統的特征提取和分類的方法,能更好地提煉數據的特征,尤其對于不平衡數據集中的少數類分類具有明顯優勢。在MC1 數據集上,分類精度有一定的提升,但是描述整體分類性能的G-mean指標變動不大。觀察原始數據集判斷是由于其不平衡率過高造成,SMOTE的采樣率為5時遠不足以均衡原始數據集,即過采樣后的新數據依然是有偏的,這使得對于少數類的分類效果未明顯提高。但對比其他算法的G-mean值可以判斷,本文提出的SSL分類模型在總體更優。
本文提出的SSL組合分類模型通過結合SMOTE采樣技術和SAE神經網絡的處理方法,可以有效提高分類器的分類性能,能夠更好地識別軟件缺陷。具體表現在:
1)對于作為有缺陷的樣本類作為少數類的分類精度有明顯提高;
2)相對傳統的特征提取方法,本模型在進行數據降維的同時更好地保留了其原始信息,更利于分類效果的提升;
3)模型通用性高,在屬性數量、樣本數量有很大差異的各個數據集上均有良好的表現。
通過實驗發現數據集屬性數量、樣本數量都可能對分類效果產生影響。此外如何針對不同的數據集選擇合適的過采樣率,對于不平衡率過高的數據集如何有效地合成少數類樣本等問題也值得進一步研究。