zoukankan      html  css  js  c++  java
  • 余弦相似度和余弦距离的推导与理解

    1 余弦相似度

    余弦相似度是通过测量两个向量之间的夹角的余弦值来度量他们之间的一个相似度.0度角的余弦值是1,其他的任何角度的余弦值都不大于1,最小值是-1,从而两个向量之间角度的余弦值确定了两个向量是否指向同一个方向.两个向量的指向相同时,余弦相似度为1,当两个向量的夹角是90度时,余弦相似度的值为0,两个向量的指向完全相反时,余弦相似度的值为-1.*这个结果与向量的长度无关,仅仅与向量的指向有关.

    余弦相似度通常用于正空间,因此一般的值为0到1之间.这个界限对任意维度的向量空间都适用,而且余弦相似度最长应用于高维正空间.它通常应用于文本挖掘中的文件比较,另外,在数据挖掘领域,常用来度量集群内部的凝聚力.

    两个向量之间的余弦值可以通过使用欧几里得点积公式求出:

    给定两个属性向量,A和B,其余弦相似性由点积和向量长度给出,如下所示:

    公式推导:

    2 余弦距离

    简单来说,余弦距离就是用1 减去我们的余弦相似度获得的.余弦相似度的取值范围是[-1,1],方向相同的两个向量之间的相似度是1,余弦距离的取值范围是[0,2]

    我们看下余弦距离与欧式距离之间的关系:

     余弦距离并不是严格意义上的距离,但根据数学上的定义,在一个集合中,如果一对元素可确定一个实数,使得非负性,对称性和三角不等式成立,则该实数可称为这对元素之间的距离.1

    1 非负性

    根据上述的介绍,余弦距离的取值范围为[0,2],满足非负性的性质

    2 对称性

    dist(A,B)=1cosθ=dist(B,A)

    所以满足对称性

    3 三角不等式

    因此,余弦距离是不满足三角不等式的性质的.

    所以余弦距离不是严格意义上定义的距离,但是他可以有效的体现特征向量在方向上的相对差异

  • 相关阅读:
    zookeeper基础笔记
    基于spring@aspect注解的aop实现
    Struts2中的开启AsyncContext的方法
    在执行gem install redis时 : ERROR: Error installing redis: redis requires Ruby version >= 2.2.2
    ConcurrentHashMap原理笔记
    Java并发Condition原理分析
    CountDownLatch实现原理
    ThreadPoolExecutor 线程池原理分析
    HashMap原理
    线程池的用法
  • 原文地址:https://www.cnblogs.com/abella/p/11170592.html
Copyright © 2011-2022 走看看