《机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)》一文中,我们通过计算文本特征向量之间的欧氏距离,了解到各个文本之间的相似程度。当然,还有其他很多相似度度量方式,比如说余弦相似度。

《皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient & Cosine Similarity)》一文中简要地介绍了余弦相似度。因此这里,我们比较一下欧氏距离和余弦相似度之间的区别。

首先来说一下欧氏距离(Euclidean Distance)

n维空间里两个向量X(x1,x2,…,xn)与Y(y1,y2,…,yn)之间的欧氏距离计算公式是:

 

用矩阵表示法表示为:

再来说一下余弦相似度(Cosine Similarity)

n维空间里两个向量x(x1,x2,…,xn)与y(y1,y2,…,yn)之间的余弦相似度计算公式是:

用向量形式表示为:

相同之处:

在机器学习中都可以用来计算相似程度。欧氏距离是最常见的距离度量,而余弦相似度则是最常见的相似度度量。很多其他的距离度量和相似度度量都是基于这两者的变形和衍生。

区别:

借助三维坐标系来看下欧氏距离和余弦相似度的区别。(下图摘自:https://blog.csdn.net/lin00jian/article/details/51209715

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

适用场景:

欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,比如使用用户行为作为指标分析用户价值的相似情况(比较不同用户的消费能力),这属于价值度量;而余弦相似度对绝对数值不敏感,更多的用于使用用户对内容的评分来分析用户兴趣的相似程度(用户是否喜欢某商品),这属于定性度量。

需要注意的是,欧氏距离和余弦相似度都需要保证各维度处于相同的刻度级别(量纲),所以一般需要对数据先进行标准化处理,否则很可能会引起偏差。比如用户对内容评分,假设为5分制,对用户甲来说评分3分以上就是自己喜欢的,而对于用户乙,评分4分以上才是自己喜欢的,这样就无法很好地衡量两个用户评分之间的相似程度。如果将评分数值减去平均值,那么就可以很好地解决问题。此时,就相当于用皮尔逊相关系数来度量相似程度。

相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)的更多相关文章

  1. Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 协调过滤算法,是一种基于群体用户或者物品的典型推荐算法,也是目前常用的推荐 ...

  2. 余弦相似度-Cosine Similar(转载)

    余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上. 与欧几里德距离类似,基于余弦相似度的计算方法也是把用 ...

  3. 皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient & Cosine Similarity)

    之前<皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)>一文介绍了皮尔逊相关系数.那么,皮尔逊相关系数(Pearson Corre ...

  4. 两矩阵各向量余弦相似度计算操作向量化.md

    余弦相似度计算: \cos(\bf{v_1}, \bf{v_2}) = \frac{\left( v_1 \times v_2 \right)}{||v_1|| * ||v_2|| } \cos(\b ...

  5. 余弦相似度及基于python的三种代码实现、与欧氏距离的区别

    1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向.两条线段之间形成一个夹角, ...

  6. Jackcard类似度和余弦类似度(向量空间模型)的java实现

    版权声明:本文为博主原创文章,地址:http://blog.csdn.net/napoay,转载请留言. 总结Jackcard类似度和余弦类似度. 一.集合的Jackcard类似度 1.1Jackca ...

  7. 推荐系统之余弦相似度的Spark实现

    推荐系统之余弦相似度的Spark实现 (1)原理分析    余弦相似度度量是相似度度量中最常用的度量关系,从程序分析中, 第一步是数据的输入, 其次是使用相似性度量公式 最后是对不同用户的递归计算. ...

  8. Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】

    1. 词向量上的操作(Operations on word vectors) 因为词嵌入的训练是非常耗资源的,所以ML从业者通常 都是 选择加载训练好 的 词嵌入(Embedding)数据集.(不用自 ...

  9. 【Math】余弦相似度 和 Pearson相关系数

    http://cucmakeit.github.io/2014/11/13/%E4%BF%AE%E6%AD%A3%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A ...

随机推荐

  1. Django-restframework 源码之认证组件源码分析

    Django-restframework 源码之认证组件源码分析 一 前言 之前在 Django-restframework 的流程分析博客中,把最重要的关于认证.权限和频率的方法找到了.该方法是 A ...

  2. Flutter map 妙用及 .. 使用

    前言 本篇文章对于熟悉 flutter 或者 dart 的小伙伴来说可能觉得比较简单,但是对于初学者或者没用过的小伙伴还是有些收获的. 背景 说到 map 妙用的发现,还要归功于 Tooltip 的研 ...

  3. 从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包

    wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前 ...

  4. javaweb中上传视频,并且播放,用上传视频信息为例

    1.上传视频信息的jsp页面uploadVideo.jsp <body background="image/bk_hero.jpg"><div id=" ...

  5. java的设计模式 - Builder模式

    Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...

  6. tablednd onDrap 方法不调用

    场景 使用 tablednd 插件时,onDrap 方法不调用 解决 给tr标签加 id 属性

  7. Django学习之十一:真正理解Django的路由分发和反解url原理

    目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 d ...

  8. css的三种书写方式

    一.内联样式 <p style="color: sienna; margin-left: 20px"> This is a paragraph </p> 二 ...

  9. 获取用户IP

    public static string GetIP()        {            string ip;            if (System.Web.HttpContext.Cu ...

  10. Go语言打造以太坊智能合约测试框架(level2)

    传送门: 柏链项目学院 第二课 智能合约自动化编译 前期内容回顾 之前我们的介绍的是如何通过solc编译智能合约,并且调用智能合约,本节我们继续实践,将智能合约的代码自动化编译以及abi文件生成搞定. ...