近邻法与剪辑近邻法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

云南大学数学与统计学实验教学中心

实验报告

一、实验目的

能根据给出的训练集与测试集,用近邻法,k近邻法与剪辑近邻法, 重复剪辑近邻法给出测试集的分类结果并分别计算其错误率。

二、实验内容

画出近邻法的程序框图,对给定的分别存放在文件“riply_trn.mat”和”riply_tst.mat”中的两类样本训练集250个测试集1000个,试用近邻法,k近邻法与剪辑近邻法, 重复剪辑近邻法给出测试集的分类结果并分别计算其错误率。

三、实验环境

Windows XP

Matlab6.5

四、实验过程

一、程序框图:

二、实验相关代码:

(1)最近邻法

%计算错误率函数

function [P]=ZQL_func(ys,yr)

load riply_tst;

yr=y;

n=size(ys,2);

t=0;

for i=1:n

if ys(i)-yr(i)==0

t=t+1;

end

end

P=1-t/n;

%最近邻函数文件

function [ypd]=ZJL_func(Xtr,ytr,Xts,yts)

[m1,n1]=size(Xtr);

[m2,n2]=size(Xts);

d=zeros(1,n1);

ypd=zeros(1,n2);

for i=1:n2

for j=1:n1

d(j)=(Xts(1,i)-Xtr(1,j))^2+(Xts(2,i)-Xtr(2,j))^2; %欧式距离end

min=d(1);

r=1;

for t=2:n1

if d(t)<=min

min=d(t); %计算最小距离(并保存下标值)

r=t;

end

end

ypd(i)=ytr(r);

end

%最近邻的m文件

load riply_trn;

Xtr=X;

ytr=y;

load riply_tst;

Xts=X;

yts=y;

[m,n]=size(Xts);

yp=zeros(1,n);

yp=ZJL_func(Xtr,ytr,Xts,yts);

p=ZQL_func(yp,yts)

(1)运行结果:

(注:由于分类结果数据过于庞大在此不列出,只将错误率给出)p =

0.1500

(2)k近邻法

% k近邻法函数文件

function [P]= KJL(k)

load riply_trn;

Xtr=X;

ytr=y;

[m1,n1]=size(Xtr);

load riply_tst;

Xts=X;

yts=y;

[m2,n2]=size(Xts);

d=zeros(1,n1);

ypd=zeros(1,n2);

for i=1:n2

for j=1:n1

d(j)=(Xts(1,i)-Xtr(1,j))^2+(Xts(2,i)-Xtr(2,j))^2;

end

a=0;

b=0;

for t=1:n1

for r=t:n1

if d(t)>=d(r)

a=d(t);

d(t)=d(r);

d(r)=a;

b=ytr(t);

ytr(t)=ytr(r); %对距离进行排序

ytr(r)=b;

end

end

end

p=0;

q=0;

for s=1:k

if ytr(s)==1

p=p+1;

else

q=q+1; %寻找最近的k个来判断类别end

end

if p>q

ypd(i)=1;

else

ypd(i)=2;

end

end

ZQL_func(ypd,yts)

%根据作图找使得错误率达到最小的k值

k=25:120;

k1=[44,54];

P2=KJL(k);

figure(1),plot(k,P2(:))

hold on

plot(k1,min(P2(:)),'*r')

hold off

得到图形如下:

从图中可看出当k值在43附近能使得错误率达到最小,约为0.079。(3)剪辑近邻法:

%剪辑法函数文件:

function [Xbz,ybz,n]=JJF_func(Xjs,yjs,Xxs,yxs)

[mj,nj]=size(Xjs);

[mx,nx]=size(Xxs);

d=zeros(1,nj);

k=1;

i=1;

r=0;

min=0;

n=0;

while k<=nx

for j=1:nj

d(j)=(Xxs(1,i)-Xjs(1,j))^2+(Xxs(2,i)-Xjs(2,j))^2;

end

min=d(1);

for t=2:nj

if d(t)<=min

min=d(t);

r=t;

end

end

if yxs(i)-yjs(r)==0

i=i+1;

相关文档
最新文档