相似度度量和距离度量在整个机器学习领域都是非常基础的概念,数据科学家 Gonzalo Ferreiro Volpi 近日通过浅显易懂的推荐系统示例介绍了这些概念以及它们的计算方式。
选自 Medium,作者:Gonzalo Ferreiro Volpi,机器之心编译,参与:Panda。
在推荐系统中,我们经常谈到「相似度度量」这一概念。为什么?因为在推荐系统中,基于内容的过滤算法和协同过滤算法都使用了某种特定的相似度度量来确定两个用户或商品的向量之间的相等程度。所以总的来说,相似度度量不仅仅是向量之间的距离。
注:我的所有工作都可在我的 GitHub 页面查看:https://github.com/gonzaferreiro,其中当然也包括本文内容的代码库以及有关推荐系统的更多内容。
在任意类型的算法中,最常见的相似度度量是向量之间夹角的余弦,即余弦相似度。设 A 为用户的电影评分 A 列表,B 为用户的电影评分 B 列表,那么它们之间的相似度可以这样计算:
![618e7b226ee25e29ffdacb245430f190.png](https://i-blog.csdnimg.cn/blog_migrate/bfbb33bd50e474a03f179f9e4da3985e.jpeg)
从数学上看,余弦相似度衡量的是投射到一个多维空间中的两个向量之间的夹角的余弦。当在多维空间中绘制余弦相似度时,余弦相似度体现的是每个向量的方向关系(角度),而非幅度。如果你想要幅度,则应计算欧几里德距离。
余弦相似度很有优势,因为即使两个相似的文件由于大小而在欧几里德距离上相距甚远(比如文档中出现很多次的某个词或多次观看过同一部电影的某用户),它们之间也可能具有更小的夹角。夹角越小,则相似度越高。
如下例所示,来自 www.machinelearningplus.com
![6e6c5858c986ba2b9c53800082949d29.png](https://i-blog.csdnimg.cn/blog_migrate/f0494b27c88ae18ff4d6798b97b49a1a.jpeg)
上图统计了 sachin、dhoni、cricket 这三个词在所示的三个文档中的出现次数。据此,我们可以绘出这三个向量的图,从而轻松地看出衡量这些文档的余弦和欧几里德距离的差异: