通过计算Min-Hash来比较两个对象

时间:2016-02-15 10:27:21

标签: hash typescript dimensionality-reduction

我需要比较Java / Type-script对象的不同状态。这些对象在执行期间会发生变化,因此我无法直接对它们进行比较。我需要根据计算出的哈希值来比较它们'我能够存储的。

通常,Min-Hash算法适用于此类问题。然而,Min-Hash纯粹基于比较字符串集,因此不能比较其内容以某种方式排序的集合,即数字。

让我解释一下我的意思。考虑一个由

组成的对象
 "FirstValue"
 "SecondValue"
 "42"

汇总到100101010。在不同的时间,同一个对象由

组成
 "FirstValue"
 "SecondValue"
 "41"

导致哈希100010010

现在通常通过检查汉明距离来比较这些哈希值。

 100101010 XOR
 100010010 
 =========
 000111000 --> Hamming Distance = 3

允许根据Jaccard index (9-3)/9=0.66计算其相似度。

但是,我希望看到从4241的微小变化以某种方式反映在哈希中。即,两个状态之间的相似性应该更像0.95。确切的数字并不重要。

如果不需要存储大量额外值,我该怎么做?

1 个答案:

答案 0 :(得分:0)

我将使用随机位翻转。

Min-Hash会对常规字符串进行哈希处理。产生的散列由随机位翻转改变。在散列的每个位置处的位翻转的概率与要比较的整数成比例。

"FirstValue"
"SecondValue"
"42"

通过首先散列"FirstValue""SecondValue"进行哈希处理,从而产生100101011

42现在以下列方式合并到哈希中:

  • 由于我预计2050之间的值,42的值为73.3%。{/ li>
  • 然后0.733*weight
  • 在每个位置发生位翻转的概率

然而,我仍然需要摆弄随机数生成器的种子以使散列具有确定性。