MinHashing 与 SimHashing

数据挖掘 聚类 相似
2021-09-20 04:43:30

假设我有五套我想聚类。我了解这里描述的 SimHashing 技术:

https://moultano.wordpress.com/2010/01/21/simple-simhashing-3kbzhsxyg4467-6/

例如,如果它的结果​​是:可以产生三个簇({A}{B,C,D}) :{E}

A -> h01
B -> h02
C -> h02
D -> h02
E -> h03

同样,MMDS 书第 3 章中描述的 MinHashing 技术:

http://infolab.stanford.edu/~ullman/mmds/ch3.pdf

如果其结果是:也可以产生相同的三个集群:

A -> h01 - h02 - h03

B -> h04 - h05 - h06
      |
C -> h04 - h07 - h08
                  |
D -> h09 - h10 - h08

E -> h11 - h12 - h13

(每组对应一个由三个“波段”组成的MH签名,如果至少有一个签​​名波段匹配,则将两组分组。更多的波段意味着更多的匹配机会。)

但是我有几个与这些相关的问题:

(1) SH可以理解为MH的单频段版本吗?

(2) MH 是否一定意味着使用像 Union-Find 这样的数据结构来构建集群?

(3) 我认为这两种技术中的集群实际上是“前集群”,从某种意义上说,它们只是“候选对”的集合,我是否正确?

(4) 如果 (3) 为真,是否意味着我仍然需要做一个 (n2)在每个“预集群”中搜索,将它们进一步划分为“真实”集群?(如果我有很多小且相当平衡的预集群,这可能是合理的,否则就不是了)

1个回答

正如上面正确指出的那样,MinHash 和 SimHash 都属于局部敏感哈希。参考:https ://en.wikipedia.org/wiki/Locality-sensitive_hashing

两者的主要区别在于碰撞的处理方式,

  1. SimHash,使用余弦相似度
  2. MinHash,使用 Jaccard 索引。

回答您的问题:

  1. 不,他们使用不同的碰撞处理技术来验证相似性。Min Hash 的单个哈希函数也有一个变体,但它的工作方式不同。有关更多详细信息,请查看以下参考,https ://en.wikipedia.org/wiki/MinHash(具有单个哈希函数的变体)
  2. 是的,https://github.com/chrisjmccormick/MinHash/blob/master/runMinHashExample.py
  3. 我认为复杂性可以降低到(n日志n)在聚类时使用修改后的二进制搜索形式。