張 瑩 朱麗娜
(1.淮北理工學(xué)院電子與信息工程學(xué)院 淮北 235000)(2.淮北師范大學(xué)物理與電子信息學(xué)院 淮北 235000)(3.廣西財經(jīng)學(xué)院信息與統(tǒng)計學(xué)院 南寧 530003)
近年來,隨著信息化技術(shù)的高速發(fā)展,軟件產(chǎn)品的數(shù)量急劇增加,在為生活帶來便利的同時,由于種種原因都可能產(chǎn)生軟件缺陷。軟件內(nèi)部隱藏的缺陷可能導(dǎo)致輕則無法滿足用戶的需求,重則嚴重影響軟件質(zhì)量造成經(jīng)濟損失,甚至?xí)<暗饺藗兊纳踩?。對軟件中包含的缺陷進行預(yù)測,開發(fā)人員可以基于預(yù)測結(jié)果分配有限的資源,以緩解開發(fā)過程中軟件測試的壓力,從而提高軟件質(zhì)量。
軟件缺陷預(yù)測數(shù)據(jù)普遍存在著類不平衡的問題,常常造成預(yù)測結(jié)果偏向多數(shù)類,對少數(shù)類的預(yù)測精度降低。數(shù)據(jù)不平衡會導(dǎo)致預(yù)測模型的誤分類代價較高、模型的泛化能力較差。因此,在軟件缺陷預(yù)測中,需要重點考慮如何在一個不平衡的數(shù)據(jù)集中訓(xùn)練出一個更合適的分類模型,從而提高小樣本的預(yù)測精度。
針對標(biāo)簽樣本不足,可以運用半監(jiān)督學(xué)習(xí)的思想充實樣本集。廖勝平等[1]基于半監(jiān)督學(xué)習(xí)與SVM 構(gòu)建預(yù)測模型,在訓(xùn)練集數(shù)據(jù)較少、無歷史數(shù)據(jù)或者標(biāo)簽信息較少時都能獲得較好的預(yù)測性能。Li等[2]提出一種名為EATT 的半監(jiān)督缺陷預(yù)測模型,結(jié)果表明該模型不僅可以獲得較高的分類精度,還具有很高的實用價值。
針對數(shù)據(jù)的特征冗余,目前已有很多特征處理的方法可供選擇,蔣帥[3]在實驗中選擇更具有判別性和規(guī)律性的特征,移除無關(guān)特征,具有較好的預(yù)測效果和較高的應(yīng)用價值。張俐等[4]提出WMRI特征選擇算法改善特征子集的質(zhì)量并提高分類精度。
針對類不平衡問題,大多數(shù)人會選擇簡單有效的數(shù)據(jù)重采樣。Malhotra等[5]通過改進SPIDER2過采樣方法提出了SPIDER3,同時還發(fā)現(xiàn)了在不平衡數(shù)據(jù)集中利用過采樣方法可提高機器學(xué)習(xí)分類器的缺陷預(yù)測性能。其次,也會選擇集成學(xué)習(xí)和代價敏感學(xué)習(xí)方法。如王鐵建等[6]提出基于SSEL 的軟件缺陷預(yù)測方法,預(yù)測效果良好。還有典型的代價敏感決策樹算法—ICET方法[7]。
為了構(gòu)建更高性能的預(yù)測模型,人們將分類思想相互結(jié)合形成綜合方案。例如Iqbal 等[8]提出一種基于特征選擇的集成分類框架,該框架的性能優(yōu)于其他分類技術(shù),但無法解決類不平衡問題。Zhou等[9]結(jié)合核心主成分分析(KPCA)和加權(quán)極限學(xué)習(xí)機(WELM)提出了名為KPWE 的缺陷預(yù)測框架。類似還有結(jié)合多核學(xué)習(xí)的Boosting 集成方法[10]、通過平衡訓(xùn)練集后使用NB算法得到映射子集最終集成的方法[11]、基于混合采樣和三種基分類器集成的SSIDP算法[12]等。
綜上,人們都會在數(shù)據(jù)的預(yù)處理階段進行數(shù)據(jù)的重采樣或特征處理,也會結(jié)合不同的分類思想來構(gòu)建模型,但將半監(jiān)督學(xué)習(xí)、數(shù)據(jù)重采樣、特征選擇和集成學(xué)習(xí)綜合使用的研究卻很少。針對上述軟件缺陷預(yù)測中可能存在的若干問題,本文重點關(guān)注類不平衡和特征冗余問題,借鑒目前較成熟的方法并對其綜合考慮,提出一種改進的軟件缺陷預(yù)測方法。
改進的軟件缺陷預(yù)測方法如圖1 所示。首先,對訓(xùn)練集進行混合采樣以獲取一個相對平衡的訓(xùn)練集;然后,對采樣后的訓(xùn)練集和測試集進行SMA特征選擇選取效果最優(yōu)的若干特征,以降低數(shù)據(jù)的特征冗余;最后,使用改進的半監(jiān)督Adaboost 算法進行集成,得到最終的預(yù)測結(jié)果。
軟件缺陷預(yù)測中的數(shù)據(jù)在分布方面很不平衡,大多數(shù)都是沒有缺陷的模塊。處理不平衡數(shù)據(jù)最直觀有效的方法就是數(shù)據(jù)分布調(diào)整,即抽樣法,實現(xiàn)對不平衡數(shù)據(jù)的再平衡采樣。本文對數(shù)據(jù)先欠采樣[13]后SMOTE 采樣[14]以彌補兩者的不足,達到緩解數(shù)據(jù)類不平衡的目的。
數(shù)據(jù)中包含大量的特征,這些特征中只有小部分特征對預(yù)測類別提供有用信息,所以若能將這些毫無用處的特征去掉,不僅可以降低計算成本,也能提高分類性能。同時各樣本之間存在相似數(shù)據(jù),不僅會增加模型構(gòu)建的時間,也會降低數(shù)據(jù)預(yù)測的準確性。因此,應(yīng)進行特征選擇以減少數(shù)據(jù)中特征的冗余,形成新的數(shù)據(jù)子集。
本文采用SMA 優(yōu)化算法對數(shù)據(jù)進行特征選擇,選擇效果最優(yōu)的若干特征。黏菌算法(Slime Mould Algorithm,SMA)是一種通過模擬黏菌在覓食過程中的行為和形態(tài)變化得到的優(yōu)化算法[15]。通過使用權(quán)重來模擬黏菌在覓食過程中產(chǎn)生的正反饋和負反饋,從而形成三種不同的形態(tài),黏菌在覓食過程中發(fā)現(xiàn)食物時,會有振蕩收縮的特性[16]。
用數(shù)學(xué)公式表示黏菌接近食物的行為
其中,t 為當(dāng)前迭代次數(shù);Pb(t)為當(dāng)前最優(yōu)個體位置;PA(t)和PB(t)為從黏菌中隨機選擇的兩個個體位置;W 為權(quán)重;vb和vc為控制參數(shù),vb?[-a,a],vc從1到0線性遞減;c為[0,1]的隨機數(shù)。
參數(shù)a、p和權(quán)重W的公式如下:
其中,SI(n)為適應(yīng)度值排序,S(n)為當(dāng)前個體適應(yīng)度值,n=1,2,3…N,cof表示群體中適應(yīng)度值排名前一半的部分,others表示余下的個體;bF為當(dāng)前迭代取得的最佳適應(yīng)度;WF 為當(dāng)前迭代取得的最差適應(yīng)度值。
即使黏菌已經(jīng)找到了更好的食物來源,但仍會分離一些個體去探索其他領(lǐng)域試圖尋找更高質(zhì)量的食物來源,黏菌位置更新公式如下:
其中,UB 和LB 分別為上界和下界;rand 和c 為[0,1]的隨機數(shù);z為自定義參數(shù)。
集成學(xué)習(xí)結(jié)合多個基分類器進行學(xué)習(xí)構(gòu)建最終的分類模型,是目前比較熱門的分類學(xué)習(xí)方法。集成學(xué)習(xí)在一定程度上也可以緩解數(shù)據(jù)的分布不平衡。
本文提出一種基于UDEED算法[17]改進的半監(jiān)督AdaBoost 算 法[18]—SUDAdaBoost(Semi-supervised AdaBoost based on unlabeled data)。UDEED算法不僅能最小化集成學(xué)習(xí)器在有標(biāo)簽訓(xùn)練樣本上的損失函數(shù)的,而且利用無標(biāo)簽訓(xùn)練樣本能最大化地提升基學(xué)習(xí)器的多樣性?;诖?,SUDAda-Boost算法在從訓(xùn)練的弱分類器集合中選擇個體分類器時,同時考慮誤差和不同分類器間的多樣性。
在第t-1次迭代確定的基分類器對無標(biāo)簽訓(xùn)練樣本分類時,利用相關(guān)系數(shù)ρij對不同基分類器間的預(yù)測結(jié)果進行多樣性度量:
ρij?[-1,1]表示分類器,hi與hj的相似性。若hi與hj正相關(guān),則ρij為正;若hi與hj負相關(guān),則ρij為負;若hi與hj之間無關(guān),則ρij為0。ρij越小,表明兩個分類器相似度越小,差異性越大。
評價n 個分類器的多樣性,需要計算每對分類器之間多樣性的平均值,其中Div 表示兩個分類器之間的多樣性。
基分類器選擇策略:
ρt-1表示候選基分類器與上一輪迭代中已確定基分類器之間的相關(guān)系數(shù)值;w1為選擇基分類器時錯誤率所占比重;w2為已進行集成的前t 個基分類器之間的平均相關(guān)系數(shù)值,且w1+w2=1。
算法SUDAdaBoost的集成步驟如下:
選用具有代表性的NASA 數(shù)據(jù)集(清洗后)、AEEEM 數(shù)據(jù)集和MORPH 數(shù)據(jù)集開展實驗。表1列出了所用數(shù)據(jù)集的部分信息。
表1 數(shù)據(jù)集信息
實驗設(shè)定訓(xùn)練集和測試集各50%,其中有標(biāo)簽訓(xùn)練集和無標(biāo)簽訓(xùn)練集各占20%和80%,迭代次數(shù)T=100,基分類器為單層決策樹,數(shù)量50 個。實驗另選取了四種典型的機器學(xué)習(xí)分類算法(NB、RF、DT 和AdaBoost)與SSFSAdaBoost 算法作對比,選用Accuracy、Precision、Recall 和F1-measure 為評估指標(biāo)。表2、表3、表4 和表5 分別為這幾種算法的Accuracy、Precision、Recall和F1-measure值。
表2 Accuracy結(jié)果比較
表3 Precision結(jié)果比較
表4 Recall結(jié)果比較
表5 F1-measure結(jié)果比較
上述數(shù)據(jù)表明,SSFSAdaBoost算法與其他四種典型算法相比具有明顯的優(yōu)勢。從這四種評估指標(biāo)的結(jié)果來看,SSFSAdaBoost 算法比原始的Ada-Boost算法性能更優(yōu);NB、RF和DT的某一評估指標(biāo)可能會高于SSFSAdaBoost算法,但從整體而言,SSFSAdaBoost算法依然優(yōu)于它們。同時也反映出SSFSAdaBoost 算法在緩解類不平衡問題上取得了優(yōu)異的成績。
為了更清晰地反映出實驗的對比度,圖2 展示了上述算法評估指標(biāo)的平均值。NB 算法的Accuracy、Precision、Recall 和F1-measure 平均值為84.85%、93.7%、89.51%和94.88%;RF 算法的Accuracy、Precision、Recall 和F1-measure 平均值為90.7%、92.99%、96.98%和94.53%;DT 算法的Accuracy、Precision、Recall 和F1-measure 平均值為88.33%、93.18%、93.74%和93.32%;AdaBoost 算法的Accuracy、Precision、Recall 和F1-measure 平均值為90.64%、92.89%、96.4%和93.86%;SSFSAdaBoost算法的Accuracy、Precision、Recall 和F1-measure 平均值為93.42%、94.51%、97.3%和95.86%??梢悦黠@看出,SSFSAdaBoost 算法的各項平均值均為最高,整體都要優(yōu)于其他四種典型分類算法。
圖2 各算法評估指標(biāo)平均值
本文提出一種改進的基于半監(jiān)督集成學(xué)習(xí)的軟件缺陷預(yù)測方法SSFSAdaBoost:利用混合采樣對訓(xùn)練集進行預(yù)處理以降低數(shù)據(jù)的不平衡度;利用SMA優(yōu)化算法做特征選擇以緩解特征冗余;利用改進的半監(jiān)督集成算法SUDAdaBoost 提高預(yù)測精度。實驗表明該方法要比原始的AdaBoost 算法更好,對緩解類不平衡效果較好且整體預(yù)測準確度更高。下一步將繼續(xù)針對標(biāo)記樣本不足的問題,探究遷移學(xué)習(xí)在半監(jiān)督預(yù)測模型上的應(yīng)用。