模式识别近邻法共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_近邻法最近邻法:保存两个已知分类的样本,用新样本依次与已经保存的两类样本计算欧式距离,分类结果指向距离最小的样本。

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()最后:代码是自己根据原理敲出来的,有什么不足之处希望大佬们斧正。

模式识别 最近邻法和k近邻法MATLAB实现

模式识别 最近邻法和k近邻法MATLAB实现

学号: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个近邻,计算量和时间复杂度高。

模式识别_第6章_近邻法

模式识别_第6章_近邻法

行分类,剪辑掉X(NT)中被错误分类的样本。
, xNT

若 y0 ( x ) X ( NR)是 x X ( NT )的最近邻元,剪辑掉
11
从上面可以看出近邻法有方法简单的优点,但也存在 这一些缺点: (1)存储量和计算量都很大; (2)没有考虑决策的风险,如果决策的错误代价很 大时,会产生很大的风险; (3)以上的分析——渐近平均错误率,都是建立在 样本数趋向无穷大的条件下得来的,在实际应用时大 多是无法实现的。
12
6.3 改进的近邻法
13
6.2 剪辑最近邻方法
对于两类问题,设将已知类别的样本集X(N)分成参
照集X(NR)和测试集X(NT)两部分,X(NR)X(NT)=,
它们的样本数各为NR和NT,NR+NT=N。利用
参照集X(NR) y中的样本 , yNR 1 , y2 , 采用最近邻规则对
已知类别的测试集X(NT)中的每个样本 x1 , x2 ,
(6) 判xω 2 (5)看xm属于哪 一类:xmω 2
4
(4)找出最小距离 dm(x)=min{di(x)}
最近邻方法
NN 分类思想: k-NN
6.1 最近邻决策规则—kN Ni
i 1 c
对待识别模式 x, 分别计算它与
个已知类别的样本 x
(i ) j的距离,取k个最近邻样本,这
k个样本中哪一类最多, 就判属哪一类。
N
lim P(i x N ) P(i x )
7
最近邻法则可以看成是一个随机化决策 —— 按照概率 P(i x) 来决定 x 的类别。 定义:
P(m x) max P(i x)
i 1,2,
,c
按最小错误率的Bayes决策法则:以概率1决策 m ; 按最近邻决策法则:以概率的后验概率分别为

清华大学模式识别课件-07_近邻法

清华大学模式识别课件-07_近邻法

(6 20)
因为 P 与
P 2 i | x 有关,若寻求 P 与 P* 的关系,首先可以寻求 P 2 i | x 与 P* 的关
i 1 i 1
系。现利用式(6-18),式(6-20)的结果来推导,有
P | x P
2 2 i 1 i
c
m
| x P i | x 1 P e | x
以上两式对我们的启发是:对已知的 P m | x 而言,
*
P | x 的最小值对应着 P 的最大值。
2 i 1 i
c
如能求出 P 的最大值,就把贝叶斯错误率 P 和最近邻法错误率 P 联系起来了。 若记
P | x P
2 2 i 1 i
c
m
| x P 2 i | x

x's
p x' dx'
N
(6 8)
P x1 , x2 , …,x N 1 Ps
当 N→∞时,这一概率趋于零。由于 s 可以任意小,所以 N→∞时, x' 落在以 x 为中心无限小区域
中的概率趋于 1。就是说 x' 以概率为 1 收敛于 x,从而
N
lim p x' | x x' - x
(6 9)
现在来计算条件错误概率 PN e | x, x' 。当我们说有 N 个独立抽取并有类别标记的样本时,意 思是说有 N 对随机变量 x1 , 1 , x2 , 2 , …, x N , N ,其中 xi 是独立抽取的样本,i 是 xi 的类别 标记,且 i 是 c 个类别状态 1 , 2 …,c 之一。现在假定抽取一对 x, ,并假定标以 ' 的 x' 是 x 的最近邻。由于抽出 x' 时,它的类别状态和 x 无关。因此有

模式识别第3章 近邻法

模式识别第3章 近邻法
如果样本足够多,就可以重复地执行剪辑程序, 以进一步提高分类性能,称为重复剪辑最近邻法 (MultiEdit算法)。
26
27
近邻法
重复剪辑近邻法
原始样本集(不同均矢和协方差阵的两类正态分布随机样本)28
近邻法
重复剪辑近邻法
第一次剪辑后留下的样本
29
近邻法
重复剪辑近邻法
第三次剪辑后留下的样本

