国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于遷移學習的軟件缺陷預測算法研究

2019-12-05 08:35何金虎吳翔虎曲明成
智能計算機與應用 2019年5期
關鍵詞:遷移學習

何金虎 吳翔虎 曲明成

摘 要:軟件缺陷預測技術可以用于預測軟件缺陷是否存在以及其可能存在的數(shù)目,以決定軟件是否可以交付,對于軟件性能的提升和質量的保證有著重要的意義。遷移學習則可以利用不同軟件項目中的數(shù)據(jù),進行跨項目的軟件缺陷預測工作,以應對傳統(tǒng)缺陷預測算法中數(shù)據(jù)不足的問題。本文首先闡述了缺陷預測和遷移學習的相關理論研究現(xiàn)狀及其分類,然后對現(xiàn)有的TrAdaboost算法進行優(yōu)化,修改了迭代分類器的評估指標,并結合實驗證明了其合理性和優(yōu)越性。

關鍵詞: 遷移學習;缺陷預測;不平衡數(shù)據(jù)

【Abstract】 Software defect prediction technology can be used to predict the existence of software defects and the number of possible defects to determine whether software can be delivered. It is of great significance for software performance improvement and quality assurance. Transfer learning can use the data in different software projects to perform software defect prediction work across projects to solve the problem of insufficient data in traditional defect prediction algorithms. This paper first expounds the current theoretical research and classification of defect prediction and transfer learning, then optimizes the existing TrAdaboost algorithm, modifies the evaluation index of the iterative classifier, and proves its rationality and superiority by combining experiments.

【Key words】 ?transfer learning; defect prediction; unbalanced data

0 引 言

軟件缺陷,通常指的是軟件實現(xiàn)未能滿足客戶需求。通過對軟件缺陷的預測和發(fā)現(xiàn),可以更好地提高軟件產品質量。現(xiàn)有的軟件缺陷預測方法多為通過對大量已標記的軟件缺陷樣本的訓練,構建一個軟件缺陷預測模型,再對一個新的軟件項目進行預測,以判定其內部各個模塊中是否包含缺陷。已有的模型構建算法通常是應用傳統(tǒng)的機器學習算法,并結合bagging和Boosting的思想,對原始數(shù)據(jù)集進行訓練。但在實際項目中,一個新的問題往往會因為缺少原始數(shù)據(jù)集樣本而無法進行預測,這也正是遷移學習產生的原因。

遷移學習可以利用已經學習到的知識對新的問題進行預測,具體到軟件缺陷預測問題中,就可以利用已有的其它項目或公司的已標記軟件缺陷數(shù)據(jù),選用合適的數(shù)據(jù)預處理和模型訓練算法,對一個新的項目的缺陷進行模型構建和預測?,F(xiàn)有的跨項目缺陷預測技術,大多集中在數(shù)據(jù)預處理階段,如通過度量輔助數(shù)據(jù)集和目標數(shù)據(jù)集之間樣本的相關性,篩選合適的輔助樣本數(shù)據(jù),然后使用傳統(tǒng)的機器學習方法進行模型構建[1];或者通過降維的方式將2個數(shù)據(jù)集的數(shù)據(jù)映射到同一個維度空間等。

同上文中提出的研究方法不同,本文擬結合已有的TrAdaboost[2]遷移學習算法,并針對軟件缺陷數(shù)據(jù)集中存在的數(shù)據(jù)不平衡的問題進行特殊處理,對迭代過程中每個階段的弱分類器的評估指標進行了修改,同時通過一系列的實驗數(shù)據(jù),驗證了其相對于現(xiàn)有算法的優(yōu)越性和合理性。本文對此將展開研究論述如下。

1 相關理論和技術

1.1 遷移學習定義

文中,將討論遷移學習中所涉及到的域和任務的定義。域通常包含2部分內容,即特征空間X與特征空間的邊緣分布函數(shù)P(x),研究中就將域表示為D={X,P(x)}。當域不同時,則往往擁有不同的邊緣分布函數(shù)或特征空間,就軟件缺陷預測問題而言,2個域的特征空間是一致的。任務是同域相結合的,同樣包含2部分,即標簽空間Y與目標預測函數(shù)f(x),該目標預測函數(shù)又可表示為P(Y|X),因此任務往往可以表示為T={Y,P(X|Y)}。

目前,遷移學習算法處理的通常是只有一個輔助領域和一個目標領域的問題,其中輔助領域中存在大量含標簽的樣本,目標領域中僅包含少量含目標樣本,或不含樣本。兩者所面臨的任務相同或存在一定關聯(lián)。

