K近邻分类的算法实现.docx

上传人:b****2 文档编号:1155278 上传时间:2022-10-18 格式:DOCX 页数:18 大小:68.11KB
下载 相关 举报
K近邻分类的算法实现.docx_第1页
第1页 / 共18页
K近邻分类的算法实现.docx_第2页
第2页 / 共18页
K近邻分类的算法实现.docx_第3页
第3页 / 共18页
K近邻分类的算法实现.docx_第4页
第4页 / 共18页
K近邻分类的算法实现.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

K近邻分类的算法实现.docx

《K近邻分类的算法实现.docx》由会员分享,可在线阅读,更多相关《K近邻分类的算法实现.docx(18页珍藏版)》请在冰豆网上搜索。

K近邻分类的算法实现.docx

K近邻分类的算法实现

K近邻分类的算法实现

近邻()法的输入为实例的特征向量,对应于特征空间的点;输入为实例的类别,可以取多类。

近邻法假设给定一个训练数据集,其中的实例类别已定。

分类时,对新的实例,根据其个最近邻的训练实例的类别,通过多数表决等方式进行预测。

因此近邻不具有显式的学习过程。

近邻法实际上是利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。

1.1选题背景

现如今,数据的爆炸式增长、广泛可用和巨大数量使得我们的时代成为真正的数据时代。

急需功能强大和通用的工具,以便从这些海量数据中发现有价值的信息,把这些数据转化成有组织的知识。

这种需求导致了数据挖掘的诞生。

这个领域是年轻的、动态变化的、生机勃勃的。

数据挖掘已经并且将继续在我们从数据时代大步跨入信息时代的历程中作出贡献。

K近邻方法是20世纪50年代早期首次引进的。

当给定大量数据集时,该方法是计算密集的,直到20世纪60年代计算能力大大增强之后才流行起来。

此后它广泛用于模式识别领域。

K近邻分类法是基于类比学习,即通过将给定的检验元组与它相似的训练元组进行比较来学习。

训练元组用n个属性描述。

每个元组代表n维空间的一个点。

这样,所有的训练元组都存放在n维模式空间中。

当给定一个未知元组时,k近邻分类法搜索模式空间,找出最接近元组的k个训练元组。

这k个训练元组即为该元组的k个“最近邻”。

1.2研究现状

国内外学者为此算法在实际生活中更好地应用做出了许多努力。

例如对k近邻方法的不足做出的一些改进如文献[2],[7],[8],[9],[10]等等。

在其他领域的应用如文献[5]将K近邻算法改进为非线性分类算法,以达到分类动态心电图波形的目的。

文献[6]在KNN算法的基础上提出了图像自动分类模型。

在生物学上,近邻方法也得到了广泛地应用,有文献利用蛋白质相互作用网络,提出了一种基于K近邻的蛋白质功能的注释方法,该方法使得蛋白质的功能能够得到更有效的预测[4]。

还有很多其他领域的一些应用,显示了机器学习在21世纪越来越重要的作用。

本论文主要研究实现近邻分类算法,体会在如今大数据时代机器学习的意义,为今后进一步学习数据挖掘打下基础。

第二章k近邻模型和算法

2.1K近邻模型

K近邻法使用的模型实际上对应于对特征空间的划分。

模型由三个基本要素—-距离度量、k值得选择和分类规则决定。

2.1.1模型

K近邻法中,当训练集、距离度量(如欧式距离)、k值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一确定。

这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所述的类。

这一事实从最近邻算法中可以看得很清楚。

特征空间中,对每个实例点,距离该点比其他店更近的所有点组成一个区域,叫做单元。

每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。

最近邻法将实例的类作为其单元中所有点的类标记。

这样,每个单元的实例点的类别时确定的。

下图是二维特征空间划分的一个例子。

 

 

2.1.2距离度量

特征空间中两个实例点的距离是两个点相似程度的反映。

K近邻模型的特征空间一般是n维实数向量空间Rn。

使用的距离是欧式距离,但也可以是其他距离,如更一般的Lp或闽科夫斯基距离。

设特征空间是n维实数向量空间,,的

这里。

当时,称为欧式距离,即

当时,称为曼哈顿距离,即

当时,它是各个距离坐标的最大值,即

2.1.3K值的选择

值的选择会对k近邻法的结果产生重大影响。

如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用。

但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感。

如果近邻的实例点恰巧是噪声,预测就会出错。

换句话说,k值得减小就意味着整体模型变得复杂,容易发生过拟合。

如果选择较大的k值,就相当于用较大邻域中的训练实例进行预测。

其优点是可以减少学习的估计误差。

但缺点是学习的近似误差会增大。

这时与输入实例较远的(不相似的)训练实例也会对预测起作用,是预测发生错误。

K值得增大就意味着整体的模型变得简单。

如果k=N,那么无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类。

这时,模型过于简单,完全忽略训练实例中的大量有用信息,是不可取的。

2.1.4分类决策规则

K近邻法中的分类决策规则往往是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定输入实例的类。

多数表决规则有如下解释:

如果分类的损失函数为0-1损失函数,分类函数为

那么误分类的概率是

对给定的实例,其最近邻的k个训练实例点构成集合。

如果涵盖的区域的类别是那么误分类概率是

要使误分类概率最小即经验风险最小,就要使最大,所以多数表决规则等价于经验风险最小化。

2.2K近邻算法

