• 【机器学习Q&A】余弦相似度、余弦距离、欧式距离以及机器学习中距离的含义



    机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常使用 余弦相似度来表示。
    余弦相似度的取值范围为[ -1, 1 ],相同的两个向量之间的相似度为1,将1减去余弦相似度即为 余弦距离。因此,余弦距离的取值范围为[0, 2],相同的两个向量余弦距离为0。

    问题1:为什么在一些场景中要使用余弦相似度而不是欧氏距离?

    对于两个向量A和B, 其余弦相似度定义为 c o s ( A , B ) = A ⋅ B ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 cos(A, B)=\frac{A\cdot B}{||A||_2||B||_2} cos(A,B)=A2B2AB,即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[-1, 1]。

    当一对文本相似度的长度差距很大,但内容相近时,如果使用词频或者词向量作为特征,它们在特征空间中的欧式距离通常很大;而如果使用余弦相似度的话,它们之间的夹角可能很小,因而相似度高。

    此外,在文本、图像、视频等领域,研究的对象的特征维度往往很高,余弦相似度在高维情况下依然保持“相同时为1,正交时为0,相反时为-1”的性质,而欧氏距离的数值则受维度的影响,范围不固定,并且含义比较模糊

    在一些场景中,如Word2Vec中,其向量的模长是经过归一化的,此时欧式距离与余弦距离有着单调的关系,即:
    ∣ ∣ A − B ∣ ∣ 2 = 2 ( 1 − c o s ( A , B ) ) ||A-B||_2=\sqrt{2(1-cos(A,B))} AB2=2(1cos(A,B))
    其中, ∣ ∣ A − B ∣ ∣ 2 ||A-B||_2 AB2表示欧式距离, c o s ( A , B ) cos(A,B) cos(A,B)表示余弦相似度, ( 1 − c o s ( A , B ) ) (1-cos(A,B)) (1cos(A,B))表示余弦距离。在此场景下,选择距离最小(相似度最大)的近邻,那么使用余弦相似度和欧式距离的结果是相同的。

    总体来说,欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异

    问题2:余弦距离是否是一个严格定义的距离?

    注意:余弦距离不是严格定义上的距离!
    
    • 1

    距离的定义:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性、对称性、三角不等式)成立,则该实数可称为这对元素之间的距离。
    (1)正定性
    根据余弦距离的定义,有
    d i s t ( A , B ) = 1 − c o s θ = ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 − A B ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 dist(A, B)=1-cos \theta = \frac{||A||_2||B||_2-AB}{||A||_2||B||_2} dist(A,B)=1cosθ=A2B2A2B2AB
    考虑到 ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 − A B ≥ 0 ||A||_2||B||_2-AB\ge 0 A2B2AB0,因此有 d i s t ( A , B ) ≥ 0 dist(A, B)\ge 0 dist(A,B)0恒成立。
    (2)对称性
    根据余弦距离的定义,有
    d i s t ( A , B ) = ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 − A B ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 = ∣ ∣ B ∣ ∣ 2 ∣ ∣ A ∣ ∣ 2 − A B ∣ ∣ B ∣ ∣ 2 ∣ ∣ A ∣ ∣ 2 dist(A, B)=\frac{||A||_2||B||_2-AB}{||A||_2||B||_2}=\frac{||B||_2||A||_2-AB}{||B||_2||A||_2} dist(A,B)=A2B2A2B2AB=B2A2B2A2AB
    满足对称性
    (3)三角不等式
    该性质并不成立,反例。给定A=(1,0),B=(1,1),C=(0,1),则有 d i s t ( A , B ) = 1 − 2 2 dist(A,B)=1-\frac{\sqrt{2}}{2} dist(A,B)=122 d i s t ( B , C ) = 1 − 2 2 dist(B,C)=1-\frac{\sqrt{2}}{2} dist(B,C)=122 d i s t ( A , C ) = 1 dist(A,C)=1 dist(A,C)=1
    因此有 d i s t ( A , B ) + d i s t ( B , C ) = 2 − 2 < 1 = d i s t ( A , C ) dist(A,B)+dist(B,C)=2-\sqrt{2}<1=dist(A,C) dist(A,B)+dist(B,C)=22 <1=dist(A,C)
    余弦距离满足正定性和对称性,不满足三角不等式。

    另外,我们知道单位圆上欧式距离和余弦距离满足
    ∣ ∣ A − B ∣ ∣ = 2 ( 1 − c o s ( A , B ) ) = 2 d i s t ( A , B ) ||A-B||=\sqrt{2(1-cos(A,B))}=\sqrt{2dist(A,B)} AB=2(1cos(A,B)) =2dist(A,B)
    即有如下关系:
    d i s t ( A , B ) = 1 2 ∣ ∣ A − B ∣ ∣ 2 dist(A, B)=\frac{1}{2}||A-B||^2 dist(A,B)=21AB2
    显然在单位圆上,余弦距离和欧式距离的范围都是[0,2],已知欧式距离是一个合法的距离,而余弦距离与欧式距离有二次关系,自然不满足三角不等式。

    在机器学习领域,被俗称为距离,但却不满足三条距离公理的不仅仅有余弦距离,还有KL距离(Kullback-Leibler Divergence),也叫做相对熵,它常用于计算两个分布之间的差异,但不满足对称性和三角不等式。


    在机器学习领域中,A/B测试是验证模型最终效果的主要手段
    问题1: 在对模型进行充分的离线评估后,为什么还要进行在线A/B测试?
    (1)离线评估无法消除模型过拟合的影响;因此,得出的离线评估效果无法完全替代线上评估结果
    (2)离线评估无法完全还原线上的工程环境。一般,离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况
    (3)线上系统的某些商业指标在离线评估中无法计算。比如,上线了新的推荐算法,离线往往关心ROC曲线、P-R曲线等;而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV访问量等的变化。

    问题2:如何进行线上A/B测试?
    (1) 进行A/B测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组用户施以新模型,对对照组用户施以旧模型;
    (2)在分桶的过程中,要注意样本的独立性采样方式的无偏性,确保同一个用户每次只能分到同一个桶中

    问题3:如何划分实验组和对照组?
    某公司的算法工程师对美国用户,研发了一套全新的视频推荐模型A;而正在使用的针对全体用户的推荐模型是B。
    正确的做法: 将所有的 美国用户根据user_id个位数奇偶划分为实验组和对照组,分别施以模型A和B,才能够验证模型A的效果;
    正确、无偏的划分方案


    参考资料

    [1] 《百面机器学习》第二章:模型评估
    [2] 熵 Entropy – 香农熵、相对熵、交叉熵、条件熵

  • 相关阅读:
    【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)
    信钰证券:中央汇金出手,金融板块沸腾,后续还有哪些可以期待?
    Antd Vue a-select placeholder不显示问题
    Javascript真的是10天内做出来的吗?
    [机器学习] 通俗理解机器学习分类模型评估指标-准确率、精准率、召回率
    Java版本spring cloud + spring boot企业电子招投标系统源代码
    Java 8实战(二)- 通过行为参数化传递代码
    ICCV 2023 | 当尺度感知调制遇上Transformer,会碰撞出怎样的火花?
    使用“纯”Servlet做一个单表的CRUD操作
    Flink(java版)
  • 原文地址:https://blog.csdn.net/ARPOSPF/article/details/125500726