近邻法
K-近邻分析

预测和预测模型
预测模型分为 输出变量为分类型的预测模型称为分类预测模型 输出变量为数值型的预测模型称为回归预测模型
传统统计中的一般线性模型、广义线性模型、判别分析 都能够解决不同预测模型的建立问题. 提前:在数据满足某种分布假设下,明确设定输出变 量与输入变量取值关系的函数形式
(1) 若该近邻以P(y=1|X)的概率取类别1, 则预测X0的类别 为1时犯错误的概率为1- P(y=1|X);
(2) 若该近邻以P(y=0|X)的概率取类别0, 则预测X0的类别 为0时犯错误的概率为1- P(y=0|X);
K-近邻法中的近邻个数
因此,对二分类预测问题,1-近邻方法的预测错误(包括错误预 测为1或0)的概率为(采用全概率公式)
可通过增加近邻个数K以提升预测的稳健性 但是, 增加K会导致分类边界趋于平滑, 预测误差增大。 然而, 可依据对预测误差的接受程度设置参数K, 是一 种可取的方式。
预测误差
预测误差是模型对未见的新数据集进行预测时的误差。 若是回归预测,预测误差一般采用均方误差,即
均方误差为各个观测输出变量实际值与预测值之差的 平方和的平均,可表示为
在更为宽泛的应用中,大多假设可能是无法满足的。同 时,在输入变量较多,样本量较大的情况下,给出函数 f 的具体形式非常困难 解决策略:近邻分析法
一、近邻分析:K-近邻法
为预测一个新观测X0输出变量y0的取值,近邻分析法的基 本思想: 首先在已有数据中找到与X0相似的若干个(如K个)观测, 如(X1 , X2 ,…, Xk)。这些观测称为X0的近邻 然后,对近邻(X1 , X2,…, Xk)的输出变量(y1 , y2,…, yk), 计算诸如算术平均值(或加权均值, 或中位数, 或众数), 并以此作为新观测X0输出变量取值y0的预测值
模式识别大作业

