simhash算法_Mapreduce原理

simhash算法_Mapreduce原理一、LSH介绍    LSH(Localitysensitivehashing)是局部敏感性hashing,它与传统的hash是不同的。传统hash的目的是希望得到O(1)的查找性能,将原始数据映射到相应的桶内。    LSH的基本思想是将空间中原始数据相邻的2个数据点通过映射或者投影变换后,这两个数据点在新的空间中的相邻概率很大,不相邻的点映射到同一个桶的概率小。我们可以看到将一个在超大

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、LSH 介绍

    LSH(Locality sensitive hashing)是局部敏感性hashing,它与传统的hash是不同的。传统hash的目的是希望得到O(1)的查找性能,将原始数据映射到相应的桶内。
    LSH的基本思想是将空间中原始数据相邻的2个数据点通过映射或者投影变换后,这两个数据点在新的空间中的相邻概率很大,不相邻的点映射到同一个桶的概率小。我们可以看到将一个在超大集合内查找相邻元素的问题转化为了在一个很小的集合内查找相邻元素的问题,显然计算量下降了很多。下面借用一幅图来表示:

这里写图片描述

LSH满足如下条件:
ifd(x,y)d1,thenP(h(x)=h(y))P1
ifd(x,y)d2,thenP(h(x)=h(y))P2
•其中d(x,y)表示x和y之间的距离,d1 < d2,h(x)和h(y)分别表示对x和y进行hash变换。
•满足以上两个条件的hash functions称为(d1,d2,p1,p2)-sensitive。而通过一个或多个(d1,d2,p1,p2)-sensitive的hash function对原始数据集合进行hashing生成一个或多个hash table的过程称为Locality-sensitive Hashing.

二、Simhash 算法

    SimHash 算法的输入是一个向量,输出是一个 f 位的签名值。设输入的是一个文档的特征集合,每个特征有一定的权重。
Simhash 算法如下:

  1. 将一个

    f
    维向量 v⃗  初始化为 0⃗  , f 位的二进制数

    S
    初始化为0

    • 对每一个特征:
      用传统的hash算法对该特征产生一个 f 位的签名

      b
      .
      对于 i=1tof:
      如果 b 的第

      i
      位为1,则 v⃗  S 加上该特征的权重



      否则, v⃗  的第 i 个元素减去该特征的权重
    • 如果

      v⃗ 
      的第 i 个元素大于0,

      S
      的第 i 位为1,否则为0
    • 输出

      S
      作为签名
    • 如下图所示:
      这里写图片描述

      SimHash是由随机超平面hash算法演变而来的,对于一个 n 维向量

      v⃗ 
      , 要得到一个f位的签名( f<<n ),算法如下:

      1.随机产生 f

      n
      维的向量 r⃗ 1,r⃗ 2,,r⃗ f
      2.对每一个向量 r⃗ i ,如果 v⃗  r⃗ i 的点积大于 0 ,则最终签名的第

      i
      位为 1 ,否则为

      0

          上述算法相当于随机产生了f个n维超平面,每个超平面将v所在的空间一分为二。v在这个超平面上方则得到一个1,否则得到一个0,然后将得到的f个0或1组合起来成为一个f维的签名。

          如果两个向量 u⃗ ,v⃗  的夹角为 θ ,则一个随机超平面将它们分开的概率为 θπ ,因此 u⃗ ,v⃗  的签名的对应位不同的概率等于 θπ ,所以,我们可以用两个向量的签名的不同的对应位的数量,即汉明距离,来衡量这两个向量的差异程度。

          在simhash中并没有直接产生用于分割空间的随机向量,而是间接产生的:第k个特征的hash签名的第i位拿出来,如果为0,则改为-1,如果为1则不变,作为第i个随机向量的第k维。由于hash签名是f位的,因此这样能产生f个随机向量,对应f个随机超平面。

          simhash算法得到的两个签名的汉明距离可以用来衡量原始向量的夹角。这其实是一种降维技术,将高维的向量用较低维度的签名来表征。衡量两个内容相似度,需要计算汉明距离。汉明距离是两个字符串对应位置的不同字符的个数:
      1011101 与1001001 之间的汉明距离是2。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187342.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SPSS-单因素方差分析(ANOVA) 案例解析[通俗易懂]

    SPSS-单因素方差分析(ANOVA) 案例解析[通俗易懂]继续以上一期的样本为例,雌性老鼠和雄性老鼠,在注射毒素后,经过一段时间,观察老鼠死亡和存活情况。研究的问题是:老鼠在注射毒液后,死亡和存活情况,会不会跟性别有关?样本数据如下所示:(a代表雄性老鼠

    2022年7月3日
    40
  • java怎么表示绝对值(java求平均值的函数)

    下面要给大家分享的是三个输入一个数求绝对值的java实例,一起来看看用java求一个数的绝对值的完整代码吧。题目1java输入一个数,输出它的绝对值。代码实现1publicclass绝对值{publicstaticvoidmain(String[]args){System.out.println(“输入一个整数n:”);Scanners=newScanner(System.in…

    2022年4月17日
    66
  • Java 泛型擦除_java中泛型的使用

    Java 泛型擦除_java中泛型的使用java泛型的残酷现实就是:在泛型代码内部,无法获得任何有关泛型参数类型的信息。在使用泛型时,任何具体的类型都被擦除,唯一知道的是你在使用一个对象。比如:List<String>和List<Integer>在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。snippet1:1packagecom.cognizant.ch15…

    2022年9月25日
    1
  • 蓝桥杯集锦01(python3)

    蓝桥杯集锦01(python3)

    2021年4月14日
    186
  • 安捷伦频谱仪的使用方法图解_安捷伦E4402B频谱仪使用说明

    安捷伦频谱仪的使用方法图解_安捷伦E4402B频谱仪使用说明标签:安捷伦仪器使用说明安捷伦仪器使用说明本资料为安捷伦频谱仪器使用说明,资料用于学习交流不能以任何形式商用。文档内容节选AgilentE4402BESAESeriesSpectrumAnalyzer使用方法简介宁波之猫2009617…

    2022年8月11日
    6
  • fastjson jsonobject转map对象_jsonobject遍历

    fastjson jsonobject转map对象_jsonobject遍历原标题:jsonobject转map对象我们在开发嵌套数据的时候,有时会返回jsonobject数据,这是因为进行的是url访问,但是这个过程可能会出现异常,因此我们需要将jsonobject转map对象使用。本文将向大家介绍jsonobject转map对象的实现方法。1、依赖于jar包,使用json-lib包进行转换。相关jar包jakartacommons-lang2.5jakarta…

    2022年8月23日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号