输入:

训练数据集

其中,为实例的特征向量,为实例的类别,i=1,2,,N;实例特征向量x;

输出:

实例x所属的类y。

(1)根据给定的距离度量,在训练集T中找出与x最邻近的k个点,涵盖这k个点的x邻域记作;

(2)在中根据分类决策规则(如多数表决)决定x的类别y:

该式中,I为指示函数,即当时I为1,否则I为0。

当k取1的特殊情况时,k近邻算法即为最近邻算法。

对于输入的实例点或是特征向量x,其分类由其最邻近的点的分类决定。

 

第三章数据模拟和实例分析

3.1数据模拟

用MATLAB随机生成150组数据,类别为三类,编程如下

#程序1:

A1=rand(50,2);

holdon

plot(A1(:

1),A1(:

2),'.')

A2=rand(50,2)+0.75;

holdon

plot(A2(:

1),A2(:

2),'.')

holdon

A3=rand(50,2)+1.5;

plot(A3(:

1),A3(:

2),'.')

得到如图所示图像

图1模拟数据在坐标系中的分布

 

再用k近邻分类算法对这150组数据进行分类,取k=15近邻,程序如下

#程序2:

clearall

clc

y=importdata('C:

\Users\adm\Desktop\test.txt');

p=y(:

2:

3);

p=p';

Add=zeros(150,1);

Add(1:

50,:

)=ones(50,1);

Add(51:

100,:

)=2*ones(50,1);

Add(101:

150,:

)=3*ones(50,1);

figure

(1),plot(y(:

1),Add,'g.');

holdon

gridon;

count=0;

fori=1:

3

forj=1:

50

fork=1:

150

distance(k)=mse(p(:

k)-p(:

(i-1)*50+j));%保存每个向量与所有训练样本之间的距离

end

[d1index1]=sort(distance);%对距离distance向量进行从小到大的排序

num=[000];

form=1:

20%考察num,存放的是排序后distance前20个属于每一类别的个数

ifindex1(m)<=50

num

(1)=num

(1)+1;

elseifindex1(m)<=100

num

(2)=num

(2)+1;

else

num(3)=num(3)+1;

end

end

[d2class]=max(num);%属于哪类的个数最多,就属于哪类,class即就是该向量所属的类别

ifi==class

count=count+1;

end

A((i-1)*50+j)=class;%存放判断的结果

end

end

count

rate=count/150

figure

(2),plot(y(:

1),A,'r.');gridon;%画图分类

程序运行后得到

count=143rate=0.9533

图一模拟数据原始分类

图2K近邻方法得到的分类

实验结果分析

从图像和运行结果均可以看出,对上述模拟数据用取k=15的k近邻算法作出的分类正确率为95.33%,分类效果不错,符合预期。

改变k值,分别取k=1,5,10,15,20,30,40,60做测试,发现k取1的取值对分类结果没有明显的规律,当k=1时,即为最近邻的特殊情况,此时分类和原分类吻合,当k从1开始逐渐增大时,分类效果呈现起伏,这说明k值得选取对分类结果有一定的影响,程序执行如下表。

表2Iris数据集分类效果

K值

正确率

错误

1

1

0

5

96%

4%

10

94.67%

5.33%

15

95.33%

4.67%

20

96.67%

3.33%

30

96%

4%

40

95.33%

4.67%

60

94.67%

5.33%

3.2实例分析

本文选取了著名的Iris数据集,Iris数据集共150组,有四个特征,分别是花萼和花瓣的长度和宽度,类别也是三类,取k=20,对前文程序代码稍作修改如下。

#程序3:

clearall

clc

y=importdata('C:

\Users\adm\Desktop\test.txt');

p=y(:

2:

5);

p=p';

Add=zeros(150,1);

Add(1:

50,:

)=ones(50,1);

Add(51:

100,:

)=2*ones(50,1);

Add(101:

150,:

)=3*ones(50,1);

figure

(1),plot(y(:

1),Add,'g.');

holdon

gridon;

count=0;

fori=1:

3

forj=1:

50

fork=1:

150

distance(k)=mse(p(:

k)-p(:

(i-1)*50+j));%保存每个向量与所有训练样本之间的距离

end

[d1index1]=sort(distance);%对距离distance向量进行从小到大的排序

num=[000];

form=1:

20%考察num,存放的是排序后distance前20个属于每一类别的个数

ifindex1(m)<=50

num

(1)=num

(1)+1;

elseifindex1(m)<=100

num

(2)=num

(2)+1;

else

num(3)=num(3)+1;

end

end

[d2class]=max(num);%属于哪类的个数最多,就属于哪类,class即就是该向量所属的类别

ifi==class

count=count+1;

end

A((i-1)*50+j)=class;%存放判断的结果

end

end

count

rate=count/150

figure

(2),plot(y(:

1),A,'r.');gridon;%画图分类

程序执行后得到以下结果:

count=147rate=0.9800

图3原始数据的分类图像

图4K近邻分类算法所得到的分类图像

实验结果分析

上述程序运行后的结果表明k取20时对Iris数据集具有较好的分类效果,从某种意义上说,k近邻算法对花的分类可以给出一定的借鉴意义。

改变k值后,分别取k=4,6,8,10,12,14,16,18,20,22,24,30时,发现对于Iris数据集k取8-22之间的值最为合适,分类正确率稳定,当k小于8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1