林芷欣,劉遵仁,紀 俊
(青島大學(xué) 計算機科學(xué)技術(shù)學(xué)院,山東 青島 266071)
為了有效去除冗余信息,并且不改變原始信息的分類能力,屬性約簡算法隨之產(chǎn)生。在鄰域粗糙集中,為了能快速得到屬性約簡,Hu等提出基于屬性重要度的前向貪心式屬性約簡算法;Hu等又通過研究正域的變化,發(fā)現(xiàn)新加入的屬性不會改變之前正域樣本的性質(zhì),由此提出了FARNeMF算法。Liu等通過改進Hu等的FARNeMF算法,提出了FHARA算法[1]。以上3種算法,都是通過逐漸優(yōu)化所選待測樣本,來降低鄰域計算的次數(shù),達到節(jié)省算法的時間開銷的目的。但是,上述算法在貪心選擇重要度高的屬性時,一直保持著高維計算,算法復(fù)雜度高,且重復(fù)計算較多,浪費資源[2]。基于這種情況,本文在算法屬性重要度的計算上做了一些改進,提出一種屬性重要度計算方法,根據(jù)樣本k近鄰條件屬性與決策屬性的關(guān)系[3,4],重新給出了屬性重要度的定義,降低計算維度,提高算法運行效率。另外,考慮到條件屬性之間的關(guān)聯(lián)程度,也會對約簡結(jié)果產(chǎn)生影響,因此引入相關(guān)系數(shù)的概念,降低屬性間關(guān)聯(lián)程度對屬性約簡結(jié)果的影響[5]。實驗結(jié)果表明,本文提出的算法能獲得較好的屬性,并得到較高的分類精度。
粗糙集理論認為,客觀世界可以抽象為一個知識表達系統(tǒng)。這個知識表達系統(tǒng)又可以被看成是一個關(guān)系數(shù)據(jù)表,表的行代表被研究的對象,表的列代表被研究對象的屬性,對象信息就通過各屬性對應(yīng)的屬性值來表達[6]。給定一四元組DT=(U,A,V,f) 是一個知識表達系統(tǒng),知識表達系統(tǒng)的詳細定義請參考文獻[7]。
定義1 設(shè)DT=(U,A,V,f), 若P?A, 對論域上的一個對象子集X?U, 定義X關(guān)于P的上近似、下近似和邊界域分別為
(1)
(2)
(3)
定義2 在給定實數(shù)空間Ω上的非空有限集合U={x1,x2,…,xn},U={x1,x2,…,xn} 對U中任意對象xi的δ-鄰域定義為:δ(xi)={x|x∈U,d(x,xi)≤δ}。
其中δ≥0,d為距離函數(shù)。δ(xi) 稱作由xi生成的δ-鄰域信息粒子,簡稱為xi的鄰域粒子。
定義3 給定一四元組NDT=(U,C∪D,V,f) 為鄰域決策系統(tǒng),C是條件屬性集,D是決策屬性集,C∩D=φ。D將U劃分為N個等價類: (X1,X2,…,XN), 對?B?C,X關(guān)于B的下近似、上近似和邊界域分別為
(4)
(5)
(6)
已有的基于屬性重要度的約簡算法,它們大部分都是基于Hu提出的屬性重要度概念,在選擇下一個屬性時,需要計算所有未選入約簡集合的屬性的重要度,最后貪心的選擇一個屬性并入約簡集合[2]。雖然后來提出的FHARA算法優(yōu)化了待測樣本的數(shù)量問題,但還是避免不了其中需要進行很多重復(fù)的鄰域計算操作。針對這個問題本文提出了一種k近鄰屬性重要度算法,通過依次計算每一維度下樣本點x的k近鄰異類樣本點平均距離和k近鄰?fù)悩颖军c平均距離的比值,來判斷每一維度屬性對同類和異類樣本的區(qū)分能力,并將其作為屬性重要度的衡量指標。但由于該方法只考慮了樣本條件屬性對決策類的影響,忽略了條件屬性之間可能存在的相互影響[8],因此,本文再將屬性間相關(guān)系數(shù)融入到屬性約簡算法中。當屬性約簡集擬并入新屬性時,新屬性需要和約簡集中已有屬性進行相關(guān)系數(shù)計算,若相關(guān)系數(shù)較高,則新屬性不加入約簡集,反之,新屬性加入約簡集,直至得到最終的屬性約簡。
基于鄰域粗糙集屬性重要度的定義最先是由Hu提出的,他給出的定義請參見文獻[6]。
比較典型的基于屬性重要度的約簡算法有Hu提出的FARNeMF算法和Lin提出的FHARA算法。通過分析可知,現(xiàn)有屬性重要度的定義是通過并入集合的屬性集所劃分的正域大小判斷。也就是說,一個屬性的加入,能讓越多的樣本劃入正域,這個屬性的重要度就越大。但每當要并入一個新的屬性時,都需要將所有未并入的屬性依次與已經(jīng)選擇的屬性集相并,計算它們的正域大小[9,10]。最終選擇ak, 使其滿足
SIG(ak,red,D)=max(SIG(ai,red,D))
(7)
(8)
式中:posi表示加入第i個屬性時,樣本進行正域判定所耗時間。
基于傳統(tǒng)屬性重要度的約簡算法中新屬性并入時正域的計算量雖然是一個降維的過程,但由于屬性約簡算法最終選擇的屬性較少,因此,即便是一個降維的過程,每次貪心選擇屬性時,平均正域的計算量也是維持在n維左右,算法計算量偏大,重復(fù)的正域計算較多[11]。本文提出的基于k近鄰的屬性重要度算法,在并入新屬性時只需進行一維正域計算,算法計算量減少,運行效率較高。算法具體描述如下:
(9)
算法1: 基于k近鄰的屬性重要度算法
輸入:NDT=(U,C∪D,V,f), 樣本抽樣次數(shù)m, 最近鄰樣本個數(shù)k
輸出: 條件屬性的屬性重要度序列
(1)初始化,Pow=0
(2)?x∈U
forj=1∶n
1)在每一維度下, 找距離樣本x最近的k個同類樣本點 (x1,x2,…,xk) 和k個異類樣本點 (y1,y2,…,yk)。
end
(3)Order=sort(Powj)
(4)return Order
在2.2節(jié)提出的屬性重要度的計算方法,只考慮了單個條件屬性對決策屬性的影響,沒有考慮條件屬性之間的關(guān)系也會對約簡結(jié)果產(chǎn)生影響。如果兩個條件屬性的相關(guān)性較強,二者又都在約簡結(jié)果中,就會導(dǎo)致數(shù)據(jù)冗余[12]。因此為了避免數(shù)據(jù)冗余,本文引入秩相關(guān)系數(shù)計算條件屬性間的相關(guān)性,去除多余屬性[10]。
定義4 給定一鄰域決策系統(tǒng)NDT=(U,C∪D,V,f), ?ai,aj∈C, 將ai和aj中的數(shù)據(jù)按照屬性值從小到大分別進行排序后對每個對象進行編秩,第k個對象在ai,aj屬性下對應(yīng)的秩次分別為xk和yk, 則ai和aj的相關(guān)系數(shù)ρij定義為
(10)
下面給出一求某對屬性相關(guān)系數(shù)的例子。
例1:給定一決策表,見表1。求表中屬性a,b的相關(guān)系數(shù)。
表1 決策表
(1)將屬性a的屬性值按從小到大排序,得到一個對象序列 {m5,m2,m3,m4,m1}, 對對象進行編秩得 {m5=1,m2=2,m3=3,m4=4,m1=5}。
(2)如果一個屬性中有屬性值相同,秩次取它們的平均值。屬性a中m2=m3, 所以它們的秩次調(diào)整為m2=m3=(2+3)/2=2.5, 得到新的秩次序列 {m5=1,m2=2.5,m3=2.5,m4=4,m1=5}。
(3)同理可得屬性b下各對象對應(yīng)的秩次序列 {m1=1,m4=2,m2=3,m3=4,m5=5}。
表2 秩次表
(5)根據(jù)相關(guān)系數(shù)計算公式,計算屬性a、b的相關(guān)系數(shù)為0.97。
算法2: 相關(guān)系數(shù)算法
輸入:NDT=(U,C∪D,V,f), 條件屬性子集ai,aj
輸出: 相關(guān)系數(shù)ρij
(1)將對象按ai和aj下對應(yīng)屬性值從小到大排序, 并編秩;
(2)更新秩次序列, 按表中原始對象順序排列;
(4)按照公式計算相關(guān)系數(shù)ρij;
(5)返回ρij。
K2NCRS算法在根據(jù)算法1算出屬性重要度序列后,要依次選取屬性重要度最大的屬性加入約簡集,加入約簡集前,要對擬加入屬性和約簡集中的所有屬性進行相關(guān)系數(shù)的判定,這里需要設(shè)置一個閾值γ。 如果擬加入的屬性和約簡集中其它屬性的相關(guān)系數(shù)都小于γ, 則對擬加入的屬性繼續(xù)進行判斷,若加入后正域的樣本增多,則將該屬性加入約簡集,反之,刪除該屬性。如果擬加入的屬性和約簡集中其它屬性的相關(guān)系數(shù)存在不小于γ的,將擬加入的屬性刪除,繼續(xù)遍歷除約簡集外其它屬性重要度較高的屬性,直至所有樣本都被加入正域。
另外,在進行樣本正域計算時,需要設(shè)置樣本的鄰域大小,為了能獲得較好的效果,本文選用文獻[10]提到的標準差方法,來確定鄰域δ的大小。
算法3: K2NCRS算法
輸入:NDT=(U,C∪D,V,f),δ
輸出: red
(1) 初始化pos=φ,smp=U,flag=φ;
(2) 利用算法1算出屬性重要度序列Order;
(3) red=Order(1);
(4)while sum(smp)~=0
forai=Order-(red∪flag)
flag=φ;
for ?aj∈red
利用算法2, 計算ai和aj的相關(guān)系數(shù)ρij。
ifρij>γ
去掉和已選屬性相關(guān)性大的屬性
else
pos=Pos(smp,[red,ai]);
red=red∪ai;
smp=setdiff(smp,max_pos);
end
end
end
end while
(5) return red
(11)
為檢驗本文算法的性能,從UCI數(shù)據(jù)庫中選取6組常用連續(xù)型數(shù)據(jù)進行實驗,表3給出了數(shù)據(jù)集的詳細描述。另外,為消除數(shù)量級對計算的影響,本文對所有實驗數(shù)據(jù)進行歸一化處理,使得所有實驗數(shù)據(jù)都在[0,1]區(qū)間內(nèi)。
表3 數(shù)據(jù)集描述
實驗將K2NCRS算法與Liu提出的FHARA算法分別在屬性約簡數(shù)量、分類精度及算法運行時間上進行了詳細的對比分析,通過各項實驗數(shù)據(jù)驗證了K2NCRS算法是有效的。并且本文算法實驗結(jié)果是在相關(guān)系數(shù)閾值設(shè)置γ為0.6的條件下得到的。
3.2.1 屬性約簡數(shù)量比較
表4顯示了FHARA算法和K2NCRS算法在約簡前后,屬性數(shù)量的變化。從表中可以看出,當鄰域大小一定時,在wdbc、sonor和wpbc這3組數(shù)據(jù)集上K2NCRS算法得到的屬性比FHARA算法多1個,在diabetes數(shù)據(jù)集上K2NCRS算法約簡得到的屬性比FHARA算法多兩個,在ionosphere和biodeg兩組數(shù)據(jù)集上K2NCRS算法得到的約簡屬性比FHARA算法多3個。整體上看K2NCRS算法約簡得到的屬性數(shù)量比FHARA算法偏多。但是,兩算法約簡后的屬性個數(shù)都明顯少于原始條件屬性的個數(shù),因此,本文K2NCRS算法都能有效刪除冗余信息,達到屬性約簡的效果。
3.2.2 分類精度比較
為獲得約簡后屬性的分類能力,我們選用了SVM分類學(xué)習(xí)算法,選用10折交叉驗證的方法,得到兩算法約簡后屬性分類精度見表5,表5中兩算法在SVM分類器下的分類精度的對比柱狀圖如圖1所示。
表4 屬性約簡數(shù)量比較
表5 SVM分類器下分類精度比較
圖1 SVM分類器下FHARA與K2NCRS算法分類精度對比
圖1橫坐標表示實驗所選屬性集編號,并且該編號順序是按照數(shù)據(jù)集樣本數(shù)量由少至多編排,縱坐標表示約簡后每組屬性集對應(yīng)的分類精度。從圖整體上看,兩種算法對應(yīng)柱體的變化趨勢大致相同,對比兩種算法實驗得到分類精度的最大最小值發(fā)現(xiàn),本文算法分類精度的變化區(qū)間小于 FHARA 算法,說明本文算法能夠得到較好的約簡屬性。從前4組數(shù)據(jù)可以明顯看出,K2NCRS算法的分類精度高于FHARA算法,對比后兩組數(shù)據(jù)發(fā)現(xiàn),K2NCRS算法的分類精度略低于FHARA算法。造成這種現(xiàn)象的原因,是因為本文算法中僅通過兩類相鄰樣本的距離大小來判斷某個屬性的重要度這一條件,隨著樣本數(shù)量的增多,受數(shù)據(jù)中其它噪聲的影響變大,判斷條件的不穩(wěn)定性增大,進而影響屬性重要度的判斷。
3.2.3 相關(guān)系數(shù)閾值選取
計算屬性間相關(guān)系數(shù)時,需要設(shè)置相關(guān)系數(shù)的閾值,通常情況下,相關(guān)系數(shù)大于0.8,代表屬性間相關(guān)性極強,相關(guān)系數(shù)在0.4-0.8代表屬性間有較強的相關(guān)性,相關(guān)系數(shù)低于0.4代表屬性間相關(guān)性較弱。表6~表9分別記錄了相關(guān)系數(shù)閾值γ取0.4,0.5,0.6,0.7時本文算法對應(yīng)得到的屬性約簡數(shù)量和分類精度。
表6 γ=0.4
表7 γ=0.5
表8 γ=0.6
表9 γ=0.7
為了方便觀察,繪制6組數(shù)據(jù)在不同閾值下的分類精度對比折線圖如圖2所示。
圖2 6組數(shù)據(jù)在不同閾值下的分類精度對比
對比表6~表9及圖2,可以發(fā)現(xiàn)當閾值為0.4時,各個數(shù)據(jù)集得到的約簡數(shù)量最少,并且對應(yīng)的分類精度普遍較低,當閾值為0.7時,各個數(shù)據(jù)集對應(yīng)的約簡數(shù)量最多,并且大部分數(shù)據(jù)集對應(yīng)的分類精度隨著閾值的增大也逐漸提高,這是因為當閾值設(shè)置較小時,判斷屬性相關(guān)性的條件就顯得過于嚴苛,因而導(dǎo)致最終剩余屬性較少,且分類精度不高。當閾值設(shè)置較大時,判斷屬性相關(guān)性的條件又顯得過于寬松,不能有效去除冗余屬性,導(dǎo)致最終約簡出的屬性個數(shù)較多,并且閾值較大時對應(yīng)的分類精度的變化也不明顯。綜合考慮,本文算法在閾值為0.6時,約簡得到的屬性個數(shù)不是最大,并且各組數(shù)據(jù)對應(yīng)的分類精度均接近最大值,因此,本文算法的相關(guān)系數(shù)閾值設(shè)為0.6.
3.2.4 運行時間比較
圖3是本文提出的K2NCRS算法與Liu提出的FHARA算法在同一臺機器上的運行時間對比折線圖。對比圖中兩條折線,執(zhí)行K2NCRS算法得到的折線一直在執(zhí)行FHARA算法得到折線的下方,說明對于大部分數(shù)據(jù)集而言,K2NCRS算法的運行效率更高,算法執(zhí)行速度更快。同時,這一結(jié)果也與2.4節(jié)中對兩種算法計算量的分析結(jié)果相吻合。再次驗證了本文提出的基于k近鄰的屬性重要度算法的時間復(fù)雜度低于基于依賴度的屬性重要度算法。所以,K2NCRS算法能獲得更短的時間開銷,算法運行效率更高。
圖3 FHARA與K2NCRS算法運行時間對比
通過以上幾組實驗的對比,雖然本文的K2NCRS算法約簡得到的屬性數(shù)量比基于屬性依賴度的傳統(tǒng)FHARA算法多,但和原始數(shù)據(jù)集的屬性個數(shù)相比,本文算法仍能夠有效去除多余屬性,并根據(jù)最終得到的屬性約簡集也能獲得不錯的分類精度,并且隨著樣本數(shù)量和條件屬性個數(shù)的增多,本文算法的運行時間和FHARA算法的對比就越明顯。
目前鄰域粗糙集下基于屬性重要度的屬性約簡算法,大多都是通過優(yōu)化區(qū)間減少正域計算時比較樣本的數(shù)量,來提高算法的運行效率。但是這種優(yōu)化方法還是避免不了每次貪心選擇屬性時仍需要依次反復(fù)的對所有尚未選擇的屬性進行重要度計算,因此本文從屬性重要度的定義著手,提出一種基于k近鄰的屬性重要度算法,將貪心選擇屬性時重復(fù)的重要度計算改為對每個樣本k近鄰的屬性加權(quán)評估計算,極大提高了算法的運行效率,減少了算法的時間開銷。