結合上述定義的符號,遷移學習定義[3]如下:已知輔助領域Ds和輔助任務Ts、目標領域Dt和目標任務Tt,且輔助領域和目標領域之間、輔助任務和目標任務之間至少存在一個不同點,此時,遷移學習即為使用輔助領域Ds和Ts中的知識提升或優(yōu)化目標領域Dt中目標預測函數(shù)ft(x)的學習效果。

只有當域和任務兩者之一存在差異時,才會用到遷移學習,否則直接應用傳統(tǒng)的機器學習方法即可。同時,研究中還要求目標領域存在較少、甚至不存在已標記數(shù)據(jù),否則同樣不需要使用遷移學習方法。相對于傳統(tǒng)的機器學習方法而言,遷移學習構建的模型就性能和準確性而言還是有一定差距的,當傳統(tǒng)的機器學習方法條件可以得到滿足時,優(yōu)先使用機器學習方法來構建模型和獲得任務中的預測函數(shù)f(x)。

1.2 軟件缺陷預測技術概述

軟件作為一款虛擬的產品,雖然不會因為硬件的損耗而產生錯誤或者性能下降,但卻有可能因為本身固有的問題,在運行的過程中失效或者產生錯誤的結果,造成經濟損失。

為了盡可能地避免這種損失,預測尚未被發(fā)現(xiàn)的缺陷,軟件缺陷預測技術則應運而生。該項技術研發(fā)時,可以將預測結果應用于軟件測試的指導工作,根據(jù)待預測模塊中包含缺陷的概率,以及預測的缺陷數(shù)目,對包含缺陷概率較大或者數(shù)目較多的模塊進行優(yōu)先和重點測試,從而在測試資源和時間有限的情況下盡可能地發(fā)現(xiàn)更多的缺陷,保證軟件產品的質量。

研究表明,隨著軟件開發(fā)過程成熟度的提高,軟件缺陷的數(shù)目也在隨之下降;此外,開發(fā)人員經驗是否豐富,軟件結構是否合理,軟件規(guī)模是否龐大等一系列因素也都在影響著軟件缺陷的存在數(shù)目,如果可以通過建模,發(fā)現(xiàn)并量化各種因素同缺陷之間的關系,就可以利用統(tǒng)計學的方法來進行軟件缺陷預測的工作。軟件度量指標和軟件質量以及軟件缺陷預測模型之間的關系如圖1所示,其中軟件度量元包括原始數(shù)據(jù)以及相關的域和任務,在構建模型過程中,需要對這些數(shù)據(jù)進行數(shù)據(jù)預處理,包括降噪、特征選擇等,以提高軟件缺陷預測模型的正確性。

軟件缺陷預測技術主要包括靜態(tài)預測技術和動態(tài)預測技術兩類[4]。其中,靜態(tài)預測技術出現(xiàn)得較早,也是當前的研究重點所在,設計原理就是利用軟件度量元的統(tǒng)計對缺陷的數(shù)目和分布做出預測,常見的分類包括基于軟件度量元的缺陷預測技術、軟件缺陷分布預測技術、缺陷預測模型技術;動態(tài)缺陷預測技術則是針對軟件缺陷隨著軟件工程過程或者軟件運行生命周期的變化而變化的趨勢進行預測,得到其分布規(guī)律。

由于缺陷預測數(shù)據(jù)集為不平衡數(shù)據(jù)集,包含有缺陷的樣本所占比例通常不足10%,使用常用的遷移學習算法很難對其做到正確分類,因此需要針對該問題對現(xiàn)有算法加以優(yōu)化,并使用AUC[5]值和缺陷檢出率PD值對其性能進行評估。

2 問題定義和算法設計

2.1 問題定義

為了更好地理解算法偽代碼中的符號含義,現(xiàn)在對研究中可能出現(xiàn)的一些符號進行定義,詳見表1。

其中,訓練數(shù)據(jù)集中輔助領域數(shù)據(jù)集和目標領域數(shù)據(jù)集的長度分別為n和m,一般情況下,n>>m,且m值較小,因為如果m值較大,則說明在目標領域中含有大量的可以用于模型構建和類別預測的訓練數(shù)據(jù),并可以獨立獲取預測函數(shù),此時應用傳統(tǒng)的機器學習方法即可。就數(shù)據(jù)分布而言,Tb和S來源于同一個數(shù)據(jù)域,具有相同的邊緣概率分布,而Ta則有著與S不同的分布。通常意義上,Ta和Tb可以用于預測類似的或者相關的任務,否則2個不同分布的數(shù)據(jù)很難用于同一個問題的訓練工作。結合前述內容,研究中可以做出如下問題定義:

