董慶偉
(閩南理工學院信息管理學院,福建 石獅 362700)
分類問題在實際生活中常見,分類算法的種類也特別多,但由于大多數(shù)的分類算法在分類過程中都是針對相對平衡的數(shù)據(jù)集進行分類,對于數(shù)據(jù)集不平衡的少類樣本沒有重點考慮,所以會導致少類樣本分類準確率低的現(xiàn)象[1]。而在現(xiàn)實生活中,可能會更需要少類樣本分類,比如一萬個人中只有幾個人患某一罕見疾病,這時候就需要重點分類出這幾個樣本。因此,需要針對少類樣本的特性改善算法,提高不平衡數(shù)據(jù)集的分類準確率[2]。處理不平衡數(shù)據(jù)集的分類問題、提高少數(shù)類的分類正確率成為當前分類算法設計的研究熱點[3]。本文針對不平衡數(shù)據(jù)集分類過程中產(chǎn)生的不平衡性問題,嘗試使用采樣技術(shù)與傳統(tǒng)分類算法相結(jié)合的方法,解決不平衡數(shù)據(jù)集的分類過程中產(chǎn)生的問題。首先使用過采樣等技術(shù)對數(shù)據(jù)集進行預處理,產(chǎn)生新的訓練樣本,在一定程度上解決分類樣本的分布不平衡性問題;其次確定基本分類器,采用Adaboost算法對分類器進行學習訓練[4],并輸入測試集進行測試,統(tǒng)計分類結(jié)果并加以分析(包括準確率和錯誤率);最后采用多組數(shù)據(jù)進行測試,驗證此次設計的可行性。
不平衡數(shù)據(jù)集又稱非平衡數(shù)據(jù)集。在一個待分類的樣本中,數(shù)量較小的一類樣本稱為少類樣本或正類樣本,而分布數(shù)量較多的那一類樣本稱為多類樣本或負類樣本[5]。不平衡數(shù)據(jù)集因為自身樣本分類不平衡的特點,在分類過程中會帶來許多問題和難點。
Adaboost算法的思想是:通過改變權(quán)值來對基本分類器進行訓練和學習,然后把多個分類器算法的核心內(nèi)容通過改變樣本的權(quán)重值來實現(xiàn),對于分類正確的樣本就減小權(quán)值,對于分類錯誤的樣本則增加權(quán)值[1],這樣能在下一次分類過程中著重對分類錯誤的樣本進行分類;將重新分配過權(quán)值新訓練集送到下層分類器進行新的訓練,得到更加精確的分類效果;把每次訓練得到的分類器根據(jù)一定的原則進行組合,形成一個新的強分類器,作為最后的決策分類器??傮w來說,Adaboost算法就是把分類重點放在那些難以分類的樣本上面,從根本上解決少類樣本的分類難題,提高整體的分類效果。算法整體流程如圖1所示。
圖1 Adaboost算法整體流程圖
從圖1可以看出,Adaboost算法整個過程可以分為兩個部分:第一部分為迭代過程;第二部分為分類器的加權(quán)組合過程。第一步,首先將輸入的訓練集樣本權(quán)值設為1/N,然后用分類器1進行分類,得出分類錯誤率和分類權(quán)重,根據(jù)得到的分類結(jié)果和錯誤率以及權(quán)值a來更新樣本權(quán)值,從而形成新的訓練集DATA2;再利用基本分類器2進行分類,同上述一樣,再次更新樣本權(quán)值得到若干基本分類器和權(quán)重。第二步就是根據(jù)得到的分類器權(quán)值a進行加權(quán)投票,從而組合成一個強分類器。對不平衡數(shù)據(jù)集進行一個采樣預處理,通過增加少類樣本的數(shù)量,在一定程度上減緩不平衡數(shù)據(jù)集的不平衡性,然后用基本分類器學習算法來處理訓練集,構(gòu)建一個強分類器,再用測試集進行測試,得出分類結(jié)果并進行分析。
1.3.1 精確度
精確度用來衡量一個數(shù)據(jù)集的總體分類效果,從整體的角度進行衡量,更多地適合用于反應相對平衡的數(shù)據(jù)集,而不平衡數(shù)據(jù)集的分類不平衡性則很難進行分類效果衡量。
(1)
其中,TP為被正確分類的正類樣本數(shù)量;TN為被正確分類的負類樣本數(shù)量;n+為多類樣本數(shù)量;n-為少類樣本數(shù)量。
1.3.2 準確率
準確率是被正確分類的正類樣本數(shù)量與被分為正類樣本數(shù)量的比。
(2)
其中,TP為被正確分類的正類樣本數(shù)量;FP為錯誤分類的正類樣本數(shù)量。
1.3.3 召回率
召回率反映的是被正確分類的正類樣本數(shù)量與所有樣本數(shù)量的比。
(3)
其中,TP為被正確分類的正類樣本數(shù)量;FN為錯誤分類的正類樣本數(shù)量。
1.3.4 不平衡率
不平衡率是被正確分類的正類樣本數(shù)量與所有樣本數(shù)量的比。
(4)
其中,TP為被正確分類正類樣本數(shù)量;n+為多類樣本數(shù)量;n-為少類樣本數(shù)量。
本文采用Adaboost算法得到實驗數(shù)據(jù),數(shù)據(jù)集包括:第一組數(shù)據(jù)為demo數(shù)據(jù)集,隨機產(chǎn)生200個樣本,樣本維度為2;第二組為heart數(shù)據(jù)集,共有100個樣本,樣本維度為13;第三組為下載的usps數(shù)據(jù)集,共1 000個樣本,樣本維度為256。分別對以上數(shù)據(jù)進行分類測試。
分別使用Adaboost算法和單層決策樹(decision stump)對三組數(shù)據(jù)進行測試,測試結(jié)果如表1所示。數(shù)據(jù)不同,其樣本分布不同;數(shù)據(jù)分布的不平衡影響最終的分類準確率。從表1可以看出,不平衡率越大的數(shù)據(jù)集,分類準確率越低。本文方法在一定程度上能夠提高分類效果,由于樣本數(shù)量不同,所得到的分類效果也不同??傮w來說,測試集和訓練集的分類準確率會隨著迭代次數(shù)、樣本數(shù)量的增大而提高。從實驗結(jié)果來看,隨著樣本不平衡率的提高,樣本分類準確率會相對降低,這是由不平衡數(shù)據(jù)集的不平衡特點所引起的,而本文采用的Adaboost算法在一定程度上能夠減緩樣本不平衡所帶來的問題。
表1 不同樣本得到的分類準確率統(tǒng)計結(jié)果
圖2為訓練集和測試集錯誤率變化圖,其中,y軸代表訓練集和測試集的分類錯誤率,x軸代表分類器迭代次數(shù)。不同的數(shù)據(jù)集樣本平衡度不同,其得到的測試樣本分類準確率也不同,而其隨著迭代次數(shù)的變化而變化。隨著迭代次數(shù)的增加,訓練集錯誤率總體呈逐漸降低趨勢。由于訓練集是用來訓練分類器學習的,所以其準確率要比測試集的準確率要高[5]。不僅迭代次數(shù)能夠引起錯誤率的變化,同樣地,訓練樣本的數(shù)量也影響著最終的分類效果:隨著樣本數(shù)的增加,錯誤率將明顯降低。此外,由圖2(b)可以看到,分類錯誤率并不是一直降低,這是由于Adaboost算法在訓練過程中特別容易受到噪聲數(shù)據(jù)和異常數(shù)據(jù)的影響,結(jié)合基本分類器加權(quán)組合的特性,導致迭代過程中錯誤率不是一直降低。
(a)demo數(shù)據(jù)集
(b)heart數(shù)據(jù)集
(c)usps數(shù)據(jù)集圖2 訓練集和測試集分類錯誤率變化圖
本文首先通過SMOTE算法采樣對不平衡數(shù)據(jù)集進行一個預處理,然后確定采用單層決策樹作為基本分類器,最后進行Matlab編程,構(gòu)建Adaboost算法分類器。得到如下結(jié)論:隨著樣本數(shù)的增大,數(shù)據(jù)集的分類準確率升高;隨著數(shù)據(jù)集不平衡率的增大,分類準確率會有所降低,但相較于傳統(tǒng)的單層決策樹算法而言,準確率有非常明顯的提升,平均分類準確率在85%以上;隨著迭代次數(shù)的增加,訓練集錯誤率總體呈逐漸降低趨勢;通過改變正類樣本的權(quán)值,重視對少類樣本的分類,能夠在一定程度上提高整體的分類效果。