假设我有五套我想集群。我理解这里描述的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)为真,是否意味着我仍然需要在每个"预群集"内进行O(n^2)
搜索,以将它们进一步划分为&#34 ;实"集群? (如果我有很多小而且相当平衡的预簇,这可能是合理的,不是那么多)
答案 0 :(得分:1)
SimHash和MinHash都是散列算法,能够将集合映射到与集合的签名对应的值列表。
在SimHash的情况下,值列表只是一个位列表(值为0或1)。在MinHash的情况下,列表中的值表示相对于给定散列函数的所有集合元素的最小散列值,通常为32位或64位值。
两种算法的主要区别在于哈希冲突的概率。在SimHash的情况下,它等于余弦相似性,并且在MinHash的情况下,它等于Jaccard相似性。根据您如何定义集合之间的相似性,一种或另一种算法可能更合适。
无论选择何种哈希算法,计算出的签名的值都会在一定数量的波段上进行相等的分区。如果任何两个集合的签名在至少一个带内是相同的,则选择相应的集合对作为相似性的候选者。 (这意味着如果n个集合在一个波段内具有相同的签名,则只有来自该波段的O(n ^ 2)个候选对。)使用完整签名(包括来自其他波段的值)估计每个候选对的相似性只保留那些具有高于给定阈值的估计相似度的对,为您提供最终定义最终聚类的所有类似的对。