給定大量輔助領域含標簽數(shù)據(jù)集Ta和少量目標領域含標簽數(shù)據(jù)Tb,以及待預測未標注的測試數(shù)據(jù)集S,Tb和S同分布。無論是Ta、還是Tb數(shù)據(jù)集,均滿足正類數(shù)目遠遠小于負類數(shù)目,存在類別不平衡問題。研究中需要利用Ta和Tb結合算法來構建預測模型,使其可以用于S中的標簽預測和標注。

2.2 TrAdaboost優(yōu)化算法設計與分析

在軟件缺陷預測模型構建過程中,選用的數(shù)據(jù)集包括輔助數(shù)據(jù)集和目標數(shù)據(jù)集在內均存在數(shù)據(jù)不平衡問題,數(shù)據(jù)集中含有缺陷的模塊僅占很小的一部分,這也導致在訓練模型過程中,正例和反例不能被同等重視,如果僅僅依據(jù)預測正確率,則無法正確反映模型性能。就軟件缺陷預測問題而言,研究需要預測出更多的包含缺陷的模塊,因此使用缺陷檢出率PD來評估模型能夠更好地契合預定目標,同時PD也是ROC曲線坐標軸的縱軸,F(xiàn)PR為橫軸。

該算法的優(yōu)化思想為:在每次執(zhí)行TrAdaboost算法迭代時,不再通過錯誤率來評估單次迭代分類器的重要性,而是通過簡易的AUC值來度量。這樣可以在每次迭代的過程中,有傾向性地提高真正例率,從而得到更優(yōu)的預測結果。優(yōu)化后TrAdaboost算法的設計代碼見如下。

本次優(yōu)化的部分為算法for循環(huán)內的步驟(3),其中計算的AUC值并不準確,而是將閾值固定后直接依據(jù)分類器的預測結果和實際標簽來結合權重進行計算,得到TPR和FPR兩個值,在此基礎上計算點(0,0),(TPR,F(xiàn)PR),(1,1)以及(1,0)圍成的面積,由于閾值不變,因此該面積僅為近似面積,小于實際的值。關于AUC值的下限設置為0.51,這是因為若設置0.5,權值將不會發(fā)生變化,則下次迭代的結果會完全一致。

3 實驗結果

本實驗中,采用的數(shù)據(jù)集來自于ESEM2016[6]。ESEM2016數(shù)據(jù)集是作者使用增項的SZZ算法和JHawk工具生成的。目前有研究指出,軟件缺陷預測問題常用的數(shù)據(jù)集還包括NASA的數(shù)據(jù)集,但卻存在不開源、前后數(shù)據(jù)不一致等問題,因此本實驗未采用該數(shù)據(jù)集。

ESEM2016數(shù)據(jù)集由2部分組成,也就是:ClassLevel、即類級別和MethodLevel、即方法級別,每一個數(shù)據(jù)集中則包含有42種度量元對應的統(tǒng)計數(shù)據(jù)。本次實驗主要使用ClassLevel級別的數(shù)據(jù),著重測試不同項目之間的遷移效果。

本文通過對比TrAdaboost與優(yōu)化后的TrAdaboost算法在不同數(shù)據(jù)集上的預測效果,驗證了對權值調整后的算法在面對數(shù)據(jù)集不平衡問題時的有效性和優(yōu)越性。該實驗選擇的評估數(shù)據(jù)包括正確率、AUC值以及PD值三種。其中,正確率為統(tǒng)計預測結果正確的樣本數(shù)目所占的比例,AUC值則是通過計算ROC曲線下方區(qū)域的面積得到;PD又稱為錯誤檢出率,PD=TP/(TP+FN)。正如前文研究得到的,正確率無法正確反映預測結果的性能,AUC值和PD值均可反映正例被正確預測的比例,但AUC值同等對待2個類別的預測,而在軟件缺陷預測問題中,研究是致力于能夠更多地檢測出存在的缺陷,同時允許一定數(shù)量的誤判,即將無缺陷樣本預測為有缺陷,因此較好的PD值度量更符合本次研發(fā)的實驗要求。

