摘 ?要: 針對(duì)軟件缺陷預(yù)測(cè)中對(duì)不平衡數(shù)據(jù)分類(lèi)精度較低的問(wèn)題,提出了一種新的基于LogitBoost集成分類(lèi)預(yù)測(cè)算法,使用SMOTE方法對(duì)原始數(shù)據(jù)集進(jìn)行平衡處理,然后使用隨機(jī)森林算法作為弱分類(lèi)器算法進(jìn)行分類(lèi)預(yù)測(cè),最后使用LogitBoost算法以加權(quán)方式集成各弱分類(lèi)器的結(jié)果。通過(guò)在NASA MDP基礎(chǔ)數(shù)據(jù)集上驗(yàn)證得出本文提出的分類(lèi)預(yù)測(cè)算法比數(shù)據(jù)集均衡處理前準(zhǔn)確率高出0.1%-11%,同時(shí)在均衡處理后比KNN算法平均高出0.9%,比SVM算法平均高出0.4%,比隨機(jī)森林算法平均高出0.1%。
關(guān)鍵詞: 不平衡數(shù)據(jù);LogitBoost集成算法;隨機(jī)森林算法;軟件缺陷預(yù)測(cè)
中圖分類(lèi)號(hào): TP206+.3 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.08.019
本文著錄格式:張洋. 一種基于Logicboost的軟件缺陷預(yù)測(cè)方法[J]. 軟件,2019,40(8):7983
【Abstract】: Aiming at the problem of low classification accuracy of unbalanced data in software defect prediction, a new integrated classification prediction algorithm based on LogitBoost is proposed. SMOTE method is used to balance the original data set, then random forest algorithm is used as weak classifier algorithm for classification prediction. Finally, the results of weak classifiers are integrated in a weighted way using LogitBoost algorithm. Through the verification on NASA MDP basic data sets, the classification prediction algorithm proposed in this paper is 0.1%-11% higher than that before data balancing, 0.9% higher than that of KNN algorithm, 0.4% higher than that of SVM algorithm and 0.1% higher than that of random forest algorithm.
【Key words】: Unbalanced data; Logitboost integration algorithms; Random forest algorithm; Software defect prediction
0 ?引言
軟件缺陷是指計(jì)算機(jī)軟件或程序中存在的某種破壞正常運(yùn)行能力而導(dǎo)致的問(wèn)題和錯(cuò)誤或者其他隱藏的功能缺陷。2011年“甬溫線”列車(chē)因控制軟件設(shè)計(jì)缺陷導(dǎo)致列車(chē)追尾事故造成了大量人員傷亡、2012年美國(guó)騎士資本集團(tuán)的交易軟件缺陷問(wèn)題造成股票交易異常損失近4.4億美元、2019年波音737MAX因軟件缺陷導(dǎo)致多起墜機(jī)事件,大量的人員傷亡和財(cái)產(chǎn)損失無(wú)不在警示人們對(duì)軟件質(zhì)量的重視,也進(jìn)一步促進(jìn)了對(duì)軟件缺陷預(yù)測(cè)的研究。
因?yàn)檐浖毕菘陀^存在,而且某些隱藏較深的缺陷不容易發(fā)現(xiàn),而一個(gè)軟件缺陷如果在開(kāi)發(fā)早期發(fā)現(xiàn)那么解決該問(wèn)題的成本會(huì)比較小,而越往后解決缺陷問(wèn)題的成本會(huì)逐漸增加,而開(kāi)發(fā)完成后才發(fā)現(xiàn)的缺陷最嚴(yán)重的情況是有可能項(xiàng)目需要重新開(kāi)發(fā),所以研究軟件缺陷問(wèn)題的關(guān)鍵就是如何最大程度的發(fā)現(xiàn)軟件或程序中的隱藏缺陷,而開(kāi)發(fā)一款高質(zhì)量的算法讓其能判定軟件中的大部分缺陷是解決當(dāng)前問(wèn)題的重中之重[1]。
1 ?相關(guān)研究
軟件缺陷預(yù)測(cè)方法分為靜態(tài)軟件缺陷預(yù)測(cè)方法和動(dòng)態(tài)軟件缺陷預(yù)測(cè)方法[2],本文研究?jī)?nèi)容屬于靜態(tài)軟件預(yù)測(cè)方法。目前針對(duì)靜態(tài)軟件預(yù)測(cè)采用的方法有神經(jīng)網(wǎng)絡(luò)[3]、支持向量機(jī)(SVM)[4]、決策樹(shù)方法[5]、貝葉斯網(wǎng)絡(luò)方法[6]、隨機(jī)森林算法[7]、關(guān)聯(lián)規(guī)則挖掘方法[8]、集成學(xué)習(xí)方法[9]等方法,其中神經(jīng)網(wǎng)絡(luò)方法是一種非監(jiān)督分類(lèi)方法依賴傳統(tǒng)方法尋找神經(jīng)網(wǎng)絡(luò)權(quán)值,所以比較難找到全局最優(yōu)解;SVM方法能較好的應(yīng)對(duì)不平衡數(shù)據(jù)和數(shù)據(jù)多維的情況,但容易受到噪聲樣本數(shù)據(jù)的影響;其他分類(lèi)算法因?yàn)閿?shù)據(jù)不平衡的問(wèn)題導(dǎo)致預(yù)測(cè)精度比較低;集成學(xué)習(xí)方法集成了多個(gè)弱分類(lèi)器的方法以構(gòu)成強(qiáng)分類(lèi)器,所以較單個(gè)弱分類(lèi)器分類(lèi)預(yù)測(cè)性能較高,是目前比較好的一種缺陷預(yù)測(cè)方法。因?yàn)橐陨虾芏喾诸?lèi)預(yù)測(cè)算法都受到數(shù)據(jù)集不平衡的影響,所以針對(duì)這個(gè)問(wèn)題有非常多的學(xué)者進(jìn)行了研究,而且在軟件缺陷預(yù)測(cè)研究領(lǐng)域中不平衡數(shù)據(jù)集對(duì)軟件缺陷預(yù)測(cè)方法的效果影響很大[10],目前針對(duì)數(shù)據(jù)集不平衡的研究有多種方法,有向上過(guò)采樣補(bǔ)充少數(shù)樣本方法[11],有向下欠采樣減少多數(shù)樣本方法[12],還有同時(shí)使用過(guò)采樣和欠采樣相結(jié)合減少多數(shù)類(lèi)樣本增加少數(shù)類(lèi)樣本的方法[13]等。本文在研究了以上多種方法后發(fā)現(xiàn)采用向上過(guò)采樣的方法較其他兩種方法能保留更多原始樣本數(shù)據(jù)信息并且在軟件缺陷預(yù)測(cè)方法中分類(lèi)預(yù)測(cè)效果也比較好,所以本文的實(shí)驗(yàn)過(guò)程都是在使用SMOTE方法[11](Synthetic Minority Oversampling Technique)對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理的基礎(chǔ)上進(jìn)行實(shí)驗(yàn),然后在此基礎(chǔ)上使用新提出以隨機(jī)森林分類(lèi)算法作為基分類(lèi)算法并結(jié)合LogicBoost[14]邏輯集成算法集成多個(gè)基分類(lèi)算法進(jìn)行分類(lèi)預(yù)測(cè)的方法進(jìn)行驗(yàn)證并與其他幾類(lèi)常見(jiàn)的分類(lèi)預(yù)測(cè)算法進(jìn)行了比較,同時(shí)為驗(yàn)證對(duì)數(shù)據(jù)集使用過(guò)采樣平衡處理后算法的性能是否提高本文還對(duì)各種方法在原始不平衡數(shù)據(jù)集和平衡后數(shù)據(jù)集的分類(lèi)預(yù)測(cè)結(jié)果進(jìn)行比較。為更有效的評(píng)價(jià)分類(lèi)結(jié)果,本文選擇了準(zhǔn)確率、AUC值、G-mean值三個(gè)業(yè)界認(rèn)可的有效性能評(píng)價(jià)指標(biāo)對(duì)結(jié)果進(jìn)行評(píng)價(jià),并使用NASA MDP數(shù)據(jù)集[15]完成整個(gè)實(shí)驗(yàn)。
2 ?基于LogicBoost的軟件預(yù)測(cè)方法
2.1 ?SMOTE采樣
數(shù)據(jù)集不平衡的問(wèn)題一直是分類(lèi)問(wèn)題最大的困擾,而對(duì)于需要預(yù)測(cè)的有缺陷的數(shù)據(jù)集總是少數(shù),而且在某些數(shù)據(jù)集中占比非常低,為解決樣本少,特征缺失的問(wèn)題,Chawla等人提出了SMOTE方法,該方法通過(guò)計(jì)算少數(shù)樣本k個(gè)相鄰樣本間的歐式距離得到最近鄰的k個(gè)樣本,然后生成0到1之間的隨機(jī)數(shù)與隨機(jī)抽取的近鄰樣本合并生成新樣本,重復(fù)這個(gè)過(guò)程直到樣本間達(dá)到平衡。其具體生成生新樣本的方法如式1所示,其中Pj表示新樣本,N表示生成樣本數(shù)量。
2.2 ?LogicBoost算法
Logitboost算法是由Friedman等人提出的一種改進(jìn)型Boosting算法[16],是一種集成各弱分類(lèi)器結(jié)果變成強(qiáng)分類(lèi)器的集成分類(lèi)算法。LogitBoost使用加權(quán)最小二乘法估計(jì)分類(lèi)函數(shù)并以加權(quán)的方式對(duì)基礎(chǔ)分類(lèi)器的結(jié)果進(jìn)行評(píng)價(jià),如果分類(lèi)結(jié)果出現(xiàn)錯(cuò)誤則會(huì)加大其權(quán)重,相反權(quán)重減小,通過(guò)迭代多次每次給不同的基礎(chǔ)分類(lèi)器重新計(jì)算權(quán)重,最后采用加權(quán)的方式合成各基礎(chǔ)分類(lèi)器的分類(lèi)結(jié)果作為最終分類(lèi)結(jié)果,具體現(xiàn)過(guò)程如下:
(1)給定一個(gè)測(cè)試集(xi1, xi2…xin, yi),yi={Y, N}表示有缺陷和無(wú)缺陷兩類(lèi)。
(2)給樣本賦予權(quán)重wi=1/N, i=1…N,使得每個(gè)樣本被抽到的概率一致,然后使用基礎(chǔ)分類(lèi)器,根據(jù)權(quán)重以迭代的方式建立預(yù)測(cè)模型,每一輪提升都會(huì)給錯(cuò)誤分類(lèi)的樣本增加權(quán)重,正確的減小權(quán)重,其中F(x)=0, Pi=1/2。
(3)假定算法迭代M次,m=1,2,…,M
2.3 ?隨機(jī)森林算法
隨機(jī)森林是由Breiman提出的一種基于Bagging[17]算法與隨機(jī)子空間算法[18]的集成算法,其基本思想是多個(gè)決策樹(shù)對(duì)同一個(gè)測(cè)試數(shù)據(jù)集進(jìn)行分類(lèi)建立隨機(jī)森林決策樹(shù),然后在分類(lèi)預(yù)測(cè)過(guò)程中通過(guò)多個(gè)決策樹(shù)投票的方式統(tǒng)計(jì)所有決策樹(shù)的結(jié)果來(lái)最終判定樣本的分類(lèi)結(jié)果。隨機(jī)森林的算法主要優(yōu)點(diǎn)是算法的準(zhǔn)確性比單個(gè)決策樹(shù)都高,而且每棵決策樹(shù)選擇分類(lèi)屬性可以隨機(jī),同時(shí)每棵決策樹(shù)選擇測(cè)試數(shù)據(jù)集也可以隨機(jī),這兩個(gè)隨機(jī)讓算法減少了算法產(chǎn)生過(guò)擬合的結(jié)果同時(shí)也降低了噪聲樣本數(shù)據(jù)的影響。算法的實(shí)現(xiàn)過(guò)程如下:
輸入:訓(xùn)練樣本數(shù)據(jù)集,特征集合
輸出:隨機(jī)森林決策樹(shù)
(1)隨機(jī)選擇訓(xùn)練樣本數(shù)據(jù)集。對(duì)于每棵樹(shù)而言,隨機(jī)且有放回地從訓(xùn)練集中的抽取N個(gè)訓(xùn)練樣本作為該樹(shù)的訓(xùn)練集。
(2)隨機(jī)選擇訓(xùn)練樣本的特征數(shù)。假定樣本的特征維度為M,指定一個(gè)常數(shù)m< (3)每棵樹(shù)都盡最大程度的生長(zhǎng),并且沒(méi)有剪枝過(guò)程。 (4)所有生成樹(shù)都停止生長(zhǎng)后,隨機(jī)森林決策樹(shù)構(gòu)建完成。 2.4 ?基于LogicBoost的軟件預(yù)測(cè)算法 輸入:測(cè)試數(shù)據(jù)屬性集{A1,A2…An}以及樣本實(shí)例數(shù)據(jù) 輸出:輸出分類(lèi)預(yù)測(cè)結(jié)果和成功率 (1)對(duì)原數(shù)據(jù)集進(jìn)行清理,清楚重復(fù)項(xiàng),以消除重復(fù)項(xiàng)對(duì)測(cè)試結(jié)果過(guò)擬合的影響。 (2)根據(jù)SMOTE規(guī)則對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)樣本隨機(jī)過(guò)采樣增加少數(shù)類(lèi)樣本,采樣比例=(無(wú)缺陷實(shí)例數(shù)/有缺陷實(shí)例數(shù))-1,設(shè)置k=5,即通過(guò)計(jì)算樣本間的歐式距離找到最鄰近的5個(gè)樣本,然后使用隨機(jī)的方式循環(huán)地選擇近鄰樣本乘以隨機(jī)數(shù)增加少數(shù)樣本使數(shù)據(jù)集均衡。 (3)構(gòu)建隨機(jī)森林算法的決策樹(shù)模型,隨機(jī)森林算法默認(rèn)的基分類(lèi)算法為分類(lèi)回歸樹(shù),設(shè)置特征選擇數(shù)量隨機(jī)生成,通過(guò)多次實(shí)驗(yàn)得到選擇訓(xùn)練樣本數(shù)量在70%的時(shí)候效果最好,同時(shí)設(shè)置生成樹(shù)無(wú)限生長(zhǎng)直到葉子只包含一個(gè)類(lèi)別的樣本后停止生長(zhǎng)。 (4)建立LogitBoost計(jì)算模型,生成樣本權(quán)重矩陣,并生成工作變量,建立基于最小二乘法的擬合函數(shù)估計(jì)分類(lèi)函數(shù),并在每次迭代重新計(jì)算權(quán)重和樣本概率。 (5)使用隨機(jī)森林算法作為L(zhǎng)ogitBoost的基礎(chǔ)分類(lèi)器,設(shè)置迭代次數(shù)為100,并使用十折交叉校驗(yàn)的方式把樣本分成十分,每次使用其中九份作為訓(xùn)練數(shù)據(jù)集一份作為測(cè)試集,總共迭代十次最后經(jīng)過(guò)加權(quán)統(tǒng)計(jì)的方式得到所有樣本的分類(lèi)預(yù)測(cè)結(jié)果。 (6)輸出分類(lèi)預(yù)測(cè)結(jié)果和成功率。 3 ?實(shí)驗(yàn)結(jié)果與分析 3.1 ?數(shù)據(jù)集 本文采用NASA公布的MDP軟件缺陷數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)集,并且對(duì)原數(shù)據(jù)集進(jìn)行了清理刪除了原始數(shù)據(jù)集中出現(xiàn)的重復(fù)樣本,具體如表1所示列出了樣本集名稱、樣本總數(shù)、有缺陷樣本數(shù)、無(wú)缺陷樣本數(shù)以及不平衡度,其中不平衡度等于無(wú)缺陷樣本和有缺陷樣本的除數(shù),可以發(fā)現(xiàn)數(shù)據(jù)集非常不平衡,從1.84到45.56不等。 3.2 ?評(píng)價(jià)標(biāo)準(zhǔn) 為有效評(píng)價(jià)各算法性能,使用分類(lèi)混淆矩陣如表2表示預(yù)測(cè)完成后各項(xiàng)結(jié)果數(shù)據(jù),其中TP表 ? 示有缺陷樣本被正確預(yù)測(cè)的數(shù)量,F(xiàn)N表示無(wú)缺陷樣本預(yù)測(cè)成有缺陷樣本數(shù)量,F(xiàn)P表示有缺陷樣本預(yù)測(cè)為無(wú)缺陷樣本數(shù)量,TN表示無(wú)缺陷樣本正確預(yù)測(cè) ?數(shù)量。 評(píng)價(jià)標(biāo)準(zhǔn)一:準(zhǔn)確率(Acc),即有缺陷樣本和無(wú)缺陷樣本都預(yù)測(cè)正確在整個(gè)樣本中的比例。 3.3 ?實(shí)驗(yàn)結(jié)果與分析 本文實(shí)驗(yàn)分成三個(gè)步驟,首先使用SMOTE隨機(jī)過(guò)采樣方法增加少數(shù)樣本數(shù)量使數(shù)據(jù)集達(dá)到均衡;第二步使用本文提出的新集成方法在數(shù)據(jù)集上使用十折交叉校驗(yàn)的方式計(jì)算預(yù)測(cè)結(jié)果;第三步實(shí)現(xiàn)其他三個(gè)分類(lèi)預(yù)測(cè)算法并與本文提出的方法進(jìn)行比較,分類(lèi)預(yù)測(cè)結(jié)果如表3所示。本文借助WEKA平臺(tái)實(shí)現(xiàn)的開(kāi)源算法模擬整個(gè)實(shí)驗(yàn)過(guò)程。 通過(guò)以上實(shí)驗(yàn)可以得到本文方法在三個(gè)評(píng)價(jià)標(biāo)準(zhǔn)上較其他三個(gè)分類(lèi)預(yù)測(cè)方法都表現(xiàn)比較好,圖1和圖2列出了各方法在數(shù)據(jù)集未做平衡處理與平衡處理后在數(shù)據(jù)集上的準(zhǔn)確率柱形圖,可以看到各算法在數(shù)據(jù)集平衡處理前后算法性能有不同程度的提升,而本文提出的方法樣本數(shù)據(jù)平衡的情況下預(yù)測(cè)性能比其他方法的準(zhǔn)確率都高。 4 ?結(jié)論 本文基于LogicBoost算法和隨機(jī)森林算法提出一種新的集成分類(lèi)預(yù)測(cè)算法,該算法使用隨機(jī)森林分類(lèi)算法作為基分類(lèi)算法,有效發(fā)揮了隨機(jī)森林算法的高分類(lèi)精度優(yōu)勢(shì),同時(shí)結(jié)合LogicBoost集成算法進(jìn)一步提高預(yù)測(cè)精度。選擇的NASA MDP數(shù)據(jù)集是美國(guó)宇航局公布的軟件缺陷數(shù)據(jù)集,該數(shù)據(jù)集收集了多個(gè)軟件的度量屬性和樣本數(shù)據(jù),是軟件缺陷研究領(lǐng)域可直接進(jìn)行分類(lèi)預(yù)測(cè)的數(shù)據(jù)集。本文選擇了其中 12個(gè)基礎(chǔ)數(shù)據(jù)集驗(yàn)證提出方法的預(yù)測(cè)效果,同時(shí)采用原始數(shù)據(jù)集和使用SMOTE方法隨機(jī)過(guò)采樣均衡的數(shù)據(jù)集兩個(gè)差異性的數(shù)據(jù)集進(jìn)行對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明本文提出的方法在均衡數(shù)據(jù)集上效果比其他預(yù)測(cè)算法有較高的性能。雖然本文預(yù)測(cè)結(jié)果對(duì)比其他幾類(lèi)分類(lèi)算法較好,但本文未考慮多特征屬性對(duì)算法結(jié)果的影響,下一步將著重研究多特征屬性提取后驗(yàn)證本文方法是否有更高的預(yù)測(cè)精度。 參考文獻(xiàn) [1] 孔軍, 吳偉明, 谷勇浩. 基于缺陷模式匹配的靜態(tài)源碼分析技術(shù)研究[J]. 軟件, 2016, 37(11): 146-149. [2] 郝世錦, 崔冬華. 基于缺陷分層與PSO算法的軟件缺陷預(yù)測(cè)模型[J]. 軟件, 2012, 33(2): 51-52. [3] JIN C, JIN S W, YE J. Artificial neural network-based metric selection for software fault-prone prediction model[J]. IET Software, 2012, 6(6): 479-487. [4] LARADJI I H, ALSHAYEB M, GHOUTI L. Software defect prediction using ensemble learning on selected features[J]. Information & Software Technology, 2015, 58: 388-402. [5] WANG J, SHEN B, CHEN Y. Compressed C4. 5 models for software defect prediction[C]//Proc of 2012 12th international conference on quality software.Washington DC: IEEE, 2012: 13-16. [6] 段明璐. 軟件故障樹(shù)算法建模的研究[J]. 軟件, 2018, 39(2): 66-74. [7] PUSHPHAVATHI T P, Suma V, RAMASWAMY V. A novel method for software defect prediction: hybrid of FCM and random forest[C]//2014 International Conference on Electronics and Communication Systems (ICECS). Piscataway: IEEE Press, 2014: 1-5. [8] 顏樂(lè)鳴. 基于關(guān)聯(lián)規(guī)則挖掘的軟件缺陷分析研究[J]. 軟件, 2017, 38(1): 70-76. [9] WANG T, ZHANG Z, JING X, et al.Multiple kernel ensem-ble learning for software defect prediction[J]. Automated Software Engineering, 2016, 23(4): 569-59. [10] 劉學(xué), 張素偉. 基于二次隨機(jī)森林的不平衡數(shù)據(jù)分類(lèi)算法[J]. 軟件, 2016, 37(7): 75-79. [11] CHAWLA N V, BOWYER K W, HALL L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2011, 16(1): 321-357. [12] SUN Z, SONG Q, ZHU X, et al. A novel ensemble method for classifying imbalanced data[J]. Pattern Recognition, 2015, 48(5): 1623-1637. [13] 戴翔, 毛宇光. 基于集成混合采樣的軟件缺陷預(yù)測(cè)研究[J]. 計(jì)算機(jī)工程與科學(xué), 2015, 37(5): 930-936. [14] FRIEDMAN J H, TREVOR H,ROBERT T. Additive logistic regression: A statistical view of boosting[J]. The Annals of Statistics, 2000, 38(2): 337-374. [15] SHIRABAD J S, MENZIES T J. The PROMISE repository of software engineering databases[OL]. (2005-03-15)[2019-04- 23]. http://promise.site.uottawa.ca/SERepository. [16] YOAV F. Boosting a weak learning algorithm by majority[J]. Information and Computation, 1995, 121(2), 256-285. [17] BREIMAN L. Bagging predictors[J]. Machine learning, 1996, 24(2): 123-4. [18] HO T K. Random subspace method for constructing decision trees[J]. IEEE Transactions onPattern Analysis & Machine Intelligence, 1998, 20(8): 832-844.