• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: 近邻法  matlab  

资源简介

当不同类别的样本在分布上有交迭部分的,分类的错误率主要来自处于交迭区中的样本,如下图所示。当我们得到一个作为识别用的参考样本集时,由于不同类别交迭区域中不同类别的样本彼此穿插,导致用近邻法分类出错。因此如果能将不同类别交界处的样本以适当方式筛选,可以实现既减少样本数又提高正确识别率的双重目的。为此可以利用现有样本集对其自身进行剪辑。

资源截图

代码片段和文件信息

% =====================重复剪辑近邻算法(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


评论

共有 条评论