我在实施 minhashing 时遇到问题。在纸上和阅读中我理解了这个概念,但我的问题是排列“技巧”。实现的建议不是排列集合和值的矩阵,而是:“选择 k(例如 100)个独立的哈希函数”,然后算法表示:
for each row r
for each column c
if c has 1 in row r
for each hash function h_i do
if h_i(r) is a smaller value than M (i, c) then
M(i, c) := h_i(r)
在不同的小例子和教学中book http://infolab.stanford.edu/~ullman/mmds/ch3.pdf他们只使用两个或三个散列函数,形式为 (h = a*x + b mod p)。那很容易找到,但是实际中怎么做,我怎样才能找到100个这样的独立函数。
在 Java 示例中here http://mymagnadata.wordpress.com/2011/01/04/minhash-java-implementation/仅从一个哈希函数而不是多个哈希函数生成哈希值,与行索引无关。差别在哪里?
我现在的问题是如何找到这些独立的哈希函数,或者是否有一种只有一个哈希函数的方法如何在算法中处理这些值?
一种简单的方法是使用参数哈希系列,例如制表哈希函数(http://en.wikipedia.org/wiki/Tabulation_hashing http://en.wikipedia.org/wiki/Tabulation_hashing)
在本书的示例 (a*x+b mod p) 中,通过选择不同的 (a, b, p) 集合,您可以拥有不同的哈希函数。拥有独立哈希函数的一种方法是选择 (a, b, p) 质数/互质数,并且最好选择大数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)