- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我热衷于尝试实现最小哈希来查找几乎重复的内容。 http://blog.cluster-text.com/tag/minhash/写得很好,但问题是您需要在文档中的带状疱疹上运行多少哈希算法才能获得合理的结果。
上面的博文提到了大约 200 种哈希算法。 http://blogs.msdn.com/b/spt/archive/2008/06/10/set-similarity-and-min-hash.aspx列出 100 作为默认值。
显然随着哈希数量的增加准确率有所提高,但是多少哈希函数才是合理的呢?
引用自博客
It is tough to get the error bar on our similarity estimate much smaller than [7%] because of the way error bars on statistically sampled values scale — to cut the error bar in half we would need four times as many samples.
这是否意味着将哈希值的数量减少到 12 (200/4/4) 会导致 28% (7 * 2 * 2) 的错误率?
最佳答案
生成 200 个散列值的一种方法是使用良好的散列算法生成一个散列值,然后通过将良好的散列值与 199 组长度与良好的散列值相同的随机位进行异或来廉价地生成 199 个值(即,如果您的好散列是 32 位,则构建一个包含 199 个 32 位伪随机整数的列表,并将每个好散列与 199 个随机整数中的每一个进行 XOR)。
如果您使用无符号整数(带符号整数很好),请不要简单地旋转位以生成哈希值,这通常会一遍又一遍地选择相同的木瓦。将位向下循环一位与除以 2 并将旧的低位复制到新的高位位置相同。大约 50% 的好散列值的低位为 1,因此当低位旋转到高位位置时,它们将具有巨大的散列值,而无需祈祷成为最小散列。当您移动一位时,其他 50% 的好散列值将简单地等于它们的原始值除以 2。除以 2 不会改变最小值。因此,如果给出具有良好哈希函数的最小哈希值的木瓦恰好在低位有 0(50% 的可能性),当您移动一位时,它会再次给出最小哈希值。举个极端的例子,如果从好的散列函数中获得最小散列值的木瓦恰好有一个散列值 0,那么无论你如何旋转位,它总是具有最小散列值。有符号整数不会出现此问题,因为最小散列值具有极负值,因此它们往往在最高位为 1,后跟零 (100...)。因此,只有最低位为1的哈希值才有机会向下旋转一位后成为新的最低哈希值。如果具有最小哈希值的 shingle 的最低位为 1,则向下旋转一位后它看起来像 1100...,因此它几乎肯定会被具有 10... 的不同 shingle 击败。轮换后,避免了同一个木瓦有50%的概率连续被采摘两次的问题。
关于algorithm - 一个minhash算法需要多少个哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701052/
我熟悉SimHash和MinHash的LSH(局部敏感哈希)技术。 SimHash对实际值数据使用余弦相似度。 MinHash计算二进制矢量上的相似度相似度。但是我无法决定哪个更适合使用。 我正在为网
我在实现 minhashing 时遇到问题。在纸上和阅读中我理解这个概念,但我的问题是排列“技巧”。代替置换集合矩阵和值的实现建议是:“选择 k(例如 100)个独立的哈希函数”,然后算法说: for
我目前正在使用 MinHashing 技术进行文档聚类。但是,我没有得到想要的结果,因为 MinHash 是对 Jaccard similarity 的粗略估计,它不符合我的要求。 这是我的场景: 我
我正在尝试寻找可以用于我的工作的 minhash 开源实现。 我需要的功能非常简单,给定一个集合作为输入,实现应该返回它的 minhash。 首选 Python 或 C 实现,以防万一我需要破解它才能
假设我有五组要聚类。我了解此处描述的 SimHashing 技术: https://moultano.wordpress.com/2010/01/21/simple-simhashing-3kbzhs
我正在用 Java 编写一个 minhashing 算法,它要求我生成任意数量的随机哈希函数(在我的例子中是 240 个哈希函数),并通过它运行任意数量的整数(目前是 2000 个)。 为了做到这一点
我正在尝试了解 LSH 的实现。我在 stackoverflow 上找到了这个 Can you suggest a good minhash implementation? 我尝试遵循 Duhaime
我在文档及其带状疱疹上使用了 minhash,以从这些文档生成签名矩阵。我已验证签名矩阵在比较已知相似文档(例如,两篇关于同一运动队的两篇文章或两篇关于同一世界赛事的文章)的杰卡德距离时给出了正确的读
我正在使用 Apache Spark ML LSH 的 approxSimilarityJoin 方法加入 2 个数据集,但我看到了一些奇怪的行为。 在(内部)连接之后,数据集有点偏斜,但是每次完成一
这篇文章很长,对此我深表歉意。 我一直在尝试实现chapter 3中讨论的Minhash LSH算法。通过使用 Spark (Java)。我正在使用这样的玩具问题: +--------+------+
我正在寻找一个 node.js/Javascript 模块,它将 minhash 算法应用于字符串或更大的文本,并为我返回该文本的“标识”或“特征”字节串或十六进制字符串。如果我将该算法应用于另一个相
我在用 : hadoop-1.2.1和mahout-distribution-0.8 当我尝试使用以下命令运行HASHMIN方法时: $MAHOUT_HOME/bin/mahout org.apach
我是一名优秀的程序员,十分优秀!