饒珍丹,李英梅,董 昊,張 彤
(哈爾濱師范大學 計算機科學與信息工程學院,哈爾濱 150025) E-mail:yingmei_li2013@163.com
隨著日常生活變得越來越智能化,人們對軟件系統(tǒng)的依賴逐漸加深,軟件質量的保障也越來越重要.而軟件中缺陷量的多少直接關系到了軟件質量的優(yōu)劣,產(chǎn)品中不滿足軟件要求或者損害用戶體驗感的缺陷,倘若未在早期被定位出來,應用后缺陷查復和修復成本則會大大增加.所以為了減少軟件中的缺陷數(shù)量,測試人員通常會對產(chǎn)品進行徹底的篩查.然而逐一對軟件模塊進行檢測的方法隨著軟件產(chǎn)品的復雜化、差異化而變得越來越費時費力.在上個世紀90年代初,研究人員就發(fā)現(xiàn):缺陷的出現(xiàn)不是雜亂無章的,而是具有相對分布規(guī)律的,規(guī)律服從著“2-8 原則”即80%的缺陷分布在20%的程序模塊中.軟件缺陷預測的作用就是在開發(fā)過程中更早的預測到含缺陷更多的模塊,幫助開發(fā)人員優(yōu)先分配有限的測試資源,加快生產(chǎn)率,從而降低軟件修復代價.軟件缺陷預測技術的出現(xiàn)對軟件工程的發(fā)展具有非常關鍵的作用.
機器學習是軟件缺陷預測中常用的分類方法,它能利用標記數(shù)據(jù)來訓練分類器,在訓練過程中運用相關分類規(guī)則對測試數(shù)據(jù)進行分類預測.但是傳統(tǒng)的機器學習在缺陷類和非缺陷類數(shù)目比大致相等時,才能擁有良好分類性能.然而現(xiàn)實中,在諸如醫(yī)療檢測[1]、破產(chǎn)預測[2]、欺詐檢測[3]、入侵檢測[4]、工業(yè)故障檢測[5]等許多實際工作領域中,異常事件數(shù)據(jù)的存在通常只有百分之一,分類器就是將所有事件都識別為正常事件,都能得到99%的準確率.顯然只關注準確率的高低對缺陷預測來說是不合理的,對存在故障的少數(shù)類數(shù)據(jù)進行準確預測才更符合以降低成本為目的的實際情況.
進行軟件缺陷預測的數(shù)據(jù)集里,缺陷類占比往往比非缺陷類更小,這種現(xiàn)象被稱為類不平衡現(xiàn)象.該現(xiàn)象的存在是導致分類器性能低下和有偏向的主要原因.將這樣的數(shù)據(jù)強行放入機器學習中進行訓練,算法將由于沒有足夠的缺陷類樣本信息而無法對該類進行準確的分類學習,最終導致假性正常分類率增加,造成更大的損失.因此,提高機器學習分類的有效方法之一就是通過加強不平衡數(shù)據(jù)中少數(shù)類的數(shù)量占比或權重占比緩解類不平衡問題,以提高少數(shù)類的分類性能.
針對軟件缺陷預測中不平衡數(shù)據(jù)的分類問題,許多研究者在重采樣[6-8]、集成學習[9-11]和代價敏感方向[12-14]都進行了大量的研究.然而最直觀還是獨立于分類器通過物理方法對數(shù)據(jù)分布進行處理,將失衡現(xiàn)象變得平衡的重采樣方法.本文基于現(xiàn)實生活中類失衡現(xiàn)象的分布特性,在數(shù)據(jù)處理層面經(jīng)過多種采樣方法的文獻閱讀與實驗分析,提出了一種基于過采樣和集成學習的不平衡數(shù)據(jù)軟件缺陷預測模型XG-AJCC.
XG-AJCC的構建分為兩個階段:
1)過采樣預處理階段:該階段提出了AJCC-Ram方法,該方法基于改進的ADASYN自適應過采樣和CURE-SMOTE過采樣分別在類邊緣和類中心多層次生成新樣本形成平衡數(shù)據(jù)集,通過CLNI進行平衡數(shù)據(jù)集的噪聲過濾清理.
2)模型構建階段:與集成算法XGBoost結合形成最終的不平衡數(shù)據(jù)缺陷預測模型.
本文在AEEEM數(shù)據(jù)集和NASA數(shù)據(jù)集中對AJCC-Ram方法及XG-AJCC模型進行了實驗驗證,結果表明:提出的方法較于經(jīng)典的采樣方法和采樣集成相結合的不平衡數(shù)據(jù)缺陷預測模型,在F1指標上均能夠取得有效的預測結果.
與代價敏感和集成學習兩種技術相比,數(shù)據(jù)層面的采樣方法能夠真實反映研究對象的性質,可以作為一種預處理方法嵌入到集成學習算法中,具有簡易性和通用性.而集成學習是融合多個基分類器或采樣方法通過投票或求平均值來組成總預測模型的方法,能夠有效的提高整體預測性能,提高泛化性.
根據(jù)對多數(shù)類進行刪減、對少數(shù)類復制、增添或兩者都進行改變等方式不同.重采樣技術又分為欠采樣、過采樣和混合采樣.在所有的重采樣方法中,隨機過采樣和隨機欠采樣是平衡數(shù)據(jù)集最簡單的采樣方法,但其缺點也是顯而易見的(容易過擬合或易刪除重要信息[15]),采樣后的數(shù)據(jù)容易缺乏代表性.近10年來,許多研究者致力于通過研究更好的重采樣方法來降低數(shù)據(jù)不平衡比率,從而提高分類器的性能.
在欠采樣中,Liu[16]等人運用集成思想提出了EasyEnsemble和BalanceCascade算法,有效的緩解了關鍵樣本信息易丟失的問題.Tsai[17]等人提出了基于聚類的欠采樣實例選擇算法CBIS.該算法聚類將多數(shù)類的數(shù)據(jù)分為多個子類,并從每個分組中通過實例選擇過濾掉不具代表性的數(shù)據(jù)樣本,以此提升分類性能.ClusterCentroids方法通過KMeans對各類樣本進行聚類,將聚類中心作為新樣本點,以此達到欠采樣效果.Tomek Link和Edited Nearest Neighbours方法分別通過對類別不同的最近鄰噪聲對中的多數(shù)類數(shù)據(jù)和K近鄰數(shù)類別差異大的多數(shù)類數(shù)據(jù)進行了數(shù)據(jù)清洗,達到了欠采樣的目的.
然而以數(shù)據(jù)清洗來進行欠采樣的缺點是無法控制刪除數(shù)量的多少,只能稍微緩解類不平衡問題,不能有效的將數(shù)據(jù)平衡.其他的欠采樣的改進算法中即使能避免部分重要信息的丟失,但是卻不能加強缺陷類樣本的分類準確性,故而在大量的軟件缺陷預測實驗中,過采樣是較優(yōu)于欠采樣的.令預測樣本中缺陷數(shù)占比增加是緩解不平衡數(shù)據(jù)、提升缺陷類樣本分類性能的有效方法之一.
在過采樣中,Chawla等人[6]提出了合成少數(shù)過采樣SMOTE算法:其假設是距離越近的實例比距離更遠的實例更相似,故使用KNN算法通過隨機線性公式計算鄰域和小類樣本并從中進行插值生成.過采樣在采樣區(qū)域方面又可以分為邊界區(qū)采樣和中心區(qū)采樣.
邊界區(qū)采樣:當選取的少數(shù)類樣本周圍K近鄰也都是少數(shù)類時,對該樣本進行SMOTE插值合成新樣本可能不會對分類產(chǎn)生很大的價值作用,就像SVM中遠離邊界的樣本點對決策的影響不大.因此,加強缺陷邊界的分類成了許多研究人員在過采樣領域的研究方向之一.Han等人[18]為強調邊界的重要性提出了Borderline-SMOTE采樣,該采樣強調在位于邊界處的缺陷和其最近鄰之間合成少數(shù)類樣本,使類別邊界界線變得更清晰,從而提高了預測模型的性能.He等人[7]為加強少數(shù)類的邊界清晰度提出了ADASYN自適應算法,算法根據(jù)小類樣本點周圍大類樣本數(shù)量占比,通過自適應地分配取樣權重將新合成的少數(shù)實例集中于邊界區(qū)域.Gong L等人[19]為了改善SMOTE算法樣本合成實例分布在小范圍內缺乏多樣性的問題,提出了KMFOS方法,該方法應用Kmeans聚類將缺陷樣本分為K個簇,在簇與簇間根據(jù)兩簇缺陷占比插值生成新的實例,將生成的缺陷實例分散在缺陷空間中.
中心區(qū)采樣:是指將使新樣本限制在一定區(qū)域內,由區(qū)域內的點之間隨機生成新樣本點.中心區(qū)采樣可以緩解樣本分散程度,使得其分布更加集中,以減少噪聲樣本或離群樣本的生成.趙清華等人[20]根據(jù)隨機森林和SMOTE組合算法在不平衡數(shù)據(jù)集上存在數(shù)據(jù)集邊緣化分布以及計算復雜度大等問題,提出TSMOTE和MDSMOTE算法,目的是將新少數(shù)類限制在一定區(qū)域類,具有中心化特性,從而降低算法復雜度.Bejjanki K K等人[21]計算少數(shù)類樣本所有的屬性,提出了一種質心與質心之間插值合成新樣本的技術CIR,而樣本質心是由缺陷與其兩個近鄰缺陷構建的三角形成的.Douzas G等人[8]通過將樣本進行KMeans聚類,過濾少數(shù)類密度較高的簇,將剩下的少數(shù)類含量稀疏的簇進行SMOTE采樣,提出了KMeansSMOTE聚類采樣算法.該方法首先通過僅在安全區(qū)域進行過采樣來避免產(chǎn)生噪聲緩解了類間不平衡問題,又通過增加少數(shù)類稀疏的簇內樣本的緩解了類內不平衡問題.Ma L等[22]人通過分層聚類算法CURE,提出了CURE-SMOTE采樣.該方法通過分層聚類清除離群點的數(shù)據(jù),生成了各個簇的中心點和代表點,通過以上兩點之間插值生成新樣本,減少了噪聲生成.CURE-SMOTE能夠有效防止過擬合,保證樣本數(shù)據(jù)的原始分布屬性.
本文結合Border-line SMOTE的思想,按少數(shù)類采樣點的K近鄰中缺陷類和非缺陷類的占比將該點分為兩類,即邊緣類和中心類(邊緣類指該少數(shù)類樣本點K近鄰中有一半以上為非缺陷類.中心類指該少數(shù)類樣本點K近鄰中有一半以上為缺陷類).在邊緣采樣時采用對ADASYN的改進算法,在中心采樣時將采用CURE-SMOTE算法,分層次進行樣本生成.采樣點類別劃分如圖1所示.
圖1 采樣點類別劃分圖Fig.1 Classification diagram of sampling points
在數(shù)據(jù)挖掘過程中,訓練集里存在的噪聲也會影響到機器學習的分類性能.(噪聲指存在于數(shù)據(jù)集中,對分類器性能的提高產(chǎn)生抑制作用的劣質數(shù)據(jù).)在類不平衡采樣中,邊界處樣本生成的增多可能會導致類邊界重疊,具有邊界模糊、分類復雜度加重等危害,這與采樣加強邊界清晰度的初衷有所沖突.所以對數(shù)據(jù)集進行噪聲識別及清理是提高采樣后分類性能的有效方法之一.
Tang等人[23]認為離群樣本點更可能是噪聲點,故提出一種定義方法檢測離群點噪聲因子,并將噪聲因子大的點進行移除.實驗表明,噪聲點的減少能夠提高準確率.Gupta等人[24]根據(jù)他們所提出的度量方法對327個二分類數(shù)據(jù)集計算了復雜度和重疊度,實驗結果表明:噪聲去除的訓練數(shù)據(jù)可以更好的提高分類器的預測性能.Laurikkala等人[25]認為,分類結果的質量并不一定取決于類的大小,還應該考慮噪聲等特性,從而提出了NCL鄰域清潔方法,提高了少數(shù)類中困難類的識別.Kim等人[26]通過在數(shù)據(jù)集中人工添加假陽性或假陰性噪聲,研究了數(shù)據(jù)質量對分類的影響.研究發(fā)現(xiàn),當數(shù)據(jù)集同時具有以上噪聲時,缺陷預測的性能會顯著下降.因此,他們提出了一種噪聲檢測方法——最近列表噪聲識別CLNI,CLNI噪聲處理的思想是:基于每個實例的K近鄰不同,認為所有類別的實例中都可能存在噪聲,方法按照與該實例類別不同的前N個近鄰的百分比進行記錄,并將記錄大于設定閾值的實例視為噪聲刪除,合理準確地識別錯誤樣本.
不平衡數(shù)據(jù)采樣和噪聲清理都是對數(shù)據(jù)進行預處理的有效方法之一,部分學者通過將兩者結合更好的提升了數(shù)據(jù)預測的可靠性.L Chen等人[27]為改善類重疊和類不平衡問題,將被鄰域清洗NCL算法去除重疊后的非缺陷樣本和其他原數(shù)據(jù)中的缺陷樣本一起進行多次隨機欠采樣生成平衡子集,然后利用AdaBoost集成算法建立預測模型ERUS.
本文進行改進的ADASYN算法和原算法一樣存在著部分不足:強調邊界自適應樣本的生成時,容易產(chǎn)生更多的噪聲實例影響預測算法的性能.所以本文將在完成采樣后將采用CLNI方法進行噪聲過濾,可以更好的將隨機生成的不合理樣本與噪聲的樣本進行清除.
集成學習的思想經(jīng)常被用于分類器中,通常指通過融合多個基分類器組成總分類器,來有效的提高整體預測性能的方法.常用的集成學習的思想有:Bagging、Boosting、Stacking.Freund Y等人[9]通過對訓練樣本訓練多個弱分類器,對每次分類誤差大的運用投票法進行權值加重并迭代訓練,提出了AdaBoost方法.該方法的優(yōu)點是在學習中重點關注被錯誤分類的實例,從而提高分類正確率.
同樣的,在不平衡數(shù)據(jù)集中,由于采樣方法具有隨機性,分類器分類可能產(chǎn)生偏差,故研究人員也會將具有能夠有效提升預測并能持續(xù)穩(wěn)定性能的集成學習思想運用于采樣中,以獲得更高效的解決類不平衡問題的軟件缺陷預測模型.Chen等人[10]結合過采樣和集成學習提出了RAMOBoost采樣,RAMOBoost借助ADASYN思想根據(jù)少數(shù)類樣本的分布比自適應地調整抽樣權值,對少數(shù)類生成新樣本進行排序.再通過AdaBoost集成,迭代提高了邊界難學實例的權重.Huda等人[28]提出了一種結合多種過采樣的集成采樣預測模型,模型通過ROS、MWMOTE和FIDos采樣分別與隨機森林結合成基學習器,再進行分類器間的投票構建而成.戴翔和毛宇光[29]借助K-NN過濾法、SMOTE過采樣和K-means聚類降采樣運用集成投票的方式構成訓練模型,解決了跨項目缺陷預測問題和類不平衡問題.張菲菲等人[30]通過將兩類數(shù)據(jù)集劃分成不同的子簇,再根據(jù)子簇概率分布改進了過采樣方法,并將改進的過采樣結合基分類器決策樹運用AdaBoost集成構建了最終的分類模型.Jiang Y等人[31]同時考慮了類不平衡和標記樣本少的問題,提出了Rocus半監(jiān)督學習方法.該方法運用Bagging思想加入隨機構造訓練了各具多樣性的基分類器.通過集成投票,在小規(guī)模不平衡數(shù)據(jù)欠采樣處理中,提高了對少數(shù)類的靈敏度.進一步將其應用于半監(jiān)督學習中,提升了半監(jiān)督的分類性能.
本文也將數(shù)據(jù)預處理方法與集成學習XGBoost相結合,形成最終的軟件缺陷預測模型XG-AJCC以提升分類性能.后續(xù)也將更進一步的把本研究的方法應用于半監(jiān)督領域,緩解樣本標記少的問題.
軟件缺陷預測可以通過對歷史倉庫的挖掘,描寫與之相關的度量信息形成數(shù)據(jù)集,通過機器學習等方法對數(shù)據(jù)集進行學習,以此構建有效的預測模型.然而現(xiàn)實中有缺陷的數(shù)據(jù)樣本較少,會導致機器學習的分類偏向于對多數(shù)類,在軟件缺陷預測中深深的影響模型的分類性能.因此采用一定的方法緩解類不平衡問題是很有必要的.本文就類不平衡問題基于ADASYN算法和CURE-SMOTE算法提出了一種自適應判斷聚類隨機采樣AJCC-Ram(Adaptive Judgment CureClustering Random Sampling),并與集成學習XGBoost相結合形成軟件缺陷預測模型XG-AJCC.
本文的算法框架包括以下3部分,其中第1部分為整體框架圖.
3.2.1 缺陷預測模型XG-AJCC的整體框架圖
如圖2所示,實驗將初始數(shù)據(jù)分為1∶9,取90%為訓練數(shù)據(jù)集,并進行AJCC-Ram采樣預處理,預處理后的平衡數(shù)據(jù)放入調試好參數(shù)的XGBoost集成學習中,形成了最終的XG-AJCC不平衡數(shù)據(jù)軟件預測模型.剩下10%的初始數(shù)據(jù)放入該模型可以進行分類預測的測試.
圖2 缺陷預測模型XG-AJCC整體框架圖Fig.2 Overall frame diagram of defect prediction model XG-AJCC
3.2.2 AJCC-Ram算法的框架圖
圖3是AJCC-Ram采樣預處理算法的詳細框架圖,算法根據(jù)少數(shù)類樣本的K近鄰的類別數(shù)將其分為兩個分支,即兩個層次:
圖3 AJCC-Ram采樣算法框架圖Fig.3 Frame diagram of AJCC-Ram sampling algorithm
對非缺陷近鄰≥K/2即邊緣類,進行改進的ADASYN算法采樣,能自適應的加強對邊界處的樣本采樣,增加類邊界線的清晰度.對非缺陷近鄰 3.2.3 改進的ADASYN算法框架圖 圖4詳細的描寫了AJCC-Ram采樣中ADASYN改進算法的內容.為了加強邊界處樣本多樣性,將針對樣本點與近鄰中少數(shù)類之間才具有的采樣行為進行改進:將隨機選取進行插值生成的近鄰由原來SMOTE中缺陷近鄰擴充到任意近鄰.通過判斷隨機選取的近鄰類別改變隨機插值數(shù)生成新缺陷樣本. 圖4 改進的ADASYN算法框架圖Fig.4 Frame diagram of improved ADASYN algorithm 不平衡數(shù)據(jù)處理的解決辦法中,重采樣是一個直觀的方法,它獨立于分類器可以更好的在采樣預處理后任意地和集成方法或者分類器相結合.本文在采樣側重中,從不同層面考慮了所有少數(shù)樣本對新樣本生成的影響,在邊界區(qū)和中心區(qū)分別進行了采樣. 在邊界區(qū),由于該處的少數(shù)類可能更難以學習,因此需要讓邊界處的樣本生成更多新樣本,以迫使最終的分類學習更集中于困難區(qū)域,從而采用了ADASYN算法.針對邊界處ADASYN采樣的單一性改進了ADASYN算法:在權重計算后,由原來只對K近鄰中的少數(shù)類隨機插值采樣,改進到對K近鄰中任意樣本隨機插值采樣,根據(jù)隨機選取近鄰樣本的類別不同,采取不同范圍的插值隨機數(shù)進行樣本生成,增加了樣本生成的多樣化.在安全區(qū),將進行CURE-SMOTE采樣以達到有效的防止過擬合,保證樣本數(shù)據(jù)的原始分布屬性的目的. 針對改進算法采樣后噪聲和邊界模糊問題,在采樣平衡后,將平衡數(shù)據(jù)進行CLNI噪聲清理.與ADASYN相比,AJCC-Ram可以有效地抑制噪聲的負面影響,與CURE-SMOTE采樣相比,AJCC-Ram可以有效的提高難分類缺陷樣本的分類準確性. 算法1.采樣算法 輸入:輸入訓練數(shù)據(jù)集S、少數(shù)類數(shù)據(jù)近鄰數(shù)目K 輸出:過采樣后合成的數(shù)據(jù)集N 1.Calculate the number of samples in the majority class and the minority class in the training setS:N1、N2; 2.Calculate the total number of samples to be generated:G=N1-N2; 3.forZn∈N2do: 4. Calculate the Euclidean distance to obtainKnearest neighbors of each instanceZn,add the neighbor instance tolistn; 5. Calculate the number of majority classes inKnearest neighbors:ΔKn; 6.end for; 7.ifΔKn≥K/2: 8.Xi=Zn;Listi=listn;Δi=ΔKn;i=i+1; 9. Calculate the proportion ofKnearest neighbors of Δi:ri=Δi/K 11.end if 12.for each instanceXido: 14. Count the number of samples generated around it: g=G×Wi; 15. forj=1 togdo; 16. Random neighbor instancesXijin Listi; 17. ifXij∈N2; 18. Generate new samples: 24.end for 26.end for 27.forU∈Cdo: 28. forV∈Cdo: 29.d(U,V)=mind(p,q)(p∈Ur,p∈Vr) //Calculate the distance between clusters 30. end for 31.end for 32.The cluster with the smallest distance between clusters is merged and namedc. 33.for each clustercdo: 34. Update the center and representative points: Among them,the |U|as the number of clusters,αis the contraction factor (Generally take 0.5). 35.end for 36.Calculate the number of generated samples:g=N1-N2; 37.forj=1 togdo: 40.end for 41.Synthesized balanced data set:N=N1+N2; 42.returnN. 算法2.噪聲清理算法 輸入:輸入合成的平衡數(shù)據(jù)集N、近鄰數(shù)K、閥值δ 輸出:清理后的數(shù)據(jù)集N 1.forXi∈Ndo: 2. Calculate the Euclidean distance to obtainKnearest neighbors of each instanceXi,and add the neighbor instance toListi 3. Calculate the number of categories inListithat differ fromXi:Δi 4. Calculate the proportion ofΔiin theKnearest neighbor ofXi:ri=Δi/K 5.end for 6.ifri>δ: 7. DeleteXiinstances inN; 8.else 9. continue; 10.end if 11.returnN. XGBoost全名為eXtreme Gradient Boosting,是14年由陳天奇[32]提出的基于決策樹的梯度提升boosting集成算法.該算法可自定義損失函數(shù)并在目標函數(shù)中加入了正則項,能有效的控制復雜度、防止過擬合,是一種高效的機器學習算法. 其基本原理如下: 首先,定義一個目標函數(shù)=損失函數(shù)+正則化項+常數(shù): (1) C為常數(shù),Ω(ft)正則項如公式(2)所示: (2) 其中,γ表示 L1正則的懲罰項,λ表示 L2正則的懲罰項,T表示葉子節(jié)點個數(shù),wj表示第j個葉子節(jié)點的權重. 用泰勒近似展開目標函數(shù): (3) (4) 其中,令Gj=∑i∈Ijgi,Hj=∑i∈Ijhi,求導令其等于0,可得: (5) 將wj帶入目標函數(shù)得: (6) 式(6)可以作為評分函數(shù)來衡量一個樹型結構t的質量.通過自定義損失函數(shù),計算其一階、二階導.簡化后再根據(jù)其所選特征計算增益,從而選取合適的節(jié)點劃分,構造最優(yōu)結構樹.使用貪心算法選取節(jié)點的最大化期望式如式(7)所示: gain(φ)=gain(before)-gain(after) (7) XGBoost在近些年競賽中被積極運用,且取得了很優(yōu)秀的成績[33].本文使用該集成算法和采樣相搭配使用的軟件缺陷預測模型XG-AJCC可以很好的處理采樣的過擬合問題. 算法3.XGboost算法 輸入:訓練數(shù)據(jù)集N′={(x1,y1),(x2,y2),…(xn,yn)},最大迭代次數(shù)T,損失函數(shù)L,正則化系數(shù)λ、γ,特征數(shù)M 輸出:集成的強學習器ft(x) 1.fort=1->Tdo: 2. fori∈Ndo: 4. end for 5.Gj=0;Hj=0;score=0; 6. forj=1 tondo: 7.Gj=Gj+gi;Hj=Hj+hi; 8. form=1 toMdo: 9.GL=0;HL=0; 10. fori∈Ndo: 11.GL=GL+gi,GR=G-GL HL=HL+hi,HR=H-HL //Calculate the sum of the first and second derivatives of the left and right subtrees after the instance is put into the left subtree 12. Try to update the maximum score: 14. end for 15.end for 16.if Max score!=0: 17. continue->2; 18.else 19. Get the weak learnerht(x); 20. Update the learnerft(x); 21.end if 22.end for 23.returnft(x) 算法4.XG-AJCC模型算法 輸入:輸入訓練數(shù)據(jù)集S、測試數(shù)據(jù)集S′、XGBoost集成分類器ft(x) 輸出:測試數(shù)據(jù)集的預測結果Y(s)′ 1.Pretreatment stage: Sampling algorithm(S,5)→N; Noise cleaning algorithm(S,5,0.6)→N; 2.The integration phase: (N,S′,ft(x))′→Y(s)′ 3.returnY(s)′ XG-AJCC過采樣集成缺陷預測模型是一種將AJCC-Ram多層次采樣和XGBoost集成學習相結合的高效的軟件缺陷預測模型.為了驗證AJCC-Ram采樣和XG-AJCC缺陷預測模型的有效性,本文提出了3個研究問題,并就問題設計了3組對比實驗: 1)與經(jīng)典的類不平衡重采樣軟件缺陷預測方法相比,AJCC-Ram采樣能否進一步提高分類性能? 為了驗證AJCC-Ram采樣的有效性,實驗將與原始數(shù)據(jù)、隨機過采樣、隨機欠采樣、SMOTE采樣、ADASYN采樣、CURE-SMOTE采樣在基礎分類器樸素貝葉斯下進行對比實驗. 2)與經(jīng)典的分類器和集成器相比,XGBoost集成學習能否進一步提高分類性能? 為了驗證XGBoost集成算法的有效性,將分別與經(jīng)典的分類器SVM、5-NN、CART決策樹、AdaBoost、ID3決策樹、樸素貝葉斯、隨機森林采用原始數(shù)據(jù)集進行對比實驗. 3)與經(jīng)典的采樣和集成相結合的方法相比,XG-AJCC方法能否進一步提高分類性能? 為了驗證AJCC-Ram采樣和XGBoost集成學習結合的軟件缺陷預測模型的有效性,將進一步把XG-AJCC與不平衡數(shù)據(jù)處理的采樣集成方法:RUSBoost、RAMOBoost、EasyEnsemble、BalanceBagging、SMOTEBoost進行對比實驗. 以上實驗將在AEEEM數(shù)據(jù)集和NASA數(shù)據(jù)集上,通過控制變量法用F1作為評價指標進行10次十折交叉法即100次實驗,取平均值做實驗結果.以上的算法均通過python中的XGBoost工具包、sklearn工具包、github的somte-variants[34]和imbalanced-algorithms工具包進行代碼調用.使用somte-variants工具包調用CURE-SMOTE算法、利用XGBoost工具包調用XGBoost集成分類器,并對XGBoost進行參數(shù)設定(設定值為:AEEEM數(shù)據(jù)集中使用學習率為0.001,樹數(shù)為1000,樹深為6.NASA數(shù)據(jù)集使用學習率為0.1,樹數(shù)為10000,樹深為10).使用imbalanced-algorithms調用實驗3的SMOTEBoost和RAMOBoost方法,采用sklearn工具包調用各種分類器、評估方法F1和實驗3的RUSBoost、EasyEnsemble、BalanceBagging方法.實驗具有實際操作意義. 本文使用AEEEM數(shù)據(jù)集[35]和NASA數(shù)據(jù)集進行模型性能衡量.AEEEM數(shù)據(jù)集是由D′Ambros等人分析了5個開源項目(包括61個特征值)收集形成的.NASA數(shù)據(jù)集則是由美國國家航空航天局發(fā)布的,其數(shù)據(jù)下載位于PROMISE庫(1)http://promise.site.uottawa.ca/SERepository中,具有真實可信性. 根據(jù)缺陷的預測目標不同,機器學習也分為回歸學習和分類學習.本文研究的是缺陷傾向性預測,在機器學習研究中屬于二分類問題.所以在數(shù)據(jù)集處理中,為使多標簽或英文標簽的數(shù)據(jù)集形成二分類標簽y={0,1}(0為多數(shù)類,1為少數(shù)類),實驗將進行以下操作: 設data={(x1,y1),(x2,y2),…(xi,yi)}為初始數(shù)據(jù)集,其中xi訓練樣本向量{a1,a2,…aj}, 當AEEEM數(shù)據(jù)集j=61時,令: (8) 當NASA數(shù)據(jù)集j=21,令: (9) AEEEM數(shù)據(jù)集和NASA數(shù)據(jù)集的基本信息如表1、表2所示. 表1 AEEEM數(shù)據(jù)集信息Table 1 Imformation of AEEEM datasets 表2 NASA數(shù)據(jù)集信息Table 2 Imformation of NASA datasets 其中,設非缺陷數(shù)為N,缺陷數(shù)為Q,相關定義如定義1、定義2所示. 定義1.缺陷率(rateofdefect,Rd):為缺陷模塊數(shù)與總模塊數(shù)的比值. (10) 定義2.不平衡率(Imbalance Ratio,IR):無缺陷模塊數(shù)與有缺陷模塊數(shù)的比值. (11) 二分類問題的預測結果會出現(xiàn)4種表示結果,由表3能夠清晰地表示. 表3 混淆矩陣Table 3 Confusion matrix 通過4種表示結果的結合可以形成多種性能評價指標,包括:查準率、召回率、F-measure、AUC度量、MCC等.在不平衡數(shù)據(jù)分類的機器學習中,用準確率進行模型評估顯然是不合理的.查準率和召回率是評估方法之一,但其生成的值幾乎是互相矛盾的.AUC、MCC相對穩(wěn)定,但不適合當檢測解決類不平衡問題的評價標準.所以對預測模型選擇合適的評價指標尤為必要.本文將采用F1評價指標對實驗對比進行評估,有利于綜合的考察查準率和查全率兩個指標值,合理的給出預測性能的對比結果. 相關計算公式如下: 1)準確率:表示被正確分類的模塊數(shù)在總模塊數(shù)中的占比. (12) 2)查準率:表示所有被分類的缺陷類中被正確分類的占比. (13) 3)召回率:表示所有缺陷類中被正確分類的占比. (14) 4)F-measure:β=2時又叫F1度量:是一個關于查準率和召回率的調和平均定義. (15) 問題1.與經(jīng)典的類不平衡重采樣軟件缺陷預測方法相比,AJCC-Ram采樣能否進一步提高分類性能? 針對問題1進行的對比實驗,結果如表4、表5所示.其中OD、RUS、ROS、SMO、ADA、CURE、AJ-R分別為原始數(shù)據(jù)、隨機欠采樣、隨機過采樣、SMOTE采樣、ADASYN采樣、CURE-SMOTE采樣、AJCC-Ram采樣的簡稱. 實驗結果表明:相比較基準方法,隨機欠采樣的F1值性有時會略差,這是因為在小規(guī)模數(shù)據(jù)集中,隨機欠采樣可能會刪除某些重要數(shù)據(jù)的而導致性能下降.而其他方法(包括隨機過采樣)除了在較稀疏的數(shù)據(jù)PC1中,大都能在一定程度上提升F1值,這說明過采樣方法確實可以提升不平衡數(shù)據(jù)集的預測效果.進一步而言,本文提出的AJCC-Ram過采樣方法與原數(shù)據(jù)集AEEEM和NASA的基準方法相比平均都提升了3%,與其他經(jīng)典的過采樣方法在兩類不平衡數(shù)據(jù)集中又取得了9次最優(yōu)預測效果.上述結果證明了AJCC-Ram采樣方法在不平衡數(shù)據(jù)缺陷預測的有效性. 表4 多種采樣方法在AEEEM數(shù)據(jù)集中的F1值Table 4 F1 value of multiple sampling methods in AEEEM dataset 表5 多種采樣方法在NASA數(shù)據(jù)集中的F1值Table 5 F1 value of multiple sampling methods in NASA dataset 問題2.與經(jīng)典的分類器和集成器相比,XGBoost集成學習能否進一步提高分類性能? 針對問題2進行的對比實驗,結果如表6、表7所示.其中5NN、CART、Ada、ID3、GNB、RF、XG分別為5-NN、CART決策樹、AdaBoost、ID3決策樹、樸素貝葉斯、隨機森林和XGBoost的簡稱. 表6 多種分類器在不平衡數(shù)據(jù)集AEEEM中的F1值Table 6 F1 values of multiple classifiers in unbalanced data set AEEEM 實驗結果可以看出:XGBoost集成學習以F1為指標在不平衡數(shù)據(jù)集AEEEM和NASA的10個數(shù)據(jù)中,取得了7次最優(yōu)的預測結果.樸素貝葉斯在小規(guī)模數(shù)據(jù)集AEEEM上具有優(yōu)勢,可以在一些數(shù)據(jù)中較大幅度提升分類性能,但優(yōu)勢存在的穩(wěn)定性和性能的平均提高程度不如XGBoost.上述結果證明了在不平衡數(shù)據(jù)集上對比的其他分類器,XGBoost集成學習可以取得更好的預測效果. 表7 多種分類器在不平衡數(shù)據(jù)集NASA中的F1值Table 7 F1 values of multiple classifiers in unbalanced data set NASA 問題3.與經(jīng)典的采樣和集成相結合的方法相比,XG-AJCC方法能否進一步提高分類性能? 針對問題3進行的對比實驗,結果如表8、表9所示.其中RUS、RAMO、EE、BB、SMOB、XG-AJ分別為RUSBoost、RAMOBoost、EasyEnsemble、BalanceBagging、SMOTEBoost、XG-AJCC的簡稱. 表8 多種采樣集成方法在AEEEM數(shù)據(jù)集中的F1值Table 8 F1 values in AEEEM data set by multiple sampling integration methods 表9 多種采樣集成方法在NANS數(shù)據(jù)集中的F1值Table 9 F1 values in NANS data set by multiple sampling integration methods 為了更直觀的分析實驗結果,本文由表8、表9得到如圖5、圖6所示的柱狀圖.從圖5、圖6、表8、表9可以看出:XG-AJCC預測模型以F1為指標在不平衡數(shù)據(jù)集AEEEM和NASA的10個數(shù)據(jù)中取得了7次最優(yōu)預測結果,特別是兩個數(shù)據(jù)集的平均值顯著高于其他的對比實驗:在AEEEM數(shù)據(jù)集均值分別提升了14%、7%、6%、4%和3%,在NASA數(shù)據(jù)集均值分別提升了11%、7%、3%、1%和4%.相比之下在性能略差時一些數(shù)據(jù)中,與其他最優(yōu)的采樣集成相結合的不平衡數(shù)據(jù)處理方法相比差距也不大.從整體來看,XG-AJCC方法的性能提升率和分類穩(wěn)定性顯著優(yōu)于其他對照實驗.由上述結果可以得知,XG-AJCC預測模型是一個有效的不平衡數(shù)據(jù)軟件缺陷預測模型. 圖5 各不平衡數(shù)據(jù)處理方法在AEEEM數(shù)據(jù)集中的F1值Fig.5 F1 value of each unbalanced data processing method in the AEEEM data set 圖6 各不平衡數(shù)據(jù)處理方法在NASA數(shù)據(jù)集中的F1值Fig.6 F1 value of each unbalanced data processing method in the NASA data set 針對軟件缺陷預測中類不平衡問題,本文在采樣部分從不同層面上,考慮了所有少數(shù)類缺陷樣本對新樣本生成的影響,基于ADASYN算法和CURE-SMOTE算法提出了自適應判斷合成隨機采樣AJCC-Ram,并通過CLNI噪聲過濾進行數(shù)據(jù)清理.將該過采樣預處理方法與集成學習XGBoost相結合形成最終的軟件缺陷預測模型XG-AJCC.實驗結果表明,XG-AJCC不平衡數(shù)據(jù)缺陷預測模型在數(shù)據(jù)集AEEEM和NASA中均能取得優(yōu)良的預測效果. 下一步將通過研究不同的特征選擇方法,在預處理階段降低實驗的時間復雜度,進一步將降低了時間復雜度的AJCC-Ram采樣應用于半監(jiān)督方面,補足標記數(shù)不足的原始數(shù)據(jù),并繼續(xù)結合集成學習XGBoost進行缺陷預測.3.3 過采樣預處理階段
3.4 XGBoost集成學習階段
4 實 驗
4.1 實驗設計
4.2 實驗數(shù)據(jù)集設計
4.3 實驗評價指標
4.4 過采樣預處理階段結果及分析
4.5 集成處理階段結果及分析
4.6 XG-AJCC類不平衡軟件缺陷預測模型結果及分析
5 結束語