`
liyonghui160com
  • 浏览: 762834 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

knn距离公式比较

阅读更多

 

      在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)。当然衡量个体差异的方法有很多,最近查阅了相关的资料,这里整理罗列下。

为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn)。下面来看看主要可以用哪些方法来衡量两者的差异,主要分为距离度量和相似度度量。

距离度量

距离度量(Distance)用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。

欧几里得距离(Euclidean Distance)

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




因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

明可夫斯基距离(Minkowski Distance)

明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述。公式如下:


 
这里的p值是一个变量,当p=2的时候就得到了上面的欧氏距离。

曼哈顿距离(Manhattan Distance)

曼哈顿距离来源于城市区块距离,是将多个维度上的距离进行求和后的结果,即当上面的明氏距离中p=1时得到的距离度量公式,如下:


 
切比雪夫距离(Chebyshev Distance)

切比雪夫距离起源于国际象棋中国王的走法,我们知道国际象棋国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1, y1)走到B格(x2, y2)最少需要走几步?扩展到多维空间,其实切比雪夫距离就是当p趋向于无穷大时的明氏距离:


 
其实上面的曼哈顿距离、欧氏距离和切比雪夫距离都是明可夫斯基距离在特殊条件下的应用。

马哈拉诺比斯距离(Mahalanobis Distance)

既然欧几里得距离无法忽略指标度量的差异,所以在使用欧氏距离之前需要对底层指标进行数据的标准化,而基于各指标维度进行标准化后再使用欧氏距离就衍生出来另外一个距离度量——马哈拉诺比斯距离(Mahalanobis Distance),简称马氏距离。

相似度度量

相似度度量(Similarity),即计算个体间的相似程度,与距离度量相反,相似度度量的值越小,说明个体间相似度越小,差异越大。

向量空间余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:


 
皮尔森相关系数(Pearson Correlation Coefficient)

即相关分析中的相关系数r,分别对X和Y基于自身总体标准化后计算空间向量的余弦夹角。公式如下:



 
Jaccard相似系数(Jaccard Coefficient)

Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下:



 

调整余弦相似度(Adjusted Cosine Similarity)

虽然余弦相似度对个体间存在的偏见可以进行一定的修正,但是因为只能分辨个体在维之间的差异,没法衡量每个维数值的差异,会导致这样一个情况:比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

欧氏距离与余弦相似度

欧氏距离是最常见的距离度量,而余弦相似度则是最常见的相似度度量,很多的距离度量和相似度度量都是基于这两者的变形和衍生,所以下面重点比较下两者在衡量个体差异时实现方式和应用环境上的区别。

借助三维坐标系来看下欧氏距离和余弦相似度的区别:



 
从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似度cosθ是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。

根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。

上面都是对距离度量和相似度度量的一些整理和汇总,在现实的使用中选择合适的距离度量或相似度度量可以完成很多的数据分析和数据挖掘的建模,后续会有相关的介绍。

 

1、欧式距离

   欧式距离是使用较多的相似性的度量方法,在kMeans中就使用到欧式距离作为相似项的发现。

2、皮尔逊相关系数(Pearson Correlation)

   在欧氏距离的计算中,不同特征之间的量级对欧氏距离的影响比较大,例如,我们就不能很好的利用欧式距离判断之间的相似性的大小。而皮尔逊相似性的度量对量级不敏感:

其中表示向量和向量内积,表示向量的二范数。

3、余弦相似度(Cosine Similarity)

   余弦相似度有着与皮尔逊相似度同样的性质,对量级不敏感,是计算两个向量的夹角。在吴军老师的《数学之美》上,在计算文本相似性的过程中,大量使用了余弦相似性的度量方法。
  • 大小: 2.5 KB
  • 大小: 2.2 KB
  • 大小: 1.9 KB
  • 大小: 3 KB
  • 大小: 1.9 KB
  • 大小: 2.9 KB
  • 大小: 1.6 KB
  • 大小: 18.6 KB
分享到:
评论

相关推荐

    新建文本文档.zip.zip_K._knn算法_距离 分类

    KNN分类是一个懒惰的分类方法,以K为值,根据距离公式的一种分类方法

    matlab关于knn的代码-knn_Localization_Demo:一个精简的knn定位算法,供室内定位初学者学习

    matlab关于knn的代码 重新整理了定位相关代码,位置指纹法可参考: 对应的Github地址: ...在求knn_x,knn_y为啥公式不一样,都用MOD不可以吗? 我把欧式距离reshape成了一维的,然后再排的序,这个一维数

    KNN算法实验报告.doc

    改进的地方:对kNN算法的一个明显的改进是对k个最近邻的贡献加权,将较大的 权值赋给较近的近邻,相应的算法称为距离加权kNN回归算法,则公式1则修改为:^f(X q)=(w1*f(X1)+...+wk*f(XK))/(w1+...wk)一般地距离权值...

    基于Python实现KNN分类【100011673】

    本次实验用knn算法为iris数据集进行了分类,得出结论是,在取测试比例为0.4,采用欧氏距离的情况下,k=7,9,10,11时,正确率最大为0.967。 并且尝试了运用多进程技术,变换距离公式与之前的数据比对。

    【K近邻(KNN)算法(一)】KNN的概念

    算法公式(1)分类(2)回归(不好,可以不看)(3)L1和L2范数距离L1范数距离(曼哈顿距离):L2范数距离(欧几里得距离):闵可夫斯基(knn中使用)3.K值选择举例 K-最近邻算法 1.算法介绍 属于有监督学习,知道可能的...

    机器学习_chap2_knn算法

    说明K-近邻算法的距离公式 。 说明K-近邻算法的超参数K值以及取值问题。 说明K-近邻算法的优缺点。 应用KNeighborsClassifier实现分类。 了解分类算法的评估标准准确率。

    Python 实现 KNN 分类算法

    文章目录1. KNN1.1 KNN 分类算法步骤1.2 KNN 的优缺点2. python 实现 本文将详细讲述 KNN 算法及其 python 实现 ...1.确定 k 值,确定计算距离的公式,如常用欧氏距离 d(x,y)=∑i=1n(xi−yi)2d(x,y)=\sqrt{\

    机器学习入门(二):KNN算法和决策边界(Decision Boundary)绘制

    1)KNN算法基础知识: KNN全称K Nearest Neighbor, k是指最近邻居的个数。 俗话说物以类聚,人以群分,我们通常判别一个人是好是坏的...很简单,我们就用三维坐标距离公式计算: 可以很直观地发现,他离第二个点是最近

    Python代码实现KNN算法

    kNN算法是k-近邻算法的简称,主要用来进行分类实践,主要思路如下: 1.存在一个训练数据集,每个数据都有对应的标签,也就是...欧式距离公式为: distance= sqrt((xA0-XB0)^2+(xA1-XB1)^2+…+(xAn-XBn)^2)(若数据

    产品经理算法篇——KNN

    步骤 : 计算测试数据与各个训练数据之间的距离 按照距离递增排序 选取距离最小的k个点 确定前k个点所在类别的出现频率 ...#引入计算准确率公式 from sklearn.metrics import accuracy_score ir

    论文研究-用于文本分类的改进KNN算法.pdf

    采用灵敏度方法对距离公式中文本特征的权重进行修正;提出一种基于CURE算法和tabu算法的训练样本库的裁减方法,采用CURE聚类算法获得每个聚类的代表样本组成新的训练样本集合,然后用tabu算法对此样本集合进行进一步...

    Machine-Learning:关于二分类,多分类,回归预测问题下,实现了比较基础的机器学习的算法。例如KNN,NB,PLA等

    一般K近邻采用的距离公式为曼哈顿距离、欧式距离、余弦相似度。 ——分类中通过前 K 个之后计算得到出现次数最多的情感类属,将其作为验证集样本的预测情感。 ——回归中通过由前 K 个样本的情感归属概率加权求和,...

    《封号码罗》数据分析与人工智能之KNN分类问题(七)

    # 是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。 # 该方法的思路是: # 在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。 # ...

    KNN scikit-learn相关参数

    KNeighborsClassifier & KNeighborsRegressor weights:样本权重,可选参数: uniform(等权重)、distance(权重和...metric:样本之间距离度量公式,默认为minkowski(闵可夫斯基);当参数p为2的时候,其实就是欧几里得距

    滞后校正MATLAB代码--dynamic_spatial_panel:-dynamic_spatial_panel

    结果可能比使用欧几里德距离公式更准确。 如果数据集很大,该例程可能比其他例程慢。 zip 存档中包含一个演示文件。 KNN 权重矩阵代码大圆距离:在此处下载 拉格朗日乘数测试套件拉格朗日乘数测试套件包含以下空间...

    大数据应用-基于大数据的推荐算法研究.pptx

    TopkS算法 采用余弦距离和皮尔逊相关公式累加性特点 引入倒排索引数据结构 结合TopK思想 TopKS是Top K Similarity的简写,即最大的前K个相似度。主要包含以下三部分: 大数据应用-基于大数据的推荐算法研究全文共35...

Global site tag (gtag.js) - Google Analytics