Python與MATLAB實(shí)現(xiàn)特征選擇算法ReliefF比較_第1頁
Python與MATLAB實(shí)現(xiàn)特征選擇算法ReliefF比較_第2頁
Python與MATLAB實(shí)現(xiàn)特征選擇算法ReliefF比較_第3頁
Python與MATLAB實(shí)現(xiàn)特征選擇算法ReliefF比較_第4頁
Python與MATLAB實(shí)現(xiàn)特征選擇算法ReliefF比較_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Python/MATLAB實(shí)現(xiàn)特征選擇算法ReliefF對(duì)比)由于Relief算法比較簡單,運(yùn)行效率高,并且結(jié)果也比較令人滿意,因此得到廣泛應(yīng)用,但是其局限性在于只能處理兩類別數(shù)據(jù),因此1994年Kononeill對(duì)其進(jìn)行了擴(kuò)展,得到了ReliefF作算法,可以處理多類別問題。該算法用于處理目標(biāo)屬性為連續(xù)值的回歸問題。ReliefF算法在處理多類問題時(shí),每次從訓(xùn)練樣本集中隨機(jī)取出一個(gè)樣本R,然后從和R同類的樣本集中找出R的k個(gè)近鄰樣本(nearHits),從每個(gè)R的不同類的樣本集中均找出k個(gè)近鄰樣本(nearMisses),然后更新每個(gè)特征的權(quán)重,如下式所示:/=叱刃山兒氏耳)十四y戊鵬4R,

2、的左)在上式巾,防(4&表示樣本國和樣本乩在特征a上的差,其計(jì)算公式,心如叼聞aMyo表示類c中的第f個(gè)最近鄰樣本如下式所示:rtiflA)min(上0獷'J疝and舄,1ifA店discreteand4且錄五月理奧嫉,算法具體的偽代碼如下所示.設(shè)訓(xùn)練數(shù)據(jù)集為。,樣本抽樣次數(shù)川,特征權(quán)重的閾值冊(cè)最近鄰樣本個(gè)數(shù)匕輸出為各個(gè)特性的特征權(quán)重L置所有特征權(quán)重為0,T為空集.2 .fari1to或曲1)從中隨機(jī)選At樣本號(hào)2)從式的同類樣本集中找到尺的k個(gè)最近鄰凡3=13,從每一個(gè)不同類樣本集中找出k個(gè)最近鄰M.C):3 .ybrH=1roXAUfeaturedo二叭冉,加:乩艮H)(雨

3、的十JendRelief系列算法運(yùn)行效率高,對(duì)數(shù)據(jù)類型沒有限制,屬于一種特征權(quán)重算法,算法會(huì)賦予所有和類別相關(guān)性高的特征較高的權(quán)重,所以算法的局限性在于不能有效的去除冗余特征按照偽算法,用Python實(shí)現(xiàn)如下:(花了大半天的時(shí)間才完成,哈哈)#coding=utf-8importpandasaspdfromsklearn.clusterimportKMeansfromsklearn.externalsimportjoblibimportmatplotlib.pyplotaspltimportnumpyasnp#frommatplotlib.colorsimportcnamesimportran

4、dom#importseabornassns#c010rs=u'blue',u'yellow',u'red',u'green',u'cyan',u'magenta',u'black'#colors.extend(filter(lambdax:len(x)<7andxnotincolors,cnames.keys()#設(shè)置不同顏色集合defRandomSampling(dataMat,number):#無放回隨機(jī)抽樣try:slice=random.sample(dataMat,

5、number)returnsliceexcept:print'samplelargerthanpopulation'defRepetitionRandomSampling(dataMat,number):#有放回隨機(jī)抽樣sample=foriinrange(number):sample.append(dataMatrandom.randint(0,len(dataMat)-1)returnsampledefSystematicSampling(dataMat,number):#系統(tǒng)抽樣無放回length=len(dataMat)k=length/numbersample=i=0

6、ifk>0:whilelen(sample)!=number:sample.append(dataMat0+i*k)i+=1returnsampleelse:returnRandomSampling(dataMat,number)defReliefF(mymat,N=20,K=6,M=40):#mymat為數(shù)組且最后一列為分類的,N#執(zhí)行次數(shù)K=6#最近的k個(gè)樣本M=40抽樣次數(shù)rows,cols=mymat.shaperows=rows*1.0mylabel=np.array(mymat:,cols-1)#類另1J變量,因變量y#N=20#執(zhí)行次數(shù)#K=6赧近的k個(gè)樣本plt.figu

