1、欧式距离与余弦距离

对于两个向量 A和B ,其余弦相似度定义为

openCV使用欧氏距离余弦相似度计算人脸相似度_数据集


即两个向量夹角的余弦,关洼的是向量之间的角度关系,并不关心他们的绝对大小,真取值范围是[-1, 1]

总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。越接近于1说明两个样本的相对方向越相似,相反越靠近于-1,说明两个样本的方向越不一样。

1)例如,统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户B为(1,0);此时二者的余弦距很大,而欧氏距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。说明两个用户的观看行为存在很大的差异

2)而当我们分析用户活跃度,以登陆次数(单位:次)和平均观看时长(单:分钟)作为特征时,余弦距离会认为(1,10)、(10,100)两个用户距离很近;但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离。
问题2:
1、knn与k-means的区别
首先我们比较一下Knn和K-means的基本算法原理。

KNN
特点:
1、分类算法
2、监督学习
3、数据集是带Label的数据
4、没有明显的训练过程,基于Memory-based learning
5、K值含义 - 对于一个样本X,要给它分类,首先从数据集中,在X附近找离它最近的K个数据点,将它划分为归属于类别最多的一类
K-means
1、聚类算法
2、非监督学习
3、数据集是无Label,杂乱无章的数据
4、有明显的训练过程
5、K值含义- K是事先设定的数字,将数据集分为K个簇,需要依靠人的先验知识

不同点:

1、两种算法之间的根本区别是,K-means本质上是无监督学习,而KNN是监督学习;K-means是聚类算法,KNN是分类(或回归)算法。

2、k-nn有标签而k-means无标签

3、k-means有训练过程,而k-nn没有训练的过程

问题3:为什么k-nn中常用欧式距离而不选择曼哈顿距离

首先

openCV使用欧氏距离余弦相似度计算人脸相似度_欧氏距离_02


openCV使用欧氏距离余弦相似度计算人脸相似度_欧氏距离_03


openCV使用欧氏距离余弦相似度计算人脸相似度_数据集_04


从这张图中可以看出欧式距离更关注于点在空间的相对距离,而曼哈顿距离择关注于点如何通过坐标轴上的方向到达另一点。

而在计算距离时我们更关注于样本之间的绝对差异,而不考虑样本之间的投影差异,所以采用欧式距离。