資源簡介
當不同類別的樣本在分布上有交迭部分的,分類的錯誤率主要來自處于交迭區中的樣本,如下圖所示。當我們得到一個作為識別用的參考樣本集時,由于不同類別交迭區域中不同類別的樣本彼此穿插,導致用近鄰法分類出錯。因此如果能將不同類別交界處的樣本以適當方式篩選,可以實現既減少樣本數又提高正確識別率的雙重目的。為此可以利用現有樣本集對其自身進行剪輯。

代碼片段和文件信息
%?=====================重復剪輯近鄰算法(MULTIEDIT)====================
%?s:??劃分的子集數目
%?Xn:?當前樣本集
%?Xcur:?當前樣本集經一次迭代后的樣本集
%?Xi:?當前考試集
%?Xr:?當前參考集
%?K:??退出控制條件,迭代K次,若沒有樣本被剪輯掉,則退出
%?=====================================================================
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);%產生row1行1列的隨機數,隨機數的范圍在0-s之間
????uu=ceil(uu);%取整,向上取整
????for?i=1:s???%樣本隨機劃分為s個子集
????????Xi=Xn((uu==i):);%test?set?%Xi為考試集???
????????r=mod(i+1s);%取余數,在這里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:));%用訓練集中的樣本對考試集中的樣本進行最近鄰分類
????????????if?rClass~=jClass%如果類別不同,則從考試集中分類錯誤的樣本去除
????????????????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?
%?================================================================
%把當前樣本集Xcur中的元素按原類別分類
[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(‘剪輯后樣本分布圖‘)
%?===================分類=================================
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(‘沒有剪輯前的測試點分類的錯誤率為%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(‘重復剪輯后的測試點分類的錯誤率為%8.6f\n‘error);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2999??2019-12-20?21:02??重復剪輯代碼\MultiEdit.m
?????文件????????596??2019-12-20?14:08??重復剪輯代碼\NNforMultiedit.m
?????目錄??????????0??2020-01-07?10:42??重復剪輯代碼
-----------?---------??----------?-----??----
?????????????????3595????????????????????3
評論
共有 條評論