K近邻分类的算法实现Word格式文档下载.docx
《K近邻分类的算法实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《K近邻分类的算法实现Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
这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;
plot(A2(:
1),A2(:
)
A3=rand(50,2)+1.5;
plot(A3(:
1),A3(:
得到如图所示图像
图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.'
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
[d2class]=max(num);
%属于哪类的个数最多,就属于哪类,class即就是该向量所属的类别
ifi==class
count=count+1;
A((i-1)*50+j)=class;
%存放判断的结果
end
count
rate=count/150
figure
(2),plot(y(:
1),A,'
r.'
%画图分类
程序运行后得到
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
5
96%
4%
10
94.67%
5.33%
15
95.33%
4.67%
20
96.67%
3.33%
30
40
60
3.2实例分析
本文选取了著名的Iris数据集,Iris数据集共150组,有四个特征,分别是花萼和花瓣的长度和宽度,类别也是三类,取k=20,对前文程序代码稍作修改如下。
#程序3:
5);
20%考察num,存放的是排序后distance前20个属于每一类别的个数
%属于哪类的个数最多,就属于哪类,class即就是该向量所属的类别
);
程序执行后得到以下结果:
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