K-近邻算法(KNN)

K-近邻算法(KNN),第1张

简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。

欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

身高、体重、鞋子尺码数据对应性别

导包,机器学习的算法KNN、数据鸢尾花

获取训练样本 datasetsload_iris()

画图研究前两个特征和分类之间的关系(二维散点图只能展示两个维度)

第二步预测数据:所预测的数据,自己创造,就是上面所显示的背景点

生成预测数据

对数据进行预测

ocr 光学字符识别(Optical Character Recognition) 我们先做一个基础班:识别数字

参考《数据挖掘10大算法》对kNN算法进行基本总结,附有一个Python3的简例。

基本思想

从训练集中找出 k 个最接近测试对象的训练对象,再从这 k 个对象中找出居于主导的类别,将其赋给测试对象。

定位

由于这种总体占优的决策模式,对于类域的交叉、重叠较多的或者多模型、多标签的待分样本集来说,kNN方法较其他方法更为适合。kNN算法属于有监督学习的分类算法。

避开了两个问题

(1)分类时对象之间不可能完全匹配(kNN方法计算的是对象之间的距离);

(2)具有相同属性的对象有不同的类别(kNN方法依据总体占优的类别进行决策,而不是单一对象的类别进行决策)。

需要考虑几个关键要素

(1)训练集;

(2)用于计算对象之间临近的程度或者其他相似的指标;

(3)最近邻的个数 k;

(4)基于 k 个最近邻及其类别对目标对象类别进行判定的方法。

kNN方法很容易理解和实现,在一定条件下,其分类错误率不会超过最优贝叶斯错误率的两倍。一般情况下,kNN方法的错误率会逐渐收敛到最优贝叶斯错误率,可以用作后者的近似。

基本算法

算法的存储复杂度为O(n),时间复杂度为O(n),其中 n 为训练对象的数量。

影响kNN算法性能的几个关键因素

(1)k 值的选择;

如果 k 值选得过小,结果就会对噪声点特别敏感;k 值选得过大就会使得近邻中包含太多别的类的点。最佳 k 值的估计可以使用交叉验证的方法。通常,使用 k=1会有一个比较好的结果(特别是对于小数据集的情况)。但是,在样本很充足的情况下,选择较大的 k 值可以提高抗噪能力。

(2)类别决策时的综合方法;

对目标对象的类别进行决策,最简单的就是使用总体占优方法(简单投票,票数最多的一类胜出)。稍微复杂一点,考虑近邻中每个点与目标对象的距离不同,对决策的份量进行加权考虑。

(3)距离测量标准的选择。

距离测量的标准一般选择 欧几里得距离 或者 曼哈顿距离

简单例子

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 看下面这幅图:

KNN的算法过程是是这样的: 从上图中我们可以看到,图中的数据集是良好的数据,即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是我们待分类的数据。 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形 我们可以看到,KNN本质是基于一种数据统计的方法!其实很多机器学习算法也是基于数据统计的。 KNN是一种memory-based learning,也叫instance-based learning,属于lazy learning。即它没有明显的前期训练过程,而是程序开始运行时,把数据集加载到内存后,不需要进行训练,就可以开始分类了。 具体是每次来一个未知的样本点,就在附近找K个最近的点进行投票。

KNN算法的实现就是取决于,未知样本和训练样本的“距离”。我们计算“距离”可以利用欧式距离算法:

求出K个最相近的元组后,用这些元组对应的数值的平均值作为最终结果。

可以从K=1开始,逐步增加,用检验数据来分析正确率,从而选择最优K。这个结果要均衡考虑正确率与计算量,比如K=3时,正确率为90%,而K=10时,正确率为91%,则需要考虑计算量换来的1%提升是否合算了。

(1)如果可能的话先对样本数据进行排序,从而知道只需要与哪些数据进行比较。但对于高维数据,这几乎是不可行的。

(2)将样本数据划分为多个子集合,待分类数据只需要与其中的一个或者多个子集合进行比较。比如属性是经纬度,距离是2个经纬度点之间的距离,则可以将样本根据经纬度的整数部分将各个样本分到不同的子集合去,待分类元组只需要跟与自己整数部分相同的子集合进行比较即可,当子集合内的样本数据不足K时,再和邻近的集合进行比较。

(1)理论成熟,思想简单,既可以用来做分类又可以做回归

(2)可以用于非线性分类

(3)训练时间复杂度比支持向量机之类的算法低

(4)和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感

(5)由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合

(6)该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量比较小的类域采用这种算法比较容易产生误分类情况

(1)计算量大,尤其是特征数非常多的时候

(2)样本不平衡的时候,对稀有类别的预测准确率低

(3)KD树,球树之类的模型建立需要大量的内存

(4)是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢

(5)相比决策树模型,KNN模型的可解释性不强

注:来源于:>

以上就是关于K-近邻算法(KNN)全部的内容,包括:K-近邻算法(KNN)、kNN(k-NearestNeighbor)算法、Knn算法原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:聚客百科

原文地址: https://juke.outofmemory.cn/life/3827187.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存