我正在准备对只能表示为极其稀疏的二进制向量的数据进行聚类。每个对象都由一大组二进制特征(~),每个都由 32 位哈希码标识。我们可以假设,为了在不丢失信息的情况下表示数据对象,我们需要将其视为位 - 其中仅由哈希标识的位置处的位设置为 1。
问题是,有两个数据对象,每个都由一组排序的哈希表示,我如何计算它们之间的距离而不存储两个内存中的位长向量?
我正在准备对只能表示为极其稀疏的二进制向量的数据进行聚类。每个对象都由一大组二进制特征(~),每个都由 32 位哈希码标识。我们可以假设,为了在不丢失信息的情况下表示数据对象,我们需要将其视为位 - 其中仅由哈希标识的位置处的位设置为 1。
问题是,有两个数据对象,每个都由一组排序的哈希表示,我如何计算它们之间的距离而不存储两个内存中的位长向量?
要走的路是使用相对相似度度量:
Wherex和y是包含哈希识别特征的集合,并且k是实验选择的允许“扩展”距离范围的因素。
鉴于该数据点,实际上是一个大小的二进制向量,2^32仅在哈希表示的位置上设置了位,我们可以将距离计算为哈希集的交集大小除以哈希集总和的大小。
只需加入两个排序列表。如果您并行执行它们,则只需要遍历每个列表。
但是,如果您希望这更快,您可能需要使用咆哮位图来计算共享位和不同位的数量。
如果您没有注意到:在二进制数据上,几乎任何距离函数都会减少到计算交叉点大小和设置的位数。