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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows中IIS和Serv-U两种方式搭建FTP服务[通俗易懂]

    Windows中IIS和Serv-U两种方式搭建FTP服务[通俗易懂]FTP是文件传输协议。用于互联网双向传输,控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。iis搭建ftp站点Windows中使用IIS搭建ftp站点需要先在控制面板中启动IIS服务,步骤如下:选择程序点击“启用或关闭Windows功能”按如下启用相关Windows功能:至此,IIS服务已启用,直接搜索iis并打开:展开左侧选项,右击“网站”,…

    2022年9月3日
    6
  • pycharmhtml插件_pycharm官方中文插件

    pycharmhtml插件_pycharm官方中文插件一、常用配置一、设置文件字符编码二、设置文件模板三、设置文字大小四、修改行数和方发线五、关闭应用更新二、常用插件RainbowCSV将CSV的不同的列用不同的颜色标出RainbowBrackets将每对匹配的括号都变成彩色的IndentRainbow将索引变成彩色CodeGlance在右边生成代码缩略图MaterialTheme不同风格的主题Chinese(Simplified)LanguagePack中文语言包Ke

    2025年7月8日
    0
  • 用python给女朋友表白_python绘制太阳花

    用python给女朋友表白_python绘制太阳花python表白玫瑰花绘制——情人节表白搬运不易,路过的各位大佬请点个赞————————————————版权声明:本文主要参考CSDN博主「sunie」的文章,参考博文链接:https://blog.csdn.net/weixin_43387647/article/details/88973568python表白玫瑰花绘制——情人节表白python表白玫瑰花绘制——情人节表白一、玫瑰花绘制一二、玫瑰花绘制二三、玫瑰花绘制三四、桃花绘制一、玫瑰花绘制一fig=plt.figure()a

    2022年8月31日
    1
  • SpringBatch概述

    SpringBatch概述1、SpringBatch简介1.1、简介根据Spring官网描述,SpringBatch是一个轻量级的、完善的批处理应用框架,旨在支持企业系统建立健壮、高效的批处理应用。然而SpringBatch不是一个调度框架,它只关注于任务的处理,如日志监控、事务、并发问题等,但是它可以与其它调度框架一起联合使用,完成相应的调度任务,如Quartz、Tivoli、Control-M等。Sprin…

    2022年5月8日
    46
  • java 继承是什么_java中继承指的是什么

    java 继承是什么_java中继承指的是什么java中继承指的是什么发布时间:2020-08-2014:46:11来源:亿速云阅读:55作者:小新这篇文章将为大家详细讲解有关java中继承指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java中继承是什么?Java中的继承是一个对象获取父对象的所有属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,创建基于现…

    2022年7月7日
    19
  • Kafka集群常用命令行操作[通俗易懂]

    Kafka集群常用命令行操作[通俗易懂]Kafka集群常用命令行操作1、创建topic创建一个名字为test的主题,有三个分区,有两个副本node01执行以下命令来创建topiccd/export/servers/kafka_2.11-1.0.0bin/kafka-topics.sh–create–zookeepernode01:2181–replication-factor2–partitions…

    2022年5月8日
    71

发表回复

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

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