實驗選取了11個不同的數(shù)據(jù)集,并按照文件名排序后使相鄰的2個數(shù)據(jù)集兩兩結合,前者作為輔助數(shù)據(jù)集,后者作為目標數(shù)據(jù)集,再用其來進行模型的構建和評估,實驗結果見表2。

實驗結果表明,在數(shù)據(jù)集不平衡的軟件缺陷預測問題中,優(yōu)化后的算法在大部分情況下PD值是優(yōu)于原有的TrAdaboost算法的,而AUC值方面兩者則比較接近,較大的PD值也表示可以有更多的缺陷被預測出來。與此同時還發(fā)現(xiàn),相對于傳統(tǒng)的機器學習方法而言,遷移學習的預測效果相對較差,因此在擁有足夠的訓練數(shù)據(jù)時,將優(yōu)先使用傳統(tǒng)的機器學習算法。

4 結束語

軟件缺陷預測可以對軟件的測試和交付提供指導意見,對軟件質量的保證具有實際意義。本文參考了TrAdaboost算法,結合軟件缺陷預測問題的特征,對TrAdaboost算法進行了優(yōu)化,可以在一定程度上應對不平衡數(shù)據(jù)集帶來的問題。

但需指出,該算法還存在一定的局限性。一個缺陷預測模型的構建,除了需要優(yōu)化訓練算法,對于數(shù)據(jù)的預處理也同樣重要。在未來的工作中,需要在輔助數(shù)據(jù)的篩選和度量元的選擇方法上繼續(xù)深入研究,以進一步提升預測模型的性能。

參考文獻

[1]TURHAN B, MENZIES T, BENER A B, et al. On the relative value of cross-company and within-company data for defect prediction[J]. Empirical Software Engineering, 2009, 14(5):540-578.

[2]DAI Wenyuan,YANG Qiang,XUE Guirong,et al. Boosting for transfer learning[C]// Machine Learning, Proceedings of the Twenty-Fourth International Conference (ICML 2007). Corvallis, Oregon, USA:ACM,2007: 193-200.

[3]PAN S J , YANG Qiang. A survey on transfer learning[J]. IEEE Transactions on Knowledge and Data Engineering, 2010, 22(10):1345-1359.

[4]王青,伍書劍,李明樹. 軟件缺陷預測技術[J]. 軟件學報,2008,19(7):1565-1580.

[5]FAWCETT T. An introduction to ROC analysis[J].Pattern Recognition Letters, 2006,27(8):861-874.

[6]SHIPPEY T, HALL T, COUNSELL S, et al. So you need more method level datasets for your software defect prediction?: Voila![C]// the 10th ACM/IEEE International Symposium. Ciudad Real, Spain : ACM, 2016:12.

[7]FREUND Y, SCHAPIRE R E. A decision-theoretic generalization of on-line learning and an application to Boosting[M]//VITNYI P. Computational learning theory. EuroCOLT 1995. Lecture Notes in Computer Science (Lecture Notes in Artificial Intelligence). Berlin/Heidelberg: Springer.1995:23-37.

[8]JOSHI M V, KUMAR V, AGARWAL R C. Evaluating boosting algorithms to classify rare cases: Comparison and improvements[C]// Proceedings of the 1st IEEE International Conference on Data Mining. Washington DC: IEEE, 2001:257-264.

猜你喜歡
遷移學習
《宋史·曾公亮傳》傳主形象論析
基于深度神經網(wǎng)絡的人體動作識別研究
威斯頓相互作用法在社會保險學課程教學中的實踐
基于卷積神經網(wǎng)絡的圖像分類技術
遷移學習在專業(yè)課程教學中的實踐研究
遷移學習研究綜述
從認知角度探討大學英語網(wǎng)絡教學模式
奇異值分解與移移學習在電機故障診斷中的應用
一種基于遷移極速學習機的人體行為識別模型
大數(shù)據(jù)環(huán)境下基于遷移學習的人體檢測性能提升方法
鲜城| 崇文区| 旌德县| 德清县| 涞水县| 井研县| 内乡县| 宝清县| 通海县| 修武县| 从江县| 海晏县| 河津市| 宁海县| 越西县| 汉中市| 安图县| 常山县| 桓台县| 武夷山市| 平邑县| 方城县| 金坛市| 密山市| 彩票| 昭平县| 景德镇市| 永吉县| 萨迦县| 二连浩特市| 无为县| 运城市| 宁远县| 七台河市| 宜良县| 北安市| 鲁甸县| 阿瓦提县| 陇南市| 和田县| 江孜县|