資源簡(jiǎn)介
當(dāng)不同類(lèi)別的樣本在分布上有交迭部分的,分類(lèi)的錯(cuò)誤率主要來(lái)自處于交迭區(qū)中的樣本,如下圖所示。當(dāng)我們得到一個(gè)作為識(shí)別用的參考樣本集時(shí),由于不同類(lèi)別交迭區(qū)域中不同類(lèi)別的樣本彼此穿插,導(dǎo)致用近鄰法分類(lèi)出錯(cuò)。因此如果能將不同類(lèi)別交界處的樣本以適當(dāng)方式篩選,可以實(shí)現(xiàn)既減少樣本數(shù)又提高正確識(shí)別率的雙重目的。為此可以利用現(xiàn)有樣本集對(duì)其自身進(jìn)行剪輯。

代碼片段和文件信息
%?=====================重復(fù)剪輯近鄰算法(MULTIEDIT)====================
%?s:??劃分的子集數(shù)目
%?Xn:?當(dāng)前樣本集
%?Xcur:?當(dāng)前樣本集經(jīng)一次迭代后的樣本集
%?Xi:?當(dāng)前考試集
%?Xr:?當(dāng)前參考集
%?K:??退出控制條件,迭代K次,若沒(méi)有樣本被剪輯掉,則退出
%?=====================================================================
clearclose?all;
X?=?[randn(3002)+ones(3002);...
?????randn(3002)-ones(3002);];
X(1:3003)=1;X(301:6003)=2;
%?====================================================================
figure?plot(X(1:3001)X(1:3002)‘r.‘)
hold?onplot(X(301:6001)X(301:6002)‘b.‘)
title(‘初始樣本分布圖‘)
%?================================================================
s=3;Xcur=X;loop=0;Xold=X;K=5;
while?loop ????Xn=Xcur;
????Xold=Xcur;
????Xcur=[];
????[row1col]=size(Xn);
????uu=unifrnd(0srow11);%產(chǎn)生row1行1列的隨機(jī)數(shù),隨機(jī)數(shù)的范圍在0-s之間
????uu=ceil(uu);%取整,向上取整
????for?i=1:s???%樣本隨機(jī)劃分為s個(gè)子集
????????Xi=Xn((uu==i):);%test?set?%Xi為考試集???
????????r=mod(i+1s);%取余數(shù),在這里S2是S1的考試集,S3是S2的考試集,S1是S3的考試集。
????????if?r==0
????????????r=s;
????????end
????????Xr=Xn((uu==r):);%reference?set%Xr為參考集????
????????[rowcol]=size(Xi);???
????????j=1;
????????while?j<=row
????????????[rClassjClass]=NNforMultiedit(XrXi(j:));%用訓(xùn)練集中的樣本對(duì)考試集中的樣本進(jìn)行最近鄰分類(lèi)
????????????if?rClass~=jClass%如果類(lèi)別不同,則從考試集中分類(lèi)錯(cuò)誤的樣本去除
????????????????Xi(j:)=[];????????????????
????????????????row=row-1;
????????????else
????????????????j=j+1;
????????????end????????????
????????end
????????Xcur=[Xcur;Xi];
????end
????[oldRowcol]=size(Xold);
????[curRowcol]=size(Xcur);
????if?oldRow==curRow???????
????????loop=loop+1;
????else
????????loop=0;
????end
end?
%?================================================================
%把當(dāng)前樣本集Xcur中的元素按原類(lèi)別分類(lèi)
[rowcol]=size(Xcur);
Xcur1=[];Xcur2=[];
tic
for?i=1:row????
????if?Xcur(i3)==1
????????Xcur1=[Xcur1;Xcur(i1:2)];???????
????elseif?Xcur(i3)==2
????????Xcur2=[Xcur2;Xcur(i1:2)];?????
????end
end
time1=toc;
figure?plot(Xcur1(:1)Xcur1(:2)‘r.‘)
hold?onplot(Xcur2(:1)Xcur2(:2)‘b.‘)
title(‘剪輯后樣本分布圖‘)
%?===================分類(lèi)=================================
x_test?=?[?randn(2002)+ones(2002);...
????????????randn(2002)-ones(2002);];
x_test(1:2003)=1;
x_test(201:4003)=2;
[row_testcol_test]=size(x_test);
n=1;
count0=0;
while?n<=row_test
????[class00class01]=NNforMultiedit(Xx_test(n:));
????if(class00~=class01)
????????count0=count0+1;
????end
????n=n+1;
end
error0=count0/400;
fprintf(‘沒(méi)有剪輯前的測(cè)試點(diǎn)分類(lèi)的錯(cuò)誤率為%8.6f\n‘error0);
%-------------------剪輯后的--------------------------------
m=1;
count=0;
while?m<=row_test
????[class1class2]=NNforMultiedit(Xcurx_test(m:));
????if?class1~=class2
????????count=count+1?;
????end
????m=m+1;
end
error=count/400;
fprintf(‘重復(fù)剪輯后的測(cè)試點(diǎn)分類(lèi)的錯(cuò)誤率為%8.6f\n‘error);
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????2999??2019-12-20?21:02??重復(fù)剪輯代碼\MultiEdit.m
?????文件????????596??2019-12-20?14:08??重復(fù)剪輯代碼\NNforMultiedit.m
?????目錄??????????0??2020-01-07?10:42??重復(fù)剪輯代碼
-----------?---------??----------?-----??----
?????????????????3595????????????????????3
評(píng)論
共有 條評(píng)論