張洋洋,荊曉遠,吳 飛
(南京郵電大學 自動化學院,江蘇 南京 210003)
跨公司軟件缺陷預測問題不同于傳統(tǒng)的機器學習問題,它的訓練數(shù)據和測試數(shù)據屬于不同的分布。為了解決這個問題,目前有許多不同的方法,Turhan等[1]使用一種最近鄰濾波器從源數(shù)據中選擇與測試數(shù)據相似的數(shù)據作為訓練數(shù)據。Zimmermann等[2]使用決策樹幫助項目管理者進行跨工程預測前對精確度、召回率和準確度進行估計。
Jiang等[3]認為,與樣本類別高度相關的那些特征應該在訓練得到的模型中被賦予更高的權重,因而提出了一種兩階段的特征選擇框架。Dai等[4]提出了一種基于聯(lián)合聚類的預測領域外文檔的分類方法CoCC,該方法通過對類別和特征進行同步聚類,實現(xiàn)知識與類別的遷移。還有一種方法[5]通過最小化源數(shù)據樣本和目標數(shù)據樣本在隱性語義的差距,從而求解降維后的特征空間,在該隱性空間上,不同的領域具有有限相同或者非常接近的均勻分布,因此就可以直接利用監(jiān)督學習算法訓練模型對目標領域數(shù)據進行預測。Jing等[6]提出一種基于字典學習的軟件缺陷預測方法,能夠高效地預測項目內缺陷分布。
軟件缺陷預測主要根據軟件的基本屬性(如程序代碼行數(shù),體積,軟件復雜度等各種信息數(shù)據)和已經發(fā)現(xiàn)的缺陷等數(shù)據借助于機器學習、統(tǒng)計學習等技術進行挖掘和分析,進而預測出軟件系統(tǒng)中可能遺留而且尚未被發(fā)現(xiàn)的情況[7-9]。
與普通軟件缺陷預測算法不同,跨項目軟件缺陷預測中的訓練數(shù)據和測試數(shù)據屬于不同的分布。為了解決這個問題,Turhan等提出了一種最近鄰濾波器算法從源數(shù)據中選擇相似的樣本用于訓練。Zimmermann等考察了使用決策樹時不同特征對缺陷預測質量的影響。Liu等[10]提出在多個數(shù)據庫上基于搜索方法進行軟件缺陷預測。與基于非搜索的模型比較,他們的方法具有較低的錯誤分類代價。Ma等[11]基于目標數(shù)據樣本的特征信息對源數(shù)據特征設置權重,提出了一種基于樸素貝葉斯的跨公司軟件缺陷預測模型。
文中提出一種聯(lián)合適配分布算法,通過一個特征映射T使特征x和標簽y的期望在訓練數(shù)據和測試數(shù)據之間相匹配:
‖EPx(x)[T(x)]-EPt(t)[T(t)]‖2+
‖EQx(y|x)[y|T(x)]-EQt(y|t)[y|T(t)]‖2
(1)
因為沒有帶有標簽的測試,所以條件概率Qt(y|t)不能明確地計算出來。最佳的估計就是假設Qt(y|t)≈Qx(y|t),這樣就可以通過使用一個分類器在有標簽的訓練集上訓練出分類器f作用在無標簽的測試集上。
(2)
其中,tr()表示矩陣的跡。并且這個優(yōu)化問題可以很好地使用特征分解:XHXTA=AΦ,Φ=diag(φ1,φ2,…,φk)∈Rk×k是前k個最大的特征值。然后得到最優(yōu)的k維的特征表示:Z=[z1,z2,…,za]=ATX。
然而,通過PCA方法將數(shù)據降維后,訓練數(shù)據和測試數(shù)據之間分布的差異依然很大。因此主要的問題是通過一定的度量方式來降低兩個分布Px(x)和Pt(t)之間的距離。采用文獻[12]提出的Maximum Mean作為距離度量方法,計算訓練數(shù)據樣本和測試數(shù)據樣本之間的均值之差:
(3)
其中,M0是MMD矩陣,可以通過式4計算:
(4)
通過最小化式3即是最大化式2,然后訓練數(shù)據和測試數(shù)據經過Z=ATX的轉換后,兩種分布之間的距離變近了。這個方法其實就是TCA[13]。
更進一步,參照文獻[14],最小化條件分布Qx(y|x)和Qt(y|t)也是一個很重要的方面。遺憾的是,由于在測試數(shù)據集中沒有標簽,所以就無法對Qt(y|t)進行直接建模。由于先驗概率Qx(y|x)和Qt(y|t)之間聯(lián)系緊密,轉而去探索用類條件概率分布Qx(x|y)和Qt(t|y)來代替?,F(xiàn)在由于具備了真實的訓練數(shù)據標簽和偽測試數(shù)據標簽,可以匹配類條件概率分布Qx(x|y=c)和Qt(t|y=c),其中c屬于類標簽的集合。通過修改MMD來度量兩種條件分布之間的距離:
(5)
其中,L(c)={xi:xi∈L∧y(xi)=c}表示在訓練數(shù)據中屬于類別c的樣本點,y(xi)是它對應的標簽。
測試數(shù)據中使用的偽標簽不是正確的,我們仍然可以借用它們來匹配條件概率分布。理論參考是使用充分統(tǒng)計量代替密度估計。
整合前面兩個優(yōu)化的問題,可以得到最終的目標函數(shù):
(6)
其中,λ是一個正則化參數(shù)。
對于非線性問題,考慮核映射ψ:x→ψ(x)與核矩陣K=ψ(x)Tψ(x)∈Ra×a。
上述優(yōu)化問題轉化為:
(7)
通過約束優(yōu)化理論,使用Φ=diag(φ1,φ2,…,φk)∈Rk×k代表拉格朗日乘子,然后推導出問題7的拉格朗日函數(shù)為:
ATXHXTA)Φ]
(8)
(9)
最終,求解最優(yōu)適配矩陣A的問題轉化為求等式9的最小k個特征向量。
整個算法的學習過程總結如下:
(1)通過式4構造MMD矩陣。
(2)重復:求解式9所描述的特征分解問題,然后選擇前k個最小的特征向量來構造適配矩陣A,在新的特征表示上訓練出一個標準的分類器f來更新偽測試數(shù)據標簽。根據式6的構造MMD矩陣M。直到收斂。
(3)返回在新的特征表示上訓練得到的分類器f。
將提出的JDBFM算法與文獻[11]提出的TNB算法、文獻[1]提出的NN-filter算法進行對比,依據軟件缺陷預測常用的性能指標召回率(recall)、精確度(precision)、假陽率(pf)以及F-measure對算法進行評價。
文中采用召回率、精確度和F-measure值評估模型的預測效果。由于高的召回率往往要以低精確度為代價,反之亦然。因此,可以使用F-measure將召回率和精確度綜合起來進行評價。F-measure為召回率和查準率的調和平均數(shù),值越高性能越好,其計算公式如下:
(10)
對于NN-filter算法,每個測試數(shù)據都要從訓練數(shù)據中選擇k個最近鄰的樣本構成訓練數(shù)據集來訓練軟件缺陷預測模型,與文獻[11]保持一致,文中也選取k=10。
文中提出的算法JDBFM中有兩個參數(shù)需要設置:子空間基數(shù)k和正則項系數(shù)λ(λ=2.0),在下列的數(shù)據集上的實驗中證實了在一個很大的參數(shù)的范圍內可以得到一個相對穩(wěn)定的結果。實驗結果如圖1和圖2所示。
Train→testNN-filterTNBJDBFMZXing→Safe0.466 60.526 30.456 5ZXing→Apache0.511 10.544 90.475 6Safe→ZXing0.328 50.297 20.526 3Safe→Apache0.477 10.557 50.652 2Apache→ZXing0.360 10.409 00.573 0Apache→Safe0.669 20.692 30.718 8Average0.468 70.504 50.600 1
圖1 ReLink數(shù)據庫實驗結果
圖2 AEEEM數(shù)據庫實驗結果
通過以上實驗結果可以看出,NN-filter算法所獲得的實驗結果F-measure值較TNB和JDBFM算法都要低一些。而提出的JDBFM算法考慮了目標數(shù)據和源數(shù)據之間的分布和條件分布,效果要比以上兩種算法好。實驗結果也證明了JDBFM算法的優(yōu)越性。
在缺陷預測模型中,訓練數(shù)據和測試數(shù)據分別來源于不同的工程,訓練數(shù)據是有標簽的,而測試數(shù)據是沒有標簽的,并且源數(shù)據和測試數(shù)據來源于不同的分布。提出的算法JDBFM能夠很大限度地利用跨項目數(shù)據信息。通過在現(xiàn)有兩份數(shù)據庫上的實驗,證明了該算法能顯著提高跨項目軟件缺陷預測的性能。