# 模式识别 K 近邻法
## 一、最近邻、k 近邻算法介绍
### 1.1 介绍
以每个训练样本为一个子类,不同类的两个样本之间用最小距离作为分类准则。显然这时就没有必要事先用所有两两样本间的分类面构造出分段线性分类面,而是可以在拿到一个待分类的样本后,通过判断它到两类样本的距直来进行决策。这就是最近邻法。
最近邻法就是源于这样一种直观的想法:对于一个新样本,把它逐一与已知样本比较,找出距离新样本最近的已知样本,该样本的类别作为新样本的类别。
在很多情况下,把决策建立在一个最近的样本上有一定风险,当数据分布复杂或数据中噪声严重时尤其如此。一种很自然的改进就是引人投票机制选择前若干个离新样本最近的已知样本,用它们的类别投票来决定新样本的类别,这种方法称作 k-近邻法,因为人们习惯上把参加投票的近邻样本的个数记作 k。显然,最近邻法可以看作是 k 近邻法的特例。
### 1.2 近邻法的形式化表示
(1)最近邻
已知样本集![](https://www.writebug.com/myres/static/uploads/2021/12/16/c7f6b44cddabac0c381d3597b5b9cf64.writebug),其中,![](https://www.writebug.com/myres/static/uploads/2021/12/16/89aa7fe9c44624b0356755568f8f60b5.writebug)是样本i的特征向量,![](https://www.writebug.com/myres/static/uploads/2021/12/16/6e401ad0bea2509bd0a2900d55a58ce0.writebug)是它对应的类别,设c个类,即![](https://www.writebug.com/myres/static/uploads/2021/12/16/d2920e24e12ca1edad1e247aacb43dcd.writebug)。定义两个样本简得距离量度![](https://www.writebug.com/myres/static/uploads/2021/12/16/e65aa623ef9286538b52e99821cecb8e.writebug),比如可以采用欧氏距离![](https://www.writebug.com/myres/static/uploads/2021/12/16/fe03b0be84338602453c1944ef97047a.writebug)。对未知样本![](https://www.writebug.com/myres/static/uploads/2021/12/16/00a324f555aa71411c1340f314998a37.writebug),求![](https://www.writebug.com/myres/static/uploads/2021/12/16/308238a9002d1c8f87839cc0961abb89.writebug)中与之距离最近的样本,设为![](https://www.writebug.com/myres/static/uploads/2021/12/16/cef65a5b59bda24c2fc460cb60aa326f.writebug)(对应的类别为![](https://www.writebug.com/myres/static/uploads/2021/12/16/20be52ca7af3d038b69f8793035798bc.writebug)),即:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/bf8416c5c4484a60718ab41dc36ccb23.writebug)
将![](https://www.writebug.com/myres/static/uploads/2021/12/16/2b3937e5072743879062575e05a32b80.writebug)决策为![](https://www.writebug.com/myres/static/uploads/2021/12/16/dc6765031f88a368a75f0f8cd90277cf.writebug)类。
如果写成判别函数的形式,![](https://www.writebug.com/myres/static/uploads/2021/12/16/c1da37ac0ae1b541fc49cd62e0b5830f.writebug)类的判别函数可以写作:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/9b0e5dd6288370b4ef2568ac86671f93.writebug)
决策规则为各类的判别函数比较大小,即:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/67d322accb621c049768031d185c232c.writebug)
错误率:最坏不会超过两倍的贝叶斯错误率,而最好则有可能接近或达到贝叶斯错误率。
注:根据实际问题,可以采用不同的距离度量。
(2)k 近邻
设有N个已知样本分属于c个类![](https://www.writebug.com/myres/static/uploads/2021/12/16/5f984743f82b31f21b37b2db66087570.writebug),![](https://www.writebug.com/myres/static/uploads/2021/12/16/ead1c284b67c40664a29075544e0f6a3.writebug),考察新样本![](https://www.writebug.com/myres/static/uploads/2021/12/16/5666f2a2e8a0324a46b17817c5c3ed44.writebug)在这些样本中的前![](https://www.writebug.com/myres/static/uploads/2021/12/16/18a9dbee9689ab708bd7de3473bb7101.writebug)个近邻,设有![](https://www.writebug.com/myres/static/uploads/2021/12/16/1010f179a3b7b91d1ba53c99c2e99a41.writebug)个属于![](https://www.writebug.com/myres/static/uploads/2021/12/16/e06462310aab888e634723b0f555ae49.writebug)类,则![](https://www.writebug.com/myres/static/uploads/2021/12/16/b021a6794e51bf2ed7f2003fc3f74e9f.writebug)类的判别函数就是:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/c7d5068fd18ed24adc1643db89c21e91.writebug)
决策规则是:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/f1446a0cbd36e2596fa4dc6e8c2785e3.writebug)
错误率:当 k 趋于无穷大时,k 近邻法就达到了贝叶斯错误率。
注:在两分类问题中,通常需要选择 k 为奇数,以避免出现两类的票相等的情况
## 二、实验数据集介绍
### 2.1 Iris 数据集介绍
![](https://www.writebug.com/myres/static/uploads/2021/12/16/69423f9dd44f1765e450661126ef59f7.writebug)
### 2.2 Sonar 数据集介绍
![](https://www.writebug.com/myres/static/uploads/2021/12/16/4530ba8d26d73580d98cf0f2597d478b.writebug)
## 三、实验设置
对两类数据集,均分别采用最近邻、k 近邻两种方法进行分类,计算准确率,最后将 k 值、测试比例进行变换,观察分类结果。
两类数据集处理方法具有相似性,因此实验设置基本一致,具体如下:
1、读取数据信息。首先从数据集文件(iris.data、sonar.all-data)中读取数据,将读取到的数据按照一定比例(例如:1/5 的数据用于测试,4/5 的数据用于训练)随机存放到训练集和测试集中,再将训练集中数据按标签分类(Iris 分三类、sonar 分两类)。
2、求解样本间距离。依次遍历测试集中的元素,将测试数据分别与训练集中的每一组数据求解欧氏距离(还可更换其他距离),将所有距离数据保存。
3、寻找最小距离/分类别投票,求分类结果。
(1)最近邻法:直接遍历即可求出最小距离,该最小距离对应的样本标签即为分类结果。
(2)k 近邻法:将训练集数据的标签和对应距离依据距离进行排序(递增),取前 k 项数据,统计出现次数最多的标签数,该标签即为分类结果。
4、 统计所有测试数据分类的正确、错误数量,计算准确率。
5、重复 1-4 步 20 次,计算平均准确率,绘图显示。
6、更改 k 值,观察准确率变化。
## 四、实验结果展示与分析
### 4.1 Iris 数据集分类结果分析
![](https://www.writebug.com/myres/static/uploads/2021/12/16/7679dcfce812090a617d1f13d9402a0d.writebug)![](https://www.writebug.com/myres/static/uploads/2021/12/16/869c4a613afc1317b295498633aa42b7.writebug)![](https://www.writebug.com/myres/static/uploads/2021/12/16/dc72bb48abd8c2c6d54696b15994801f.writebug)
1、首先使用最近邻法将 Iris 测试集进行分类,默认使用 1/5 的数据用于测试,4/5 的数据用于训练,重复 20 次后,分类精确度如下:
上述结果可以看出:20次最近邻法iris数据集分类平均准确率96.3%,由于测试样本较少,还出现了几次准确率为1的情况。
![](https://www.writebug.com/myres/static/uploads/2021/12/16/4afd939c6edde11606db655f8e7c5e27.writebug) 2、使用 k 近邻法将 Iris 数据集分类,设置 k=5,其余设置与上述一致,分类结果如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/16/2abb1a002eb19461d9f33fe1714cb61b.writebug)![](https://www.writebug.com/myres/static/uploads/2021/12/16/2f1d0bb9435b7f9bed61f62212e3276a.writebug)![](https://www.writebug.com/myres/static/uploads/2021/12/16/ab7d98729167be9662c77045868220fd.writebug)
上述结果可以看出:使用 k 近邻法(k=5)的分类结果与最近邻法相比,精准度略有提高,但相差不多。平均准确率为 96.5%。
3、随后改变 k 的值(1-20,对应图中 0-19)进行测试,分类结果如下:
上述结果可以看出:k 取值在 12 之前准确率均在较高水平,由于�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
以每个训练样本为一个子类,不同类的两个样本之间用最小距离作为分类准则。显然这时就没有必要事先用所有两两样本间的分类面构造出分段线性分类面,而是可以在拿到一个待分类的样本后,通过判断它到两类样本的距直来进行决策。这就是最近邻法。 最近邻法就是源于这样一种直观的想法:对于一个新样本,把它逐一与已知样本比较,找出距离新样本最近的已知样本,该样本的类别作为新样本的类别。 在很多情况下,把决策建立在一个最近的样本上有一定风险,当数据分布复杂或数据中噪声严重时尤其如此。一种很自然的改进就是引人投票机制选择前若干个离新样本最近的已知样本,用它们的类别投票来决定新样本的类别,这种方法称作 k-近邻法,因为人们习惯上把参加投票的近邻样本的个数记作 k。显然,最近邻法可以看作是 k 近邻法的特例。
资源推荐
资源详情
资源评论
收起资源包目录
100012071-基于Python进行模式识别(K 近邻法).zip (14个子文件)
mssbkjl
sonar
K-Nearest_Neighbors.py 7KB
sonar.rocks 42KB
sonar.all-data 86KB
sonar.mines 48KB
Index (1) 178B
LICENSE 1KB
K近邻.docx 470KB
iris
K-Nearest_Neighbors.py 8KB
bezdekIris.data 4KB
Index 105B
iris.data 4KB
iris.names 3KB
README.md 27KB
17170120015-任俊杰-模式识别大作业(2).pdf 746KB
共 14 条
- 1
资源评论
- qq_585482262023-11-06资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
- C20212124282023-11-19资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
神仙别闹
- 粉丝: 2671
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 二叉树7-1-1.cpp
- android 9.0 原生模拟器 签名文件
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功