36
近邻法
压缩近邻法
基本方法:
• 将样本集XN分为XS 和XG ,开始时XS 中只有一个样本, XG中为其余样本
• 考查XG 中每个样本,若用XS 可正确分类则保留,否则 移入XS
• 最后用XS作最近邻法的比较样本集。
37
近邻法
压缩近邻法
算法步骤(Condensing算法):
1. 设置两个存储器,分别为STORE和GRABBAG,将第一个样本放 入STORE中,把其他样本放入GRABBAG中;
i1
如果
则 x m
5
近邻法
最近邻决策规则—k-NN
k的取值选择很重要! 6
近邻法
最近邻决策规则—k-NN
特点: 思想简单,计算方便 需要存储所有样本,每次决策都要计算待识
别样本与全部训练样本之间的距离并进行比 较,存储量和计算量都很大
7
近邻法 例子:
最近邻决策规则—k-NN
8
近邻法
最近邻决策规则—k-NN
主要内容
第一章 第二章 第三章 第四章 第五章 第六章 第七章
绪论 非监督学习方法 近邻法 线性判别函数 人工神经网络 贝叶斯决策理论 模式识别应用
1
第三章 近邻法
• 最近邻决策规则 • 推广—K近邻决策规则 • 改进算法

模式识别7.近邻法

模式识别7.近邻法
的样本均值
:从 到
的最大距离
15
【样本集分级分解示例 】
16
【样本集搜索规则 】
规则1:如果
成立,则 规则2:如果
不可能是 的最近邻。
成立,其中
,则 不可能是 的最近邻。
:当前已经涉及到的样本集 中的样本到 的最 近距离。
17
【搜索算法的基本思想 】
18
【讨论 】
1. 分级数目增多,结点增多,最终结点对应的样 本数减少。
2. 分级数目增少,结点增少,最终结点对应的样 本数增多。
3. 推广到 -近邻
19
3. 剪辑近邻法
20
【概念的提出 】
以上讨论的快速算法只是研究如何减少计算量的问题 ,而不考虑存储量的压缩。实际上由于对样本进行分层次 分组,并附有一些参数,实际的存储量还有可能增加。
对每个模板计算一次相似度。
5
1.近邻法原理及其决策规则
6
【基本原理】
背景: 最小距离分类器是将各类训练样本划分成若干子类,并在每 个子类中确定代表点,一般用子类的质心或邻近质心的某一 样本为代表点。测试样本的类别则以其与这些代表点距离最 近作决策。该法的缺点是所选择的代表点并不一定能很好地 代表各类, 后果将使错误率增加。
本数量却大大减少了,因此可以大大节省存储量。
35
【本章小结】
几个要点: (1) 弄清楚近邻法的定义以及基本做法。 (2) 弄清“近邻法性能好”是在什么意义上讲的? (3) 快速搜索方法是使用怎样的原理? (4) 剪辑近邻法的原理是什么? 而压缩近邻法与剪辑近邻法有什
么不同之处?
36
【课后习题】
• 有7个二维向量:
9
【 -近邻法决策规则 】

模式识别课件(第六章 NO1)(最近邻法)

模式识别课件(第六章 NO1)(最近邻法)

二. 剪辑近邻法
此类方法的基本思想是:剪掉(清理)两类间的边界,取 掉类别混杂的样本,使两类边界更清晰。
1. 两分剪辑近邻法(亦称剪辑最近邻法) 基本过程为: 设N个样本分成c类
æ
N
N , N ,……, = { æ1 æ2 æcN }
1
2
c
(N1+N2+……,+Nc= N)
N
step1:剪辑。利用已知样本集æ 中的样本进行预分 类,并剪辑掉被错分类的样本,留下的样本构成 NE æ 剪辑样本集 step2:分类。利用 æ
6.3 近邻法的改进算法
共同特点是如何尽快地找出最近邻可能存在的小的空间, 减少搜索的范围,从而达到减少近邻法中的计算量和存储量的 问题。 一. 快速近邻算法 该算法对最近邻法和k-近邻法都适用。下面以最近邻法为 例来讨论。 1. 基本思想 将全部已知样本按级分成一些不相交的子集,并在子集的 基础上进行搜索。也就是说,该算法由两个阶段组成: 第一阶段:将样本集按级分解,形成树状结构。
二. 最近邻法的决策规则 设有c类模式样本, ω1, ω2,……, ωc 每类有Ni个样本(i=1,2,……,c),则最近邻法的(ωi类)判别 函数为:
gi ( X ) min X X ik
k
(k 1,2,...... , Ni )
式中X ik 表示ωi类中的第k个样本。
对应的决策规则为: 如果 则决策
X i 。
具体就是:设k1,k2,......,kc分别为X的k个最近邻样本中属于
1 , 2 ,......, c
类的样本数,
则定义 i (i 1,2,......,c) 类的判别函数为:
g i ( X ) ki
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档