陸子豪,荊曉遠
(1.南京郵電大學 計算機學院,江蘇 南京 210003;2.南京郵電大學 自動化學院,江蘇 南京 210003)
軟件缺陷預測是當下軟件工程領域最熱門的研究主題之一。它吸引了眾多專家學者的目光。靜態(tài)軟件缺陷預測主要是通過機器學習的方法對已提取的軟件特征進行學習從而訓練出一個可靠的分類模型就軟件項目是否有缺陷進行分類[1-5]。近幾年很多知名的分類方法被提出來,包括決策樹、樸素貝葉斯(NB)[6]、支持向量機(SVM)[7]、神經(jīng)網(wǎng)絡[8]、集成學習等[9]。這些方法均已被應用在軟件缺陷預測領域。研究人員對項目樣本進行標記通常需要耗費大量的時間和精力,所以在實際應用中難獲得充足的有標記樣本來訓練可靠的預測模型。為解決這一問題,半監(jiān)督學習[10]被引入到軟件缺陷預測中,并被大量學者研究。此外項目數(shù)據(jù)的類不平衡問題[11]也一直困擾著研究者,使用類不平衡的數(shù)據(jù)訓練得到的預測模型不能很好地對少數(shù)類樣本進行分類,嚴重影響預測性能。
另一方面現(xiàn)有的缺陷預測方法大多需要通過多次迭代調整神經(jīng)網(wǎng)絡參數(shù)來構筑最終的預測模型,此類方法時間開銷比較大。2006年Huang等人[12]提出了一種基于單層前饋神經(jīng)網(wǎng)絡的機器學習方法,該方法具有訓練速度快、泛化能力強的優(yōu)點。該方法近幾年也被應用到了軟件缺陷預測領域。后續(xù)Huang等人[13]又提出了半監(jiān)督極限學習機并取得了不錯的效果。雖然半監(jiān)督極限學習機具有泛化性強、魯棒性高、訓練速度快等優(yōu)點,但是由于其網(wǎng)絡結構限制,不能獲得很好的特征表示。因此文中引入棧式去噪自編碼器[14]改進特征學習效果。文中提出了一種基于改進SMOTE[15]的半監(jiān)督極限學習機的方法用于軟件缺陷預測。該方法使用K-means和SMOTE綜合過采樣有效緩解了訓練樣本類不平衡對分類效果的影響。使用半監(jiān)督極限學習機充分利用少量有標記樣本和大量無標記樣本來解決有標記樣本不充足的問題,并且一定程度上彌補了極限學習機特征學習上的不足。
軟件缺陷預測可以無需人為干預地對那些有缺陷可能性的軟件模塊進行判定。在有標記樣本不充足的背景下,為了充分利用少量的有標記樣本和大量的無標記樣本,研究人員提出了一些半監(jiān)督學習方法。例如:Lu等人提出了基于適應性過擬合(FTF)[16]的半監(jiān)督算法。Catal等人分析了四種半監(jiān)督分類算法,他們指出當有缺陷的樣本有限時推薦使用LDS[10]來進行缺陷預測。Ma等人針對缺陷預測中存在的類不平衡問題提出了一種RusTri[17]方法,對原始訓練樣本進行下采樣處理并在三重訓練算法的每一輪訓練中更新訓練集。Thung等人提出了一種主動半監(jiān)督缺陷預測方法ASDP[18],ASDP會主動選擇一小部分多樣且有用的缺陷樣本進行標記,并在預測模型學習中充分利用標記和未標記的樣本。在軟件缺陷預測的實際應用中,經(jīng)常遇到數(shù)據(jù)分布不均衡的問題。專家學者為了從數(shù)據(jù)層面解決這個問題,提出了SMOT算法。該算法的核心思想是復制若干少數(shù)類樣本以讓少數(shù)類樣本的數(shù)量和多數(shù)類樣本數(shù)量相當,從而緩解不平衡問題。文中使用了基于SMOTE的改進方法。
文中提出的方法主要分為兩大步驟:首先使用基于K-means和SMOTE的綜合過采樣方法對原始數(shù)據(jù)集進行處理以緩解數(shù)據(jù)集原有的類不平衡問題,然后使用半監(jiān)督棧式去噪自編碼器極限學習機為數(shù)據(jù)集構建模型并對測試集分類。
此階段主要分為三步。
第一步:先對訓練集數(shù)據(jù)進行K-means(K均值)聚類。這是一種主流的迭代方法,可用來查找歐幾里得空間中出現(xiàn)的數(shù)據(jù)中的自然存在的簇。它主要通過不斷重復兩條指令來運行:首先將樣本分配給k個質心中距該樣本最近的那個質心(初始化時會隨機指定k個質心)。其次重新計算質心位置。如果新的質心和上一輪產(chǎn)生質心間距離變化小于某閾值則表示算法收斂。該算法可以保證在有限次迭代運算后收斂得到局部最優(yōu)解。
第三步:過采樣,在過濾后的簇中使用SMOTE過采樣。每個簇需要生成的樣本個數(shù)為[sampling weight(f)×n],其中n為達到完全平衡時生成的少數(shù)類樣本個數(shù)。接著,SMOTE在簇中隨機選擇一個少數(shù)類樣本a并尋找距離a最近的另一個少數(shù)類樣本b。然后在a到b的路徑上隨機安插生成的新樣本。不斷重復一至三步直至生成完n個樣本。
文中的半監(jiān)督極限學習機利用了流行正則化,在缺少有標記樣本時利用無標記樣本來提高分類的準確性。給出的目標函數(shù)見公式(1):
(1)
其中,β是輸出權重,Ci是懲罰因子,用來調整模型的預測性能和泛化能力,ei是第i個樣本的輸出結果與預期結果之差;L∈R(l+u)×(l+u)是利用有標記樣本和無標記樣本構建的拉普拉斯算子,另外F∈R(l+u)×n0是網(wǎng)絡的輸出矩陣且它的第i行等于f(xi),λ是一個權衡參數(shù),h(xi)是隱藏層的輸出向量。
(2)
然后,公式(3)計算目標函數(shù)關于β的梯度。
(3)
最后令梯度為0,使用公式(4)求得β的解。
(4)
如果有標記樣本的數(shù)量少于隱藏層神經(jīng)元的個數(shù),則使用公式(5)計算求解β。
(5)
其中,Il+u是維度為l+u的單位矩陣。
算法流程如圖1所示。
圖1 算法流程
本節(jié)將提出的方法與LDS、RusTri和ASDP這三個基線方法進行對比。
使用了AEEEM和NASA兩個數(shù)據(jù)集。數(shù)據(jù)集的詳細信息如表1所示。
表1 數(shù)據(jù)集
使用F-measure和AUC兩個綜合評價指標(表2定義了混淆矩陣)。
表2 混淆矩陣
準確率代表的是所有被判定為無缺陷的模塊中實際上無缺陷的模塊所占的比例。
召回率代表的是被正確判定為無缺陷的樣本在所有實際無缺陷樣本中占的比例。
準確率和召回率不能單獨地充分反映模型的性能,因此使用F-measure作為綜合評判標準。
依據(jù)上述混淆矩陣,預測率(PD)定義為:PD=TP/(TP+FN);誤報率(PF)定義為:PF=FP/(FP+TN)。使用PD和PF可繪制ROC曲線。AUC(area under roc curve)是ROC曲線與坐標軸圍成的面積。預測模型性能越好,面積越接近1。
在NASA和AEEEM數(shù)據(jù)集上的實驗結果如表3和表4所示??梢杂^察到,與基線方法相比,文中方法獲得了更高的AUC和F-measure。另外文中方法在AUC和F-measure的平均值上也高于基線方法。統(tǒng)一測試分析如表5所示,可以看出文中方法相比基線方法在大多數(shù)項目中預測效果提升明顯。
表3 AUC結果匯總
表4 F-measure結果匯總
表5 文中方法優(yōu)于/持平/劣于基準方法的項目個數(shù)
提出了一種基于改進SMOTE的不平衡處理方法和搭載棧式去噪自動編碼器半監(jiān)督學習機的軟件缺陷預測模型,有效緩解了不平衡問題并且充分利用了無標記數(shù)據(jù)。通過在AEEEM和NASA兩個數(shù)據(jù)集上的大量實驗表明,與基線方法相比,文中方法獲得了更好的預測性能。后續(xù)將會對半監(jiān)督極限學習機進行改進,以進一步提升預測精度和模型訓練效率。