你能建议一个好的 minhash 实现吗?

2024-04-01

我正在尝试寻找一个可以在我的工作中利用的 minhash 开源实现。

我需要的功能非常简单,给定一个集合作为输入,实现应该返回其 minhash。

首选 python 或 C 实现,以防万一我需要破解它才能为我工作。

任何指示都会有很大帮助。

Regards.


如果您有兴趣研究 minhash 算法,这里有一个非常简单的实现和一些讨论。

为了生成集合的 MinHash 签名,我们创建一个长度向量$N$其中所有值都设置为正无穷大。我们还创造$N$接受输入整数并排列该值的函数。这$i^{th}$功能将全权负责更新$i^{th}$向量中的值。给定这些值,我们可以通过将集合中的每个值传递给每个集合来计算集合的 minhash 签名$N$排列函数。如果输出的$i^{th}$排列函数低于$i^{th}$向量的值,我们用排列函数的输出替换该值(这就是为什么哈希被称为“min-hash")。让我们用 Python 来实现这个:

from scipy.spatial.distance import cosine
from random import randint
import numpy as np

# specify the length of each minhash vector
N = 128
max_val = (2**32)-1

# create N tuples that will serve as permutation functions
# these permutation values are used to hash all input sets
perms = [ (randint(0,max_val), randint(0,max_val)) for i in range(N)]

# initialize a sample minhash vector of length N
# each record will be represented by its own vec
vec = [float('inf') for i in range(N)]

def minhash(s, prime=4294967311):
  '''
  Given a set `s`, pass each member of the set through all permutation
  functions, and set the `ith` position of `vec` to the `ith` permutation
  function's output if that output is smaller than `vec[i]`.
  '''
  # initialize a minhash of length N with positive infinity values
  vec = [float('inf') for i in range(N)]

  for val in s:

    # ensure s is composed of integers
    if not isinstance(val, int): val = hash(val)

    # loop over each "permutation function"
    for perm_idx, perm_vals in enumerate(perms):
      a, b = perm_vals

      # pass `val` through the `ith` permutation function
      output = (a * val + b) % prime

      # conditionally update the `ith` value of vec
      if vec[perm_idx] > output:
        vec[perm_idx] = output

  # the returned vector represents the minimum hash of the set s
  return vec

这里的所有都是它的!为了演示我们如何使用这个实现,让我们举一个简单的例子:

import numpy as np

# specify some input sets
data1 = set(['minhash', 'is', 'a', 'probabilistic', 'data', 'structure', 'for',
        'estimating', 'the', 'similarity', 'between', 'datasets'])
data2 = set(['minhash', 'is', 'a', 'probability', 'data', 'structure', 'for',
        'estimating', 'the', 'similarity', 'between', 'documents'])

# get the minhash vectors for each input set
vec1 = minhash(data1)
vec2 = minhash(data2)

# divide both vectors by their max values to scale values {0:1}
vec1 = np.array(vec1) / max(vec1)
vec2 = np.array(vec2) / max(vec2)

# measure the similarity between the vectors using cosine similarity
print( ' * similarity:', 1 - cosine(vec1, vec2) )

这将返回 ~.9 作为这些向量之间相似性的度量。

虽然我们上面只比较了两个 minhash 向量,但我们可以通过使用“局部敏感哈希”来更简单地比较它们。为此,我们可以构建一个字典,将 $W$ MinHash 向量分量的每个序列映射到构造 MinHash 向量的集合的唯一标识符。例如,如果W = 4我们有一套S1从中我们得出 MinHash 向量[111,512,736,927,817...],我们将添加S1该向量中四个 MinHash 值的每个序列的标识符:

d[111-512-736-927].append('S1')
d[512-736-927-817].append('S1')
...

一旦我们对所有集合执行此操作,我们就可以检查字典中的每个键,如果该键有多个不同的集合 ID,我们就有理由相信这些集合是相似的。事实上,一对集合 id 在字典中的单个值中出现的次数越多,两个集合之间的相似性就越大。以这种方式处理我们的数据,我们可以将识别所有成对的相似集合的复杂性降低到大致线性时间!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能建议一个好的 minhash 实现吗? 的相关文章

  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside

随机推荐

  • 如何在另一个 Perl 脚本中使用变量?

    我知道如何在 Perl 中使用一个包到另一个包的变量 我正在尝试使用声明的全局变量test1 pl在另一个 Perl 脚本中test2 pl 我在用require加载 perl 文件 usr bin perl test1 pl use st
  • 使用 jquery .html() 插入 html

    我想将一大块 html 插入到预先存在的 td 我正在使用这个方法 td content html LOTS OF HTML CODE HERE 但这不起作用 我是菜鸟 有很多引用和 HTML 块内似乎破坏了它 这样做的正确方法是什么 我建
  • 为什么局部变量或临时变量的返回地址只是警告而不是错误?

    刚刚收到编译器针对此函数的警告 template
  • hapi.js - 404 路由 VS 静态文件路由

    我正在尝试将 Express 应用程序迁移到 hapi js 但我的路线遇到了问题 我只想要 2 GET 我的索引 以及所有不是 的内容重定向到 使用 Express 我有这个 static files app use express st
  • 没有这样的模块 JSQMessagesViewController

    我正在尝试导入 JSQMessagesViewController import JSQMessagesViewController 它给了我错误 没有这样的模块 我在网上看到很多人遇到这个问题 但我找不到解决方案 这是我的 Podfile
  • 如何从颜色推断形状的状态

    我已经形成了乐高立方体4x4形状 我试图推断图像内区域的状态 空 满以及颜色是黄色还是蓝色 为了简化我的工作 我添加了红色标记定义border由于相机有时会晃动 因此形状会受到影响 这是我试图检测的形状的清晰图像 由手机摄像头拍摄 编辑 请
  • Phonegap - 在启用自动方向的同时防止旋转?

    我正在重新发布我在 Google 群组中找到的其他人的问题 我也遇到了类似的问题 我有一个应用程序 要求所有内容都处于纵向 除了播放视频时 在 iOS 上 当视频播放传递到 Quicktime 播放器时 我希望视频能够以横向模式播放 目前
  • 获取正确的月份格式日期java

    有什么帮助吗 如何从 2014 01 10T09 41 16 000 0000 这样的字符串中获取正确的日期 我的代码是 String strDate 2014 01 10T09 41 16 000 0000 String day Stri
  • 有人可以澄清一下 Joel On Software 引用的意思吗:(功能性程序没有副作用)

    我正在读书乔尔安软件 http www joelonsoftware com 今天又遇到了这个报价 http www joelonsoftware com articles ThePerilsofJavaSchools html 不了解功能
  • BigQuery JDBC 驱动程序返回的行数不会超过 100,000 行

    我在 Pentaho PDI 中使用 Google BigQuery 的 starschema JDBC 驱动程序 http code google com p starschema bigquery jdbc http code goog
  • AWS Lambda:Lambda 函数 S3 到 S3 复制的跨账户策略

    我们正在尝试实现 lambda 函数 该函数将根据源 S3 存储桶事件将对象从一个 S3 复制到跨账户中的另一个 S3 存储桶 目前 我们能够在同一 SAG 内的源和目标之间复制文件 但是当我们尝试跨账户实现相同的逻辑时 得到了 CopyO
  • windows下Qt应用程序和窗口图标

    我通过嵌入包含图标的标准 Windows 资源文件创建了一个简单的应用程序图标 不过 我还想在我的主应用程序窗口上使用此图标 是否有捷径可寻 到目前为止 似乎唯一的方法是单独加载包含窗口图标的图标 而不是重用已经存在的图标 这似乎是一个可怕
  • 更改 foreach 循环内的初始数组?

    我想要一个 foreach 循环 其中初始数组在循环内更改 eg array array red blue foreach array as key gt value array white echo value br 在此循环中 尽管我在
  • iOS Google 静默登录提供了缺少个人资料信息的(有效)令牌

    我已将 Google SignIn SDK v4 0 1 集成到我的 iOS 应用程序中 正常的身份验证过程通过以下方式正常工作 GIDSignIn sharedInstance signIn 检索到的 idToken 有效 包含电子邮件和
  • 如何使用 .Net 处理程序处理 .asp 扩展名?

    我有一个旧的经典 ASP 网站 我正在将其迁移到 IIS7 5 我不想在服务器上安装经典 ASP 因此我只想将 asp 文件视为 aspx 文件 我该如何在 IIS7 5 中执行此操作 编辑 澄清一下 我并不是在问如何让经典的 ASP 代码
  • Highstock日期输入jquery ui datepicker位置变化

    在 Highstock 中 您可以使用 jquery ui datepicker 而不是在日期字段中输入文本 如本演示所示 http jsfiddle net hcharge aNde9 http jsfiddle net hcharge
  • 在 Chrome 中播放多种声音

    我正在为 Facebook 开发 HTML5 游戏 我有以下 HTML 代码
  • 如何让小圆圈的边框变得平滑?

    有没有办法让纯 CSS 圆形边框在较小尺寸下看起来清晰明快 或者有什么方法可以使边框在外边缘周围不出现 锯齿状 非常感谢 Use box shadow针对此问题的 CSS 属性 请看下一个例子 http jsfiddle net RJMWR
  • GCC最高指令集,兼容多种架构

    我正在由具有不同架构的机器组成的集群上运行作业 gcc march native Q help target grep march cut f3给了我其中之一 broadwell haswell ivybridge sandybridge
  • 你能建议一个好的 minhash 实现吗?

    我正在尝试寻找一个可以在我的工作中利用的 minhash 开源实现 我需要的功能非常简单 给定一个集合作为输入 实现应该返回其 minhash 首选 python 或 C 实现 以防万一我需要破解它才能为我工作 任何指示都会有很大帮助 Re