模式识别大作业1.最近邻/k近邻法一.基本概念:最近邻法:对于未知样本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('iris.txt');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+(testsa mple(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次分类识别率为%4.2f',ii,sum/75));totalsum=totalsum+(sum/75);enddisp(sprintf('10次分类平均识别率为%4.2f',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类第53组数据分类后为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类第142组数据分类后为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.txt');%导入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_sample(y,2))^2+(test_sample(x,3)-train_sample(y,3))^2+( test_sample(x,4)-train_sample(y,4))^2+(test_sample(x,5)-train_sam ple(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_sa mple(y,10))^2+(test_sample(x,11)-train_sample(y,11))^2+(test_samp le(x,12)-train_sample(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次分类识别率为%4.2f',ii,sum/89));totalsum=totalsum+(sum/89);enddisp(sprintf('10次分类平均识别率为%4.2f',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类第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类第77组数据分类后为第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类第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类第164组数据分类后为第3类第165组数据分类后为第3类第167组数据分类后为第3类第168组数据分类后为第3类第173组数据分类后为第3类第174组数据分类后为第3类2.Fisher线性判别法Fisher 线性判别是统计模式识别的基本方法之一。
第四章近邻法则和聚类

当P(ωm| X)接近于1,即当最小错误概率非常小时,近邻 法则的结果和最小错误率的Bayes法则的结果几乎相同, 而其错误率也比较小,这说明两种方法同样“好”。 而当各类的后验概率接近于 时,两种决策规则的分类 结果就相差比较大了,但两者的错误率都接近 1 1 , c 说明两种方法同样“坏”。 虽然需要更详细的理论分析,但粗略的感觉是 :最近邻 法则有比较好的结果并不是偶然的。
1 c
4.1.2 K-近邻法则
最近邻法可以扩展成找测试样本的k个最近样本作决策依据的 方法。其基本规则是,在所有N个样本中找到与测试样本的k个最 近邻者,其中第个个类别所占个数为gi(X),i=1,…,c,决策规 则:
gi ( x) 则决策X∈ω 。 如果gj ( x) max i j
k近邻一般采用k为奇数, 跟投票表决一样,避免 因两种票数相等而难以 决策。
譬如A类有10个训练样本,因此有10个模板,B类有8 个训练样本,就有8个模板。任何一个待测试样本在分类时 与这18个模板都算一算相似度,如最相似的那个近邻是B类 中的一个,就确定待测试样本为B类,否则为A类。因此原 理上说近邻法是最简单的。 但是近邻法有一个明显的缺点就是计算量大,存储量 大,要存储的模板很多,每个测试样本要对每个模板计算一 次相似度,因此在模板数量很大时,计算量也很大的。那么 有一个如此明显缺点的方法还有没有存在的必要性呢?这就 要看其是否有优点,所以对近邻法的优点也要弄清楚。结论 是:在模板数量很大时其错误率指标还是相当不错的。这就 是说近邻法有存在的必要。
当最近邻法所使用的训练样本数量 N不是很大时,其错误率是带有偶 然性的。图中所示一维特征空间中 两类别情况。X表示一特测试样本, 而X'是所用训练样本集中X的最邻 近者,则错误是由X与X'分属不同 的类别所引起的。由于X'与所用训 练样本集有关,因此错误率有较大 偶然性。
有序k近邻法插补

有序k近邻法插补
有序k近邻法插补是一种用于处理缺失数据的方法,其基本原理是在数据集中找到与缺失数据点最相近的k个样本,然后使用这些样本的平均值来估计缺失数据点的值。
这种方法通过距离度量来确定相似性,其中常用的距离度量方式包括欧氏距离等。
在应用有序k近邻法插补时,需要先确定k值,即选择与缺失数据点最相近的样本数量。
然后,根据距离度量方式计算缺失数据点与其他样本点之间的距离,将距离按从小到大的顺序排列,选择距离最小的k个点。
最后,使用这k个点的平均值来估计缺失数据点的值。
有序k近邻法插补的优势在于其对数据的拟合度较高,可以处理不同类型的数据和不同的数据分布情况。
此外,该方法相对简单易行,不需要太多的计算资源和专业知识。
然而,其也存在一些局限性,例如当k值选择不当或数据集存在异常值时,插补结果可能会受到影响。
在使用有序k近邻法插补时,需要注意以下几点:
1. k值的选择对插补结果有很大影响,需要根据实际情况和数据分布情况来选择合适的k值。
2. 距离度量方式也会影响插补结果,需要根据数据的特性和分布情况来选择合适的距离度量方式。
3. 对于大规模数据集,有序k近邻法插补的计算复杂度较高,需要优化算法或采用其他适合大规模数据的插补方法。
4. 在处理有序数据时,需要考虑数据的顺序信息,而不仅仅是距离度量。
总之,有序k近邻法插补是一种简单易行、适应性强的处理缺失数据的方法,但在实际应用中需要注意其局限性并选择合适的方法来优化算法。
近邻分类法

对“data3.m”数据,采用剪辑法、压缩法生成参考集,近似描绘其决策面,并用所有数据测试其分类效果。
1.近邻法算法:
近邻法NN(nearest neighborhood)的基本思想是:以全部训练样本作为代表点,计算测试样本与这些代表点的距离,即所有样本的距离,并以最近邻者的类别作为决策。最初的近邻法是由Cover和Hart与1968年提出的。
步骤3:结束过程。若Grabbag中所有样本在执行步骤2时没有发生转入Store的现象,或Grabbag已称空集,则算法终止,否则转入步骤2.
2.近邻法参考核心程序:
3.近邻法分类实验结果:
两分剪辑近邻法:
步骤1将原始样本随机分为两个集合:预测集T和参考集R,分别含有 和 个样本,设两个集合所含样本数量之比为 。来自预测集T合参考集R的样本分别完成考试和参考任务,相互独立。
步骤2对预测及T中的任一个样本 ,利用参考集R采用近邻对其进行分类决策,判定 所属类别为 ,而样本 自身实际所属类别为 ,如 和 不相同,则将不相容样本 从预测集T中删除,预测及T样本数量 减1。对预测集中所有样本依次进行判定,直至删除所有的不相容样本的,得到经过剪辑的考试样本集TE。
步骤1:初始化。Store是空集,原样本集存入Grabbag;从Grabbag中任意选择一样本放入Store中作为新样本集得第一个样本。样本集生成,在Grabbag中取出第i各样本用Store中的当前样本集按最近邻法。
步骤2:分类。若分类错误,则将该样本从Grabbag转入Store中,若分类正确,则将该样本放回Grabbag中。
步骤3利用经过剪辑的考试样本集TE,采用最近邻法对测试样本X做出分类决策。
重复剪辑近邻法:当采用两分剪辑近邻法,预测集T和参考集R所含的样本是由总样本随机产生的,剪辑只针对预测集T中的样本,而参考集R中的样本则经过剪辑。为进一步提高近邻法的分类性能,在样本数量足够多的情况下,可以针对所有样本重复地执行剪辑程序。
模式识别基础之近邻法

模式识别基础之近邻法近邻法是一种常用的模式识别方法,它通过测量不同对象间的相似性来进行分类。
本文将介绍近邻法的基本原理、应用领域以及优缺点。
一、基本原理近邻法是基于实例学习(instance-based learning)的一种算法。
它通过计算样本之间的距离或相似度来判断其归属类别。
简单来说,近邻法将新的样本与已有的样本进行比较,将其归类到与其最相似的样本所属的类别中。
在实际应用中,近邻法通常是通过计算样本之间的欧氏距离或余弦相似度来进行分类。
欧氏距离是指在坐标系中两点之间的直线距离,而余弦相似度是指两个向量之间的夹角的余弦值。
根据距离或相似度的大小,近邻法将样本进行分类。
二、应用领域1. 图像识别近邻法在图像识别领域有着广泛的应用。
通过计算图像的特征向量之间的相似度,可以实现图像分类、图像匹配等功能。
例如,当需要将一张未知图像分类到已知类别中时,可以通过计算未知图像与已知图像的特征向量之间的相似度来判断其归属类别。
2. 文本分类在文本分类任务中,近邻法也是一个常用的算法。
通过计算文本之间的相似度,可以实现文本的自动分类。
例如,当需要将一篇未知文本归类到已有类别中时,可以计算未知文本与已有文本之间的相似度,并将其归类到相似度最高的类别中。
3. 推荐系统近邻法在推荐系统中也得到了广泛的应用。
通过计算用户之间的兴趣相似度,可以为用户推荐符合其兴趣的物品。
例如,在电商平台上,通过计算用户购买记录或点击行为之间的相似度,可以为用户推荐与其兴趣相似的商品。
三、优缺点1. 优点近邻法具有以下优点:- 简单直观:近邻法的原理简单易懂,容易实现和解释。
- 非参数化:近邻法不对数据的分布做任何假设,适用于任何类型的数据。
- 灵活性强:近邻法适用于多种应用场景,可以根据实际需求进行定制。
2. 缺点近邻法也存在一些缺点:- 计算复杂度高:对于大规模的数据集,计算样本之间的距离或相似度可能会非常耗时。
- 依赖样本质量:近邻法受样本质量的影响较大,对于噪声数据或不均衡数据容易产生误分类。
k近邻模型和算法

k 近邻模型和算法2.1 K 近邻模型K 近邻法使用的模型实际上对应于对特征空间的划分。
模型由三个基本要素—-距离度量、k 值得选择和分类规则决定。
2.1.1 模型K 近邻法中,当训练集、距离度量(如欧式距离)、k 值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一确定。
这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所述的类。
这一事实从最近邻算法中可以看得很清楚。
特征空间中,对每个实例点i x,距离该点比其他店更近的所有点组成一个区域,叫做单元。
每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。
最近邻法将实例i x 的类i y作为其单元中所有点的类标记。
这样,每个单元的实例点的类别时确定的。
下图是二维特征空间划分的一个例子。
2.1.2 距离度量特征空间中两个实例点的距离是两个点相似程度的反映。
K 近邻模型的特征空间一般是n 维实数向量空间Rn 。
使用的距离是欧式距离,但也可以是其他距离,如更一般的Lp 或闽科夫斯基距离。
设特征空间χ是n 维实数向量空间n R ,i x ,,),,,(,)()2()1(T n i i i i j x x x x x =∈χ,),,,()()2()1(T n j j j j x x x x =ji x x ,的距离定义为P Lpnl p lj l i j i p x x x x L 11),(⎪⎭⎫ ⎝⎛-=∑=这里1≥p 。
当2=p 时,称为欧式距离,即21122,⎪⎭⎫⎝⎛-=∑=nl l j l i j i x x x x L )(当时,称为曼哈顿距离,即∑=-=nl lj li j i x x x x L 11,)(当∞=p 时,它是各个距离坐标的最大值,即l jl i lj i x x x x L -=∞max ),(2.1.3 K 值的选择k 值的选择会对k 近邻法的结果产生重大影响。
第3章--k-近邻算法--(《统计学习方法》PPT课件)

• 一般来说,只选择样本数据集中前N个最相似的数据。K一般不大于20, 最后,选择k个中出现次数最多的分类,作为新数据的分类
K近邻算法的一般流程
• 收集数据:可以使用任何方法 • 准备数据:距离计算所需要的数值,最后是结构化的数据格式。 • 分析数据:可以使用任何方法 • 训练算法: (此步骤kNN)中不适用 • 测试算法:计算错误率 • 使用算法:首先需要输入样本数据和结构化的输出结果,然后
K-Nearest Neighbors算法特点
• 优点
• 精度高 • 对异常值不敏感 • 无数据输入假定
• 缺点
• 计算复杂度高 • 空间复杂度高
• 适用数据范围
• 数值型和标称型
K-Nearest Neighbors Algorithm
• 工作原理
• 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据 都存在标签,即我们知道样本集中每个数据与所属分类的对应关系。
提纲
• KNN算法原理和流程 • Python程序调试
• Python文件类型 • 模块 • Idle调试环境 • 数据载入
• 算法和关键函数分析 • 算法改进和实验作业
K-Nearest Neighbors算法原理
K=7 Neighborhood
?
K=1 Neighborhood
Dependent of the data distributions. Can make mistakes at boundaries.
• import py_compile • py_pile('D:\python\machinelearninginaction\Ch02\kNN.py')
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)采用抽样的办法,使之能自适应选择k;
“科研反哺教学”,将自己的研究工作融入课堂;
6.3.2 核近邻法(续)
贝叶斯 决策器
学习 方法
4 3 2
分类 错误率 5.5% 4.6% 4.1%
KNN (k=3) BKNN 贝叶斯决策器
KNN
1 0 -1
三种方法的分类错误率比较
BKNN
-2 -3 -4 -4
本人解决方案:
NN (Fix, 1951)
KNN (Yu,2002) (Peng,2004) BNN (Homes,2002)
定义最优核距离 (本章) 核化 (本章)
BKNN (本章)
(1)推导出“最优核距离”:
1 rko x , xl rko x, xl N A1 1 NA B x, xi , xl B x, xi , xl N i 1 A i 1
J. Peng. Adaptive Quasiconformal Kernel Nearest Neighbor Classification. IEEE Trans PAMI[J]. 2004, 26(5): 656 - 661.
Rd
x1 , t1 1 x5 , t5 1 1
6.1.1 关于近邻法
1951年Fix和Hodges首次提出
第 w1 类
第 w2 类
最经典的模式识别方法之一 方法简单,便于理论分析
x
x1
x4
是其它模式识别方法的标尺
“距离”的度量方式有很多种
近邻法原理示意图
6.1.2 近邻法应用实例:人脸表情识别
欲解决的问题:
七 类 表 情
% 计算每个测试样本与每个学习样本间的欧式距离 for itest=1:1:ntest
x1
x
x
x2
x3
for ilean=1:1:nlean
distance(itest,ilean) = norm( SNN_xtest(itest,:) - SNN_xlean(ilean,:)); end end
% 对给定的测试样本,找出与其最近的样本,并确定其类别
C. C. Homes and N. M. Adams, A probabilistic nearest-neighor method for statistical pattern recognition. J Roy Statist Soc Series B[J]. 2002, 64: 295-306.
50 100 150
1
200
250 50
256×256 抽样
100
150
200
250
1
主成分分析: 是最简单的提取 方法,第8章讲述
5
11
10
15
20
25
1024
5 10 15 20 25 30
30
提取的特征个数
32×32 =1024
6.1.2
近邻法应用实例:人脸表情识别(续)
主函数的源代码片段:
D. L. Wilson. Asymptotic properties of nearest-neighbor rules using edited data. IEEE Trans SMC[J]. 1972, pp. 408-421.
ห้องสมุดไป่ตู้
(B)压缩近邻法
(见教材第153页)
P. E. Hart. The condensed nearest neighbor rule. IEEE Trans. Inform. Theory. 1968, 14(3), 515-516.
每个测试样本所属的类别(用近邻法判别出的结果)
% 周亚同 2008.2.10
nlean = size(SNN_xlean,1); %学习样本数 ntest = size(SNN_xtest,1); %测试样本数 ndim = size(SNN_xlean,2); %样本维数
6.1.2 近邻法应用实例(续)
[xtest_normal_project_unit]=unitary(xtest_normal_project);
%========== 用 NN 对测试样本分类 =================== ytest = NN_CLASSIFY(xlean_normal_project_unit, ylean, xtest_normal_project_unit);
x5 , t5 1
F
x 2 , t 2
r
x, t ?
x4 , t4 1
x ,t ?
rk
x ,t 1
3 3
x3 , t3 1
(a)
(b)
原始空间
核空间
6.3.2 核近邻法(续)
核近邻法(KNN)存在的问题:
(1)核距离是核空间中的最优距离度量吗? (2)在实际应用中如何选择k?
选择合适的k值很重要;
k-最近邻方法原理示意图
k=5
6.2.2 k-近邻法k值的选择问题
例:双螺旋分类
K=2
K=15
双螺旋样本分类问题
如何选择k值,有许多学者进行过研究
(不属于课堂教学范围)
6.3 近邻法的改进与完善
6.3.1 近邻法常见的改进与完善措施
(1)核近邻法
(2)概率近邻法 (3)近邻法的快速算法 (4)近邻法的其它改进措施
(C)采用快速搜索技术 (见文献)
A. Djouadi and E. Bouktache. A fast algorithm for the nearestneighbor classifier. IEEE Trans PAMI[J]. 1997, 19(3): 277-282.
主要思路:缩小搜索近邻的范围,或者加快搜索速度。
[dis, yno]=min(distance,[],2); % yno:与测试样本距离最近的学习样本的序号
ytest = ylean(yno);
6.1.2 近邻法应用实例(续)
表情识别结果:
第 1 类表情(AN)的分类正确率: 第 2 类表情(DI)的分类正确率: 第 3 类表情(FE)的分类正确率: 第 4 类表情(HA)的分类正确率: 第 5 类表情(NE)的分类正确率: 第 6 类表情(SA)的分类正确率: 第 7 类表情(SU)的分类正确率: 90.000000% 90.000000% 76.666667% 90.000000% 93.333333% 76.666667% 83.333333%
6.2 k-近邻法的基本原理
6.2.1 关于 k-近邻法
是近邻法的一种推广;
原理:先找出 x 的k个近邻,这k 个近邻中,哪一类的样本数量占优势 ,就将 x 归为哪一类。
x1, t1 1
x2 , t2 1
x
x4 , t4 1
x5 , t5 1
x3 , t3 1
自然
高兴
生气
失望
悲伤
害怕
惊讶
任给一张人脸,请 问是什么表情?
“学以致用”,通过上述应用实例可以加深对近邻法的理解。
6.1.2 近邻法应用实例:人脸表情识别(续)
样本库构建:
(1)关于JAFFE人脸表情库
JAFFE: Japanese Female Facial Expression 表情库含10名日本年轻女 性,每人7种表情,每种表情 采集3副图, 共210副图 每副图为256×256象素, 256级灰度
M-H算法 Metropolis算法 独立抽样器、 Gibbs抽样器 M 辅助变量 混合蒙特卡洛法 C 抽样器 切片抽样器 M C 逆跳马尔科夫链蒙特卡洛 自适应马尔科夫链蒙特卡洛 完美抽样 粒子滤波器
第 w1 类
第 w2 类
x
6.3.4 提高近邻法的分类速度
(A)剪辑近邻法 (见教材第145页)
% ============= 参数设置 ============== nlean = 7*10*1; %学习样本个数
ntest = 7*10*3;
numpc=11;
%测试样本个数
%提取的特征数目
% === 读取学习样本与测试样本(按七种表情依次读取) ===
6.1.2 近邻法应用实例:人脸表情识别(续)
% ============= 字符串设置 ============== Path='..\JAFFE\'; %表情库所在文件夹
JanpanPerson='KA.KL.KM.KR.MK.NA.NM.TM.UY.YM.'; % 10个日本人名 Expression='ANDIFEHANESASU'; % 7种表情
结论:
-3 -2 -1 0 1 2 3 4
(1)BKNN所得分类面更 光滑;
(2)BKNN分类错误率 更低;
三种方法的分类效果对比
6.3.3 概率近邻法
基本思路:使近邻法具有概率背景; 常规的近邻法只能判别测试样本 x 属于某一类;而概率近 Pc1 | x 和 P c 2 | x 邻法能计算测试样本 x 属于某一类的概率:
%===========用 PCA 做特征提取 =================
%提取学习样本特征
[v,latent,explained,xlean_normal_project] = lpca(xlean_normal,xlean_normal,numpc); %提取测试样本特征 [v,latent,explained,xtest_normal_project] = lpca(xlean_normal,xtest_normal,numpc); %将提取的特征向量转化成单位向量 [xlean_normal_project_unit]=unitary(xlean_normal_project); %将提取的特征向量转化成单位向量