7、re()Amax_min_diff=mymat:,0:cols-1.max(axis=0)-mymat:,0:cols-1.min(axis=0)dislabels=np.unique(mylabel)#list(pd.unique(mylabel)#np.unique(mylabel)classSet=labNumDict=pd.DataFrame(mymat:,cols-1),columns='labels').groupby(by='labels')'labels'.agg(u"nums":np.size).to_dic

8、t()'nums'WA=foriindislabels:classSeti=np.array(pd.unique(mymatnp.where(mylabel=i)0,0:cols-1).tolist()forlpinxrange(N):w=np.zeros(shape=(cols-1)#0*(cols-1)forlinxrange(M):Rset=RandomSampling(mymat,1)0#隨機(jī)抽樣Rtype=Rsetcols-1#抽出的樣本類別Rdata=np.array(Rset0:cols-1.tolist()#樣本數(shù)據(jù)foriindislabels:Dsub=cl

9、assSetiTopK=pd.DataFrame(Dsub-Rdata)*2).sum(axis=1),columns='sumSquare').sort_values(by='sumSquare').head(K).index.tolist()ifi=Rtype:w=w-np.array(np.abs(DsubTopK-Rdata)/Amax_min_diff).tolist().sum(axis=0)else:pc=(labNumDicti/rows)/(1-(labNumDictRtype/rows)w=w+pc*np.array(np.abs(DsubT

10、opK-Rdata)/Amax_min_diff).tolist().sum(axis=0)w=list(w/(K*M)plt.plot(w)WA.append(w)WA=np.array(WA)plt.show()ranklist=list(pd.DataFrame(WA.mean(axis=0),columns='weight').sort_values(by='weight').index)returnranklist,WA.mean(axis=0)#結(jié)果按權(quán)值從小到大排序mydata=pd.read_csv('d:/breast-cancer-w

11、isconsin.data',header=None,sep=',',na_values='?')#mydata.columns=u'id',u'塊厚度,u'細(xì)胞大小均勻性,u'細(xì)胞形態(tài)均勻性,u'粘附力,u細(xì)胞尺寸,u'裸核',u'Bland',u'正常核彳!',u'核分裂,u'分類'mydata6=mydata6.astype(float).fillna(mydata6.mean()#只有在column名字為純數(shù)值的情況下可用#my

12、data10=mydata10.apply(lambdax:x=2and'x1'or'x2')mymat=np.array(mydata.iloc:,1:11)#自變量數(shù)組rows,cols=mymat.shapeRankList,Weights=ReliefF(mymat,M=80)#結(jié)果按權(quán)值從小到大排序#代碼完結(jié)卜面用案例數(shù)據(jù)進(jìn)行數(shù)據(jù)驗(yàn)算本文實(shí)驗(yàn)數(shù)據(jù)來自著名的UCI機(jī)器學(xué)習(xí)數(shù)據(jù)庫,該數(shù)據(jù)庫有大量的人工智能數(shù)據(jù)挖掘數(shù)據(jù),網(wǎng)址為:http:/ml/。選用的數(shù)據(jù)來類型為:BreastCancerWisconsin(Origi

13、nal)DataSet,中文名稱為:威斯康星州乳腺癌數(shù)據(jù)集。這些數(shù)據(jù)來源美國威斯康星大學(xué)醫(yī)院的臨床病例報(bào)告,每條數(shù)據(jù)具有11個(gè)屬性。下載下來的數(shù)據(jù)文件格式為breast-cancer-wisconsin.data”屬性名稱說明特征編號(hào)樣品編號(hào)病人身份證號(hào)碼無塊厚度范圍1-101細(xì)胞大小均勻性范圍1-102細(xì)胞形態(tài)均勻性范圍1-103邊緣粘附力范圍I-L0i單上皮細(xì)胞尺寸范圍1-105裸核范圍1-106El&nd染色質(zhì)范圍1-1。j正常核仁范圍1-108核分裂范圍1-109分類分類屬性;2為良性4為惡性10運(yùn)行結(jié)果如下:0.30口25口200.10CL0501M0168各屬性的權(quán)重值,p

14、ython數(shù)組是從0開始,0表示第1個(gè)變量,1表示第2個(gè)變量屬性,依次類推上圖為Python跑出的結(jié)果,下圖為MATLAB跑出的結(jié)果005123567891D屬性蝙號(hào)26I1O0.屬性I0.2237屬性20,1494屬性30J588屬性40.1408屬性50.0732屬性602408屬拄70.1243屬性*0.1979屬性90.0503特征屬性枚重的均值國庇作算法計(jì)算乳腺癌數(shù)據(jù)的特征權(quán)重按照從小到大順序排列,可知,各個(gè)屬性的權(quán)重關(guān)系如下:屬T9屬性5屬性7屬性4屬性2屬性3屬性8屬T1屬性6根據(jù)我們的需要選擇對(duì)應(yīng)的變量因素,如我們選定權(quán)重閥值為0.02,則屬性9、屬性4和屬性5剔除兩個(gè)結(jié)果基本

15、一致,說明算法一致:Python較MatLaB實(shí)現(xiàn)的,算法簡單一些,代碼也要少一些。1、Matlab實(shí)現(xiàn)的算法沒有考慮多分類的情況2、Matlab實(shí)現(xiàn)的算法沒有將比率加入算法中3、python實(shí)現(xiàn)的算法基本考慮了各種情況,但是對(duì)于分類為連續(xù)性的時(shí)要先分類。讓我們看看MATLAB的實(shí)現(xiàn)源碼1.ReliefF特征提取算法Matlab主程序1 %主函數(shù)2 clear;clc;3 10ad('matlab.mat')4 D=data(:,2:size(data,2);%5 m=80;%抽樣次數(shù)6 k=8;7 N=20;%運(yùn)行次數(shù)8 fori=1:N9 W(i,:)=ReliefF(D,

16、m,k);10 end11 fori=1:N%各每次計(jì)算的權(quán)重進(jìn)行繪圖,繪圖N次,看整體效果12 plot(1:size(W,2),W(i,:);13 holdon;14 end15 fori=1:size(W,2)%計(jì)算N次中,每個(gè)屬性的平均值16 result(1,i)=sum(W(:,i)/size(W,1);17 end18 xlabel('屬性編號(hào));19 ylabel('特征權(quán)重);20 title('ReliefF算法計(jì)算乳腺癌數(shù)據(jù)的特征權(quán)重);21 axis(11000.3)22 %繪制每一種的屬性變化趨勢23 xlabel('計(jì)算次數(shù)'

17、);24 ylabel('特征權(quán)重');25 name=char('塊厚度','細(xì)胞大小均勻性,'細(xì)胞形態(tài)均勻性,邊緣粘附力,'單上皮細(xì)胞尺寸,裸核','Bland染色質(zhì),正常核仁,核分裂');26 name=cellstr(name);2728 fori=1:size(W,2)29 figure30plot(1:size(W,1),W(:,i);31 xlabel('計(jì)算次數(shù)');32 ylabel('特征權(quán)重');33 title(char(name(i)'(屬性'

18、;num2Str(i)')的特征權(quán)重變化');34 end2.ReliefF函數(shù)程序1 %Relief函數(shù)實(shí)現(xiàn)2 %D為輸入的訓(xùn)練集合,輸入集合去掉身份信息項(xiàng)目;k為最近鄰樣本個(gè)數(shù)3 functionW=ReliefF(D,m,k)4 Rows=size(D,1);%羊本個(gè)數(shù)5 Cols=size(D,2);%寺征熟練,不包括分類列6 type2=sum(D(:,Cols)=2)/Rows;7 type4=sum(D(:,Cols)=4)/Rows;8 %先將數(shù)據(jù)集分為2類,可以加快計(jì)算速度9 D1=zeros(0,Cols);%H一類10 D2=zeros(0,Cols);施

19、二類11 fori=1:Rows12 ifD(i,Cols)=213 D1(size(D1,1)+1,:)=D(i,:);14 elseifD(i,Cols)=415 D2(size(D2,1)+1,:)=D(i,:);16 end17 end18 W=zeros(1,Cols-1);%初始化特征權(quán)重,置019 fori=1:m%進(jìn)行m次循環(huán)選擇操作20 %從D中隨機(jī)選擇一個(gè)樣本R21 R,Dh,Dm=GetRandSamples(D,D1,D2,k);22 %更新特征權(quán)重值23 forj=1:length(W)%每個(gè)特征累計(jì)一次,循環(huán)24 W(1,j)=W(1,j)-sum(Dh(:,j)/(k*m)+sum(Dm(:,j)/(k*m);%按照公式更新權(quán)重25 end26 endReliefF輔助函數(shù),尋找最近的樣本數(shù)K1 %獲取隨機(jī)R以及找出鄰近樣本2 %D:訓(xùn)練集;D1:類別1數(shù)據(jù)集;D2:類別2數(shù)據(jù)集;3 %Dh:與R同類相鄰的樣本距離;Dm:與R不同類的相鄰樣本距離4 functionR,Dh,Dm=GetRandSamples(D,D1,D2,k)5 %先產(chǎn)生一個(gè)隨機(jī)數(shù),確定選定的樣本R6 r=ceil(1+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論