模式识别近邻法共63页文档
- 格式:ppt
- 大小:3.76 MB
- 文档页数:63
模式识别实验报告实验一、最近邻规则的聚类算法一、实验要求编写采用最近邻规则的聚类算法,距离采用欧式距离,阈值可设定。
采用二维特征空间中的10个样本对程序进行验证。
x1 = (0,0) ,x2 = (3,8) ,x3 = (2,2) ,x4 = (1,1) ,x5 = (5,3),x6 = (4,8) ,x7 = (6,3) ,x8 = (5,4) ,x9 = (6,4) ,x10 = (7,5)。
二、实验步骤○1、选取距离阈值T,并且任取一个样本作为第一个聚合中心Z1,如:Z1=x1;○2、计算样本x2到Z1的距离D21;若D21≤T,则x2∈Z1,否则令x2为第二个聚合中心,Z2=x2。
设Z2=x2,计算x3到Z1和Z2的距离D31和D32 。
若D31>T和D32>T,则建立第三个聚合中心Z3 ;否则把x3归于最近邻的聚合中心。
依此类推,直到把所有的n个样本都进行分类。
○3、按照某种聚类准则考察聚类结果,若不满意,则重新选取距离阈值T、第一个聚合中心Z1,返回第二步②处,直到满意,算法结束。
三、程序设计详见附件1:test1.m。
四、仿真结果最近邻聚类算法:阈值T=1,第一个聚类中心(5,4)最近邻聚类算法:阈值T=3,第一个聚类中心(5,4)最近邻聚类算法:阈值T=6,第一个聚类中心(5,4)最近邻聚类算法:阈值T=10,第一个聚类中心(5,4)五、结果分析1、考虑阈值对聚类的影响:由上述仿真结果可知,阈值大小对于分类的影响非常大。
当阈值小于1的时候,样本(10个)共分为10类;而当阈值大于10的时候,样本全分为1类;当阈值在其中时,随着阈值的变化分类页多样化。
所以选取合适的阈值是正确分类的前提标准!2、考虑初始聚类中心对聚类的影响:在合适的阈值下,第一个聚类中心的选取对分类结果几乎没有什么影响;而相对的,阈值不合适的情况下,第一个聚类中心的选取对分类结果还是有一些影响,仿真结果会出现一些偏差。
模式识别:K_近邻法最近邻法:保存两个已知分类的样本,用新样本依次与已经保存的两类样本计算欧式距离,分类结果指向距离最小的样本。
K-近邻法:在最近邻法的基础上,引进投票机制,选择若干个距离新样本最近的已知样本,用他所得类别最大票数做为新样本所属类别。
注意:为保证公平,投票数量(k)为奇数欧式距离:||xi-xj||xi,xj为特征向量,||。
||先取绝对值再取模错误率:样本趋于无穷,k值趋于无穷时 k-近邻法的错误率接近贝叶斯错误率算法:涉及的语言以及依赖库:本算法采用python3完成,事先需要安装python3的numpy,pandas,random库。
其中numpy库涉及矩阵运算,以及科学数据处理。
pandas涉及excel文档数据的导入。
random库涉及随机数的产生,用于产生本程序所需要的k_折交叉验证用到的随机分包索引矩阵。
程序:# -*- coding: utf-8 -*-"""Created on Sun Nov 19 17:27:04 2017@author: hasee"""import pandas as pdimport mathimport randomimport numpy as np#读取文件的数据集def read_file(filename):file_data = pd.read_excel(filename,index_col=None,header=None,sheetna me=0)example_data = np.array(file_data)example_data = example_data.tolist()example_data = np.mat(example_data)return example_data#计算矩阵中各元素平方def numplus(plus_data):m,n = np.shape(plus_data)for i in list(range(0,m)):for j in list(range(0,n)):plus_data[i,j]=plus_data[i,j]**2target_data = plus_data.sum(1)m1,n1 = np.shape(target_data)for k in list(range(0,m1)):for v in list(range(0,n1)):target_data[k,v]=np.sqrt(target_data[k,v])return target_data#寻找数量最多的元素的值def maxnum(label_map):label_list = label_map.tolist()num_list=[]m,n=np.shape(label_map)for i in list(range(0,m)): #获取标签矩阵中个数最多的元素b=label_list[i]d=max(b,key=b.count)num_list.append(d)label_mat = np.mat(num_list).Treturn label_mat#K折交叉验证随机分包行标记,row_big为样本集最大行数def rndom_rows(row_big,k):rows = list(range(0,row_big))goals = []rows = set(rows)for i in list(range(0,k)):a = random.sample(rows,int(row_big/k)) #在给定的rows里面选择row_big/k个不同的数b = set(a)rows = rows -bgoals.append(a)goal = np.array(goals)index_matrix = np.mat(goal)return index_matrix#用k_折交叉验证获取训练数据以及测试数据def k_validation(example_data,index_matrix,k1): #k1表式取索引矩阵的第k1组数据作为测试集合exm_list=example_data.tolist() #样本数据转化为列表index_list = index_matrix.tolist() #分包索引矩阵转化问列表m,n = np.shape(exm_list) #获取样本数据大小m1,n1 = np.shape(index_list) #获取索引矩阵大小test=[]train=[]for i in list(range(0,int(m/10))): #遍历index_matrix中数据集测试集索引c = index_list[k1][i]test.append(exm_list[c]) #根据index_d=matrix的索引获取样本集,保存在test列表中test_data=np.mat(test) #样本列表转换成矩阵for x in test: #删除样本集中取出的测试集相等子集exm_list.remove(x)train = exm_listtrain_data = np.mat(train) #训练样本列表转矩阵return test_data,train_data #返回样本集,测试集#获取测试集与训练集的欧式距离矩阵def get_distance(train_data,test_data):m,n = np.shape(train_data)m1,n1=np.shape(test_data)r_train = train_data[:,0:n-1] #获取除标签外的test_data和train_datar_test = test_data[:,0:n1-1]each_row = np.mat(np.zeros((m+1,1))) #建立按列增加的矩阵each_col = np.mat(np.zeros((1,n-1))) #建立按行增加的矩阵for i in list(range(0,m1)):for j in list(range(0,m)):a=r_train[j,:]-r_test[i,:] #计算样本和测试集坐标差each_col=np.vstack((each_col,a)) #按行增加保存在each_col矩阵中target_data = numplus(each_col) #根据坐标差调用numplus()函数,计算欧式距离each_row = np.hstack((each_row,target_data)) #按列增加模式保存在each_row距离矩阵中each_col = np.mat(np.zeros((1,n-1)))distance = each_row #距离矩阵赋值给distancem2,n2 = np.shape(distance)distance_data = distance[1:m2,1:n2] #删除空间分配时产生的零行和零列m,n = np.shape(distance_data)return distance_data #返回距离矩阵#在距离矩阵中实现分类def classify_data(distance,train_data,test_data,K):m,n = np.shape(train_data)pre_clsy = np.hstack((distance,train_data[:,n-1])) #将训练集的标签按行增加的方式,贴到距离矩阵中,距离矩阵中的每一列代表一个样本和所有训练集的欧氏距离pre_clsy = pre_clsy.T #求距离矩阵的转置标签变为最后一行m1,n1=np.shape(pre_clsy)clsy_index = np.mat(np.zeros((1,n1)))for i in list(range(0,m1-1)):index_sort = np.argsort(pre_clsy[i,:]) #按行排序把排好序的数据在未排序之前的元素所在的位置保存在位置矩阵中clsy_index = np.vstack((clsy_index,index_sort))clsy_index = clsy_index[1:m1,:] #获取除标签外的所有行的数据排序后的位置矩阵target_index = clsy_index[:,0:K] #K_近邻法要求取的前k各最小的元素,索引矩阵前k行m2,n2 =np.shape(target_index)for i in list(range(0,m2)):for j in list(range(0,n2)):a=target_index[i,j]target_index[i,j] =train_data[a,n-1] #将索引矩阵映射到原矩阵的标签处label_map = target_indexlabel = maxnum(label_map) #投票求出得票数最多的类型,并将其标签保存target_clsy = np.hstack((test_data,label)) #得到的标签保存后按列扩增后贴到测集合上return target_clsy,label#获取分类的错误率def get_accuracy(target_classify_data):m,n=np.shape(target_classify_data)count=0for i in list(range(0,m)):if target_classify_data[i,n-1] !=target_classify_data[i,n-2]: #判断分类后的标签与原测试数据是否相等,若不相等则count+1 count+=1else:true_rate=(m-count)/m #计算正确率target_classify_data[:,n-2]=target_classify_data[:,n-1] classify_data = target_classify_data[:,0:n-1] #删除原标签,贴上分类判断得到的结果标签return classify_data,true_rate #返回分类最终结果,以及正确率#构建分类器def classify_cot(filename,K):data = read_file(filename) #获取iris数据集m,n = np.shape(data) #获取原数据集行,列大小for k0 in list(range(0,1)): #k_折交叉验证循环,循环次数为子集个index_matrix = rndom_rows(m,10) #获取样本随机分包索引test_data,train_data = k_validation(data,index_matrix,1) #分包得到测试集以及数据集distance = get_distance(train_data,test_data)target_index,label = classify_data(distance,train_data,test_data,K)clsy_data,true_rate = get_accuracy(target_index)print("\n\n")print("------------------------%s-----------------------------------------------------------"%filename)print("分离出来的训练集:")print(train_data)print("分离出来的测试集:")print(test_data)print("标签匹配矩阵")print(target_index)print("分类结果矩阵")print(clsy_data)print("分类正确率")print(true_rate)print("原数据行数:")print(m)print("-------------------------%s-----------------------------------------------------------"%filename)print("\n\n")#定义最近邻分类子函数def B_NN():#最近邻法iris数据集分类iris='iris.xlsx'classify_cot(iris,1)#最近邻法sonar分类sonar = 'sonar.xlsx'classify_cot(sonar,1)#定义k_近邻子函数def K_NN():#最近邻法iris数据集分类iris='iris.xlsx'classify_cot(iris,80)#最近邻法sonar分类sonar = 'sonar.xlsx'classify_cot(sonar,80)B_NN()K_NN()最后:代码是自己根据原理敲出来的,有什么不足之处希望大佬们斧正。
学号:02105120 姓名:吴林一.基本概念:最近邻法:对于未知样本x,比较x与N个已知类别的样本之间的欧式距离,并决策x与距离它最近的样本同类。
K近邻法:取未知样本x的k个近邻,看这k个近邻中多数属于哪一类,就把x归为哪一类。
K取奇数,为了是避免k1=k2的情况。
二.问题分析:要判别x属于哪一类,关键要求得与x最近的k个样本(当k=1时,即是最近邻法),然后判别这k个样本的多数属于哪一类。
可采用欧式距离公式求得两个样本间的距离s=sqrt((x1-x2)^2+(y1-y2)^2)三.算法分析:该算法中任取每类样本的一半作为训练样本,其余作为测试样本。
例如iris中取每类样本的25组作为训练样本,剩余25组作为测试样本,依次求得与一测试样本x距离最近的k 个样本,并判断k个样本多数属于哪一类,则x就属于哪类。
测试10次,取10次分类正确率的平均值来检验算法的性能。
四.MATLAB代码:最近邻算实现对Iris分类clc;totalsum=0;for ii=1:10data=load('');data1=data(1:50,1:4);%任取Iris-setosa数据的25组rbow1=randperm(50);trainsample1=data1(rbow1(:,1:25),1:4);rbow1(:,26:50)=sort(rbow1(:,26:50));%剩余的25组按行下标大小顺序排列testsample1=data1(rbow1(:,26:50),1:4);data2=data(51:100,1:4);%任取Iris-versicolor数据的25组rbow2=randperm(50);trainsample2=data2(rbow2(:,1:25),1:4);rbow2(:,26:50)=sort(rbow2(:,26:50));testsample2=data2(rbow2(:,26:50),1:4);data3=data(101:150,1:4);%任取Iris-virginica数据的25组rbow3=randperm(50);trainsample3=data3(rbow3(:,1:25),1:4);rbow3(:,26:50)=sort(rbow3(:,26:50));testsample3=data3(rbow3(:,26:50),1:4);trainsample=cat(1,trainsample1,trainsample2,trainsample3);%包含75组数据的样本集testsample=cat(1,testsample1,testsample2,testsample3);newchar=zeros(1,75);sum=0;[i,j]=size(trainsample);%i=60,j=4[u,v]=size(testsample);%u=90,v=4for x=1:ufor y=1:iresult=sqrt((testsample(x,1)-trainsample(y,1))^2+(testsample(x,2)-trainsample(y ,2))^2+(testsample(x,3)-trainsample(y,3))^2+(testsample(x,4)-trainsample(y,4))^ 2); %欧式距离newchar(1,y)=result;end;[new,Ind]=sort(newchar);class1=0;class2=0;class3=0;if Ind(1,1)<=25class1=class1+1;elseif Ind(1,1)>25&&Ind(1,1)<=50class2=class2+1;elseclass3=class3+1;endif class1>class2&&class1>class3m=1;ty='Iris-setosa';elseif class2>class1&&class2>class3m=2;ty='Iris-versicolor';elseif class3>class1&&class3>class2m=3;ty='Iris-virginica';elsem=0;ty='none';endif x<=25&&m>0disp(sprintf('第%d组数据分类后为%s类',rbow1(:,x+25),ty));elseif x<=25&&m==0disp(sprintf('第%d组数据分类后为%s类',rbow1(:,x+25),'none'));endif x>25&&x<=50&&m>0disp(sprintf('第%d组数据分类后为%s类',50+rbow2(:,x),ty));elseif x>25&&x<=50&&m==0disp(sprintf('第%d组数据分类后为%s类',50+rbow2(:,x),'none'));endif x>50&&x<=75&&m>0disp(sprintf('第%d组数据分类后为%s类',100+rbow3(:,x-25),ty));elseif x>50&&x<=75&&m==0disp(sprintf('第%d组数据分类后为%s类',100+rbow3(:,x-25),'none'));endif (x<=25&&m==1)||(x>25&&x<=50&&m==2)||(x>50&&x<=75&&m==3)sum=sum+1;endenddisp(sprintf('第%d次分类识别率为%',ii,sum/75));totalsum=totalsum+(sum/75);enddisp(sprintf('10次分类平均识别率为%',totalsum/10));测试结果:第3组数据分类后为Iris-setosa类第5组数据分类后为Iris-setosa类第6组数据分类后为Iris-setosa类第7组数据分类后为Iris-setosa类第10组数据分类后为Iris-setosa类第11组数据分类后为Iris-setosa类第12组数据分类后为Iris-setosa类第14组数据分类后为Iris-setosa类第16组数据分类后为Iris-setosa类第18组数据分类后为Iris-setosa类第19组数据分类后为Iris-setosa类第20组数据分类后为Iris-setosa类第23组数据分类后为Iris-setosa类第24组数据分类后为Iris-setosa类第26组数据分类后为Iris-setosa类第28组数据分类后为Iris-setosa类第30组数据分类后为Iris-setosa类第31组数据分类后为Iris-setosa类第34组数据分类后为Iris-setosa类第37组数据分类后为Iris-setosa类第39组数据分类后为Iris-setosa类第41组数据分类后为Iris-setosa类第44组数据分类后为Iris-setosa类第45组数据分类后为Iris-setosa类第49组数据分类后为Iris-setosa类第51组数据分类后为Iris-versicolor类第54组数据分类后为Iris-versicolor类第55组数据分类后为Iris-versicolor类第57组数据分类后为Iris-versicolor类第58组数据分类后为Iris-versicolor类第59组数据分类后为Iris-versicolor类第60组数据分类后为Iris-versicolor类第61组数据分类后为Iris-versicolor类第62组数据分类后为Iris-versicolor类第68组数据分类后为Iris-versicolor类第70组数据分类后为Iris-versicolor类第71组数据分类后为Iris-virginica类第74组数据分类后为Iris-versicolor类第75组数据分类后为Iris-versicolor类第77组数据分类后为Iris-versicolor类第79组数据分类后为Iris-versicolor类第80组数据分类后为Iris-versicolor类第84组数据分类后为Iris-virginica类第85组数据分类后为Iris-versicolor类第92组数据分类后为Iris-versicolor类第95组数据分类后为Iris-versicolor类第97组数据分类后为Iris-versicolor类第98组数据分类后为Iris-versicolor类第99组数据分类后为Iris-versicolor类第102组数据分类后为Iris-virginica类第103组数据分类后为Iris-virginica类第105组数据分类后为Iris-virginica类第106组数据分类后为Iris-virginica类第107组数据分类后为Iris-versicolor类第108组数据分类后为Iris-virginica类第114组数据分类后为Iris-virginica类第118组数据分类后为Iris-virginica类第119组数据分类后为Iris-virginica类第124组数据分类后为Iris-virginica类第125组数据分类后为Iris-virginica类第126组数据分类后为Iris-virginica类第127组数据分类后为Iris-virginica类第128组数据分类后为Iris-virginica类第129组数据分类后为Iris-virginica类第130组数据分类后为Iris-virginica类第133组数据分类后为Iris-virginica类第135组数据分类后为Iris-virginica类第137组数据分类后为Iris-virginica类第138组数据分类后为Iris-virginica类第144组数据分类后为Iris-virginica类第148组数据分类后为Iris-virginica类第149组数据分类后为Iris-virginica类第150组数据分类后为Iris-virginica类k近邻法对wine分类:clc;otalsum=0;for ii=1:10 %循环测试10次data=load('');%导入wine数据data1=data(1:59,1:13);%任取第一类数据的30组rbow1=randperm(59);trainsample1=data1(sort(rbow1(:,1:30)),1:13);rbow1(:,31:59)=sort(rbow1(:,31:59)); %剩余的29组按行下标大小顺序排列testsample1=data1(rbow1(:,31:59),1:13);data2=data(60:130,1:13);%任取第二类数据的35组rbow2=randperm(71);trainsample2=data2(sort(rbow2(:,1:35)),1:13);rbow2(:,36:71)=sort(rbow2(:,36:71));testsample2=data2(rbow2(:,36:71),1:13);data3=data(131:178,1:13);%任取第三类数据的24组rbow3=randperm(48);trainsample3=data3(sort(rbow3(:,1:24)),1:13);rbow3(:,25:48)=sort(rbow3(:,25:48));testsample3=data3(rbow3(:,25:48),1:13);train_sample=cat(1,trainsample1,trainsample2,trainsample3);%包含89组数据的样本集test_sample=cat(1,testsample1,testsample2,testsample3);k=19;%19近邻法newchar=zeros(1,89);sum=0;[i,j]=size(train_sample);%i=89,j=13[u,v]=size(test_sample);%u=89,v=13for x=1:ufor y=1:iresult=sqrt((test_sample(x,1)-train_sample(y,1))^2+(test_sample(x,2)-train_samp le(y,2))^2+(test_sample(x,3)-train_sample(y,3))^2+(test_sample(x,4)-train_sampl e(y,4))^2+(test_sample(x,5)-train_sample(y,5))^2+(test_sample(x,6)-train_sample (y,6))^2+(test_sample(x,7)-train_sample(y,7))^2+(test_sample(x,8)-train_sample( y,8))^2+(test_sample(x,9)-train_sample(y,9))^2+(test_sample(x,10)-train_sample( y,10))^2+(test_sample(x,11)-train_sample(y,11))^2+(test_sample(x,12)-train_samp le(y,12))^2+(test_sample(x,13)-train_sample(y,13))^2); %欧式距离newchar(1,y)=result;end;[new,Ind]=sort(newchar);class1=0;class 2=0;class 3=0;for n=1:kif Ind(1,n)<=30class 1= class 1+1;elseif Ind(1,n)>30&&Ind(1,n)<=65class 2= class 2+1;elseclass 3= class3+1;endendif class 1>= class 2&& class1>= class3m=1;elseif class2>= class1&& class2>= class3m=2;elseif class3>= class1&& class3>= class2m=3;endif x<=29disp(sprintf('第%d组数据分类后为第%d类',rbow1(:,30+x),m));elseif x>29&&x<=65disp(sprintf('第%d组数据分类后为第%d类',59+rbow2(:,x+6),m));elseif x>65&&x<=89disp(sprintf('第%d组数据分类后为第%d类',130+rbow3(:,x-41),m));endif (x<=29&&m==1)||(x>29&&x<=65&&m==2)||(x>65&&x<=89&&m==3)sum=sum+1;endenddisp(sprintf('第%d次分类识别率为%',ii,sum/89)); totalsum=totalsum+(sum/89);enddisp(sprintf('10次分类平均识别率为%',totalsum/10));第2组数据分类后为第1类第4组数据分类后为第1类第5组数据分类后为第3类第6组数据分类后为第1类第8组数据分类后为第1类第10组数据分类后为第1类第11组数据分类后为第1类第14组数据分类后为第1类第16组数据分类后为第1类第19组数据分类后为第1类第20组数据分类后为第3类第21组数据分类后为第3类第22组数据分类后为第3类第26组数据分类后为第3类第27组数据分类后为第1类第28组数据分类后为第1类第30组数据分类后为第1类第33组数据分类后为第1类第36组数据分类后为第1类第37组数据分类后为第1类第43组数据分类后为第1类第44组数据分类后为第3类第45组数据分类后为第1类第46组数据分类后为第1类第49组数据分类后为第1类第52组数据分类后为第1类第54组数据分类后为第1类第56组数据分类后为第1类第57组数据分类后为第1类第60组数据分类后为第2类第61组数据分类后为第3类第63组数据分类后为第3类第65组数据分类后为第2类第66组数据分类后为第3类第67组数据分类后为第2类第71组数据分类后为第1类第72组数据分类后为第2类第74组数据分类后为第1类第76组数据分类后为第2类第79组数据分类后为第3类第81组数据分类后为第2类第82组数据分类后为第3类第83组数据分类后为第3类第84组数据分类后为第2类第86组数据分类后为第2类第87组数据分类后为第2类第88组数据分类后为第2类第93组数据分类后为第2类第96组数据分类后为第1类第98组数据分类后为第2类第99组数据分类后为第3类第102组数据分类后为第2类第104组数据分类后为第2类第105组数据分类后为第3类第106组数据分类后为第2类第110组数据分类后为第3类第113组数据分类后为第3类第114组数据分类后为第2类第115组数据分类后为第2类第116组数据分类后为第2类第118组数据分类后为第2类第122组数据分类后为第2类第123组数据分类后为第2类第124组数据分类后为第2类第133组数据分类后为第3类第134组数据分类后为第3类第135组数据分类后为第2类第136组数据分类后为第3类第139组数据分类后为第3类第140组数据分类后为第3类第142组数据分类后为第3类第144组数据分类后为第2类第145组数据分类后为第1类第146组数据分类后为第3类第148组数据分类后为第3类第149组数据分类后为第2类第152组数据分类后为第2类第157组数据分类后为第2类第159组数据分类后为第3类第161组数据分类后为第2类第162组数据分类后为第3类第163组数据分类后为第3类第165组数据分类后为第3类第167组数据分类后为第3类第168组数据分类后为第3类第173组数据分类后为第3类第174组数据分类后为第3类五:问题和收获:该算法的优缺点总结为:优点:算法简单且识别率较高;缺点:算法需要计算未知样本x与周围每个样本的距离,然后排序选择最近的k个近邻,计算量和时间复杂度高。
模式识别大作业k- 近邻算法学院:电子工程学院班级:学号:姓名:作业要求一、作业内容编程实现最近邻算法和k-近邻算法,在Iris ( 3 类,每类50 个样本,4维特征),wine 数据集( 3 类,13 维,共178个样本) 上验证其性能。
二、算法描述K 近邻就是在N 个样本中,找出x 的K 个近邻。
设这N 个样本中,来自Wc 类的样本有Nc 个,若K1,K2 ,⋯Kc 分别是K 个近邻中属于W1,W2,⋯,Wc 类的样本数,则我们可以定义判别函数为:决策规则为:若则决策x∈错误!未找到引用源。
这就是K 近邻的基本规则。
三、代码实现Iris function k_jl=k_jl(); temp=importdata('iris.txt');sum=zeros(1,10); for i=1:10data1=temp(1:50,1:4); randnum=randperm(size(data1,1));train1=data1(randnum(1:25),:);test1=data1(randnum(26:50),:);data2=temp(51:100,1:4);randnum=randperm(size(data2,1)); train2=data2(randnum(1:25),:);test2=data2(randnum(26:50),:);data3=temp(101:150,1:4);randnum=randperm(size(data3,1));train3=data3(randnum(1:25),:);test3=data3(randnum(26:50),:);train_sample=cat(1,train1,train2,train3);test_sample=cat(1,test1,test2,test3);k=11;kjl=zeros(1,75);for x=1:75for y=1:75result=sqrt((test_sample(x,1)-train_sample(y,1))^2+(test_sample(x,2)-train_sample(y, 2))^2+(test_sample(x,3)-train_sample(y,3))^2+(test_sample(x,4)-train_sample(y,4))^2 );kjl(1,y)=result;end[B,Ind]=sort(kjl);m1=0;m2=0;m3=0;for n=1:kif Ind(1,n)<=20m1=m1+1;elseif Ind(1,n)>20&&Ind(1,n)<=40m2=m2+1;elsem3=m3+1;endendif(m1>=m2&&m1>=m3) m=1;elseif m2>=m1&&m2>=m3 m=2;else m=3;endif x<=25disp(sprintf('第%d组数据分类后为第%d类',x+25,m));elseif x>25&&x<=50 disp(sprintf('第%d组数据分类后为第%d类',x+50,m));elseif x>50&&x<=75 disp(sprintf('第%d组数据分类后为第%d类',x+75,m));endif (x<=25&&m==1)||(x>25&&x<=50&&m==2)||(x>50&&x<=75&&m==3) sum(1,i)=sum(1,i)+1;endendsum(1,i)=sum(1,i)/75;disp(sprintf(' 分类正确率为%4.2f',sum(1,i)))endadd=0;for j=1:10disp(sprintf('第%d次分类正确率为%4.2f',j,sum(1,j))) add=sum(1,j)+add; enddisp(sprintf(' 平均分类正确率为%4.2f',add/10))Winefunction zx=zx();temp=importdata('wine.txt');sum=zeros(1,10);for i=1:10data_1=temp(1:58,1:4);randnum=randperm(size(data_1,1));train_1=data_1(randnum(1:29),:);test_1=data_1(randnum(30:58),:);data_2=temp(59:116,1:4);randnum=randperm(size(data_2,1));train_2=data_2(randnum(1:29),:);test_2=data_2(randnum(30:58),:);data_3=temp(117:174,1:4);randnum=randperm(size(data_3,1));train_3=data_3(randnum(1:29),:);test_3=data_3(randnum(30:58),:);train_sample=cat(1,train_1,train_2,train_3); test_sample=cat(1,test_1,test_2,test_3); k=11;kjl=zeros(1,87);forxur87 fory287resu-Hsqrt(((Dsflsamp-e(><」Hrainlsamp-e(y-」))>2+aesflsamp-e(><2Hrainlsamp-e(y-2))>2+((Dsflsamp-e(><3H 「ainlsamp-e(yGO))>2+((Ds1:lsamp-e(><4H 「ainlsamp-e(y4))>2k j -?y H r e s u -cendp -n d H s o r t (k j -)八m_k HO 八m2H0 八 m3H0八forn A大if _nd 9n A H 20m—kH m l +—k 八e_seif一 n d (_k SV 20QO QO一nd=H A H 40m 2H m 2+_k 八e-sem 3H m 3+_k八end endif(mlV H m 2QO QO m l V H m3) m H —k八e-seifm 2VH m l QO QOm 2V H m 3mH2 八e-se mH3八endifx 〈H29disp(sp 「inff(»%6肾達議® 淋可R »%d ^x +29』m ))八e-seifX V 29QO QO X A H 58d i s p (s p 「i n f f (-»%d ^»a ®^/t R »%d ^「x +50°m ))八e-seifX V 58QO QO X A H 87disp(sp「inff(»%£|肾達議® 淋可R»%d ^x +87』m ))八endif(X A H 29QO QO m H A ) - - (x v 29QO QO X A H58QO QO m H H 2) - - (x v 58QO QO X A H 87QOQO m H H 3) s u m ?i H s u m ?i )+」八endendsu mujHsum ?i )007 八d i s p (s p r i n f f (-®^m ^4ME%4.2严sum(lj)))endaddHO 八forjuodisp(sp 「inff(»%d舟®^m ^w E %4.2f\Lsumu s )addHsum (二)+add八 enddisp(sprintf(' 平均分类正确率为%4.2f',add/10))四、运行结果组数据分类后为1类第87 组数据分类后为3类组数据分类后为第2类第88 组数据分类后为第2类组数据分类后为第1类89 组数据分类后为2类组数据分类后为第1类第90 组数据分类后为第3类组数据分类后为第1类91 组数据分类后为第2类组数据分类后为第1类92 组数据分类后为第3类组数据分类后为第1类93 组数据分类后为第3类组数据分类后为第1类94 组数据分类后为第3类组数据分类后为第1类95 组数据分类后为第3类组数据分类后为第1类96 组数据分类后为3类组数据分类后为第1类第97 组数据分类后为第3类组数据分类后为第1类98 组数据分类后为第2类组数据分类后为第1类99 组数据分类后为第2类组数据分类后为第1类第100 组数据分类后为第3类组数据分类后为第2类第126 组数据分类后为第3类组数据分类后为第1类第127 组数据分类后为第3类组数据分类后为第1类第128 组数据分类后为第3类组数据分类后为第1类第129 组数据分类后为第3类组数据分类后为第1类第130 组数据分类后为第3类组数据分类后为第1类第131 组数据分类后为第3类组数据分类后为第1类第132 组数据分类后为第3类组数据分类后为第1类第133 组数据分类后为第3类组数据分类后为第1类第134 组数据分类后为第3类组数据分类后为第1类第135 组数据分类后为第3类组数据分类后为第1类第136 组数据分类后为第3类组数据分类后为第2类第137 组数据分类后为第3类组数据分类后为第2类第138 组数据分类后为第3类组数据分类后为第3类第139 组数据分类后为第3类组数据分类后为第3类第140 组数据分类后为第3类组数据分类后为第2类第141 组数据分类后为第3类组数据分类后为第2类第142 组数据分类后为第3类组数据分类后为第2类第143 组数据分类后为第3类组数据分类后为第3类第144 组数据分类后为第3类组数据分类后为第3类第145 组数据分类后为第3类组数据分类后为第2类第146 组数据分类后为第3类组数据分类后为2类第147 组数据分类后3类分类正确率为 0.96 第 91 组数据分类后为2类组数据分类后为第 1类 第 92 组数据分类后为2类 组数据分类后为第 1类 第 93 组数据分类后为第 3类 组数据分类后为第 1类 94 组数据分类后为第 2类 组数据分类后为第 1类 95 组数据分类后为第 3类 组数据分类后为第 1类 96 组数据分类后为第 2类 组数据分类后为第 1类 97 组数据分类后为3类 组数据分类后为第 1类 第 98 组数据分类后为第 3类 组数据分类后为第 1类 99 组数据分类后为第 2类 组数据分类后为第 1类 第100 组数据分类后为第 3类 组数据分类后为第 1类 第126 组数据分类后为第 3类 组数据分类后为第 1类 第127 组数据分类后为第 3类 组数据分类后为第 1类 第128 组数据分类后为第 3类 组数据分类后为第 1类 第129 组数据分类后为第 3类 组数据分类后为第 1类 第130 组数据分类后为第 3类 组数据分类后为第 1类 第131 组数据分类后为第 3类 组数据分类后为第 1类 第132 组数据分类后为第 3类 组数据分类后为第 1类 第133 组数据分类后为第 3类 组数据分类后为第 1类 第134 组数据分类后为第 3类 组数据分类后为第 1类 第135 组数据分类后为第 3类 组数据分类后为第 1类 第136 组数据分类后为第 3类 组数据分类后为第 1类 第137 组数据分类后为第 3类 组数据分类后为第 1类 第138 组数据分类后为第 3类 组数据分类后为第 1类 第139 组数据分类后为第 3类 组数据分类后为第 1类 第140 组数据分类后为第 3类 组数据分类后为第 1类 第141 组数据分类后为第 3类 组数据分类后为第 3类 第142 组数据分类后为第 3类 组数据分类后为第 3类 第143 组数据分类后为第 3类 组数据分类后为第 3类 第144 组数据分类后为第 3类 组数据分类后为第 2类 第145 组数据分类后为第 3类 组数据分类后为第 2类 第146 组数据分类后为第 3类 组数据分类后为第 2类 第147 组数据分类后为第 3类 组数据分类后为第 2类 第148 组数据分类后为第 3类 组数据分类后为第 2类 第149 组数据分类后为第 3类 组数据分类后为第 2类 第150 组数据分类后为第 3类 组数据分类后为第 3类分类正确率为 0.94667组数据分类后为第 2类组数据分类后为3类Wine第 148 组数据分类后为第第 149 组数据分类后为第3类 3类 3类第 88 组数据分类后为第第 89 组数据分类后为第 1类 2类 2类第30组数据分类后为1类第101 组数据分类后为3类第31 组数据分类后为第1类第102 组数据分类后为第3类第32 组数据分类后为第1类第103 组数据分类后为第3类第33 组数据分类后为第1类第104 组数据分类后为第2类第34 组数据分类后为第1类第105 组数据分类后为第3类第35 组数据分类后为第1类第106 组数据分类后为第3类第36 组数据分类后为第1类第107 组数据分类后为第2类第37 组数据分类后为第1类第108 组数据分类后为第3类第38 组数据分类后为第1类第109 组数据分类后为第3类第39 组数据分类后为第1类第110 组数据分类后为第2类第40 组数据分类后为第1类第111组数据分类后为第2类第41 组数据分类后为第1类第112 组数据分类后为第3类第42 组数据分类后为第1类第113 组数据分类后为第3类第43 组数据分类后为第1类第114 组数据分类后为第3类第44 组数据分类后为第1类第115 组数据分类后为第3类第45 组数据分类后为第1类第116 组数据分类后为第3类第46 组数据分类后为第1类第146 组数据分类后为第3类第47 组数据分类后为第1类第147 组数据分类后为第3类第48 组数据分类后为第1类第148 组数据分类后为第3类第49 组数据分类后为第1类第149 组数据分类后为第3类第50 组数据分类后为第1类第150 组数据分类后为第3类第51 组数据分类后为第1类第151 组数据分类后为第3类第52 组数据分类后为第1类第152 组数据分类后为第3类第53 组数据分类后为第1类第153 组数据分类后为第3类第54 组数据分类后为第1类第154 组数据分类后为第3类第55 组数据分类后为第1类第155 组数据分类后为第3类第56 组数据分类后为第1类第156 组数据分类后为第3类第57 组数据分类后为第1类第157 组数据分类后为第3类第58 组数据分类后为第1类第158 组数据分类后为第3类第88 组数据分类后为第3类第159 组数据分类后为第3类第89 组数据分类后为第3类第160 组数据分类后为第3类第90 组数据分类后为第3类第161 组数据分类后为第3类第91 组数据分类后为第3类第162 组数据分类后为第3类第92 组数据分类后为第2类第163 组数据分类后为第3类第93 组数据分类后为第3类第164 组数据分类后为第3类第94 组数据分类后为第2类第165 组数据分类后为第3类第95 组数据分类后为第1类第166 组数据分类后为第3类第96 组数据分类后为第3类第167 组数据分类后为第3类第97 组数据分类后为第3类第168 组数据分类后为第3类第98 组数据分类后为第3类第169 组数据分类后为第3类第99 组数据分类后为第3类第170 组数据分类后为第3类第100 组数据分类后为第3类第第第171 组数据分类后为第172 组数据分类后为3类3类3类分类正确率为 0.8764 第 102 组数据分类后为1类 组数据分类后为第 1类 第 103 组数据分类后为第 3类 组数据分类后为第 1类 第 104 组数据分类后为第 3类 组数据分类后为第 2类 第 105 组数据分类后为第 3类 组数据分类后为第 1类 第106 组数据分类后为第 3类 组数据分类后为第 1类 第 107 组数据分类后为第 3类 组数据分类后为第 1类 第108 组数据分类后为第 3类 组数据分类后为第 1类 第 109 组数据分类后为第 3类 组数据分类后为第 1类 第 110 组数据分类后为第 2类 组数据分类后为第 1类 第 111组数据分类后为第 3类 组数据分类后为第 1类 第 112 组数据分类后为第 3类 组数据分类后为第 1类 第113 组数据分类后为第 3类 组数据分类后为第 1类 第 114 组数据分类后为第 3类 组数据分类后为第 1类 第 115 组数据分类后为第 3类 组数据分类后为第 1类 第 116 组数据分类后为第 3类 组数据分类后为第 1类 第 146 组数据分类后为第 2类 组数据分类后为第 1类 第 147 组数据分类后为第 3类 组数据分类后为第 1类 第 148 组数据分类后为第 2类 组数据分类后为第 1类 第 149 组数据分类后为第 3类 组数据分类后为第 1类 第 150 组数据分类后为第 3类 组数据分类后为第 1类 第 151 组数据分类后为第 3类 组数据分类后为第 1类 第 152 组数据分类后为第 3类 组数据分类后为第 1类 第 153 组数据分类后为第 3类 组数据分类后为第 1类 第154 组数据分类后为第 3类 组数据分类后为第 2类 第 155 组数据分类后为第 3类 组数据分类后为第 1类 第 156 组数据分类后为第 3类 组数据分类后为第 2类 第 157 组数据分类后为第 3类 组数据分类后为第 1类 第 158 组数据分类后为第 3类 组数据分类后为第 1类 第159 组数据分类后为第 3类 组数据分类后为第 1类 第 160 组数据分类后为第 3类 组数据分类后为第 2类 第 161 组数据分类后为第 3类 组数据分类后为第 3类 第 162 组数据分类后为第 3类 组数据分类后为第 3类 第 163 组数据分类后为第 3类 组数据分类后为第 1类 第 164 组数据分类后为第 3类 组数据分类后为第 2类 第 165 组数据分类后为第 3类 组数据分类后为第 3类 第 166 组数据分类后为第 3类 组数据分类后为第 3类 第 167 组数据分类后为第 3类 组数据分类后为第 3类 第168 组数据分类后为第 3类 组数据分类后为第 3类 第 169 组数据分类后为第 3类 组数据分类后为第 2类 第 170 组数据分类后为第 3类 组数据分类后为第 3类 第 171 组数据分类后为第 3类 组数据分类后为3类 第 172组数据分类后为3类 101 组数据分类后为第 第3类 173 组数据分类后为第3类第3类第 174 组数据分类后为第 2 类 第 100 组数据分类后为第第174 组数据分类后为第 3 类分类正确率为0.88764.Iris数据表格:Wine数据表格:k=7五、作业收获通过本次大作业,我对k 近邻算法有了更充分的认识,熟悉了MATLAB 的使用方法。