本篇文章内容
KNN
1、介绍
KNN即K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻居来代表。KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。在分类中选择K个最相似数据中出现次数最多的分类作为新数据的分类,即“投票法”。它的核心思想可以用一句话来概括:物以类聚,人以群分。KNN算法主要涉及3个因素:样本集、距离或相似的衡量、K的大小。
如上图,求绿色圆圈的所属类别,正方形和三角形都是样本数据。假设k=3,则绿色圆圈的邻居有两个三角形和一个正方形,按照投票法,绿色圆圈所属类别应该是红色三角形。若k=5,则绿色圆圈的邻居有两个三角形和三个正方形,则绿色圆圈所属类别是蓝色正方形。
2、算法步骤
(1)计算测试对象和训练集每个对象之间的距离;
(2)按递增顺序对距离进行排序;
(3)把距离最近的K个点作为测试对象的最近邻;
(4)找到这些邻居中的绝大多数类;
(5)将绝大多数类返回作为我们对测试对象归属类的预测;
在第二步排序之后 ,采用字典存储邻近标记,用文本字符串或者数字表示标记。
3、度量方法
(1)距离度量
距离度量(Distance)用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。
欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:
因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。
特征空间中的两个实例点的距离是两个实例点相似程度的反映。K近邻法的特征空间一般是n维实数向量空间。使用的距离是欧氏距离,但也可以是其他距离,如Minkowski Distance(明考斯基距离)或者Manhattan Distance(曼哈顿距离)等。
(2)相似度度量
相似度度量(Similarity),即计算个体间的相似程度,与距离度量相反,相似度度量的值越小,说明个体间相似度越小,差异越大。
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:
还有皮尔森相关系数(Pearson Correlation Coefficient),即相关分析中的相关系数r,分别对X和Y基于自身总体标准化后计算空间向量的余弦夹角。公式如下:
虽然余弦相似度对个体间存在的偏见可以进行一定的修正,但是因为只能分辨个体在维之间的差异,没法衡量每个维数值的差异。
(3)总结
根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型。欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感。
4、K的大小
K太小,分类结果易受噪声点影响;
K太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
所以K值通常采用交叉经验来确定(经验规则:K一般低于训练样本数的平方根)
5、优缺点
缺点:属于懒惰算法,时间复杂度较高,训练集很大的时候搜索速度慢
优点:简单,易于理解,易于实现,无需估计参数,无需训练,可以采用任意距离度量
6、代码实现
此脚本创建两个不同的正态分布数据集,利用Pickle模块保存(数据均采用随机生成的方式)
#