超高维数据的内存高效度量计算

数据挖掘 聚类 距离
2022-03-13 06:22:09

我正在准备对只能表示为极其稀疏的二进制向量的数据进行聚类。每个对象都由一大组二进制特征(103~106),每个都由 32 位哈希码标识。我们可以假设,为了在不丢失信息的情况下表示数据对象,我们需要将其视为232位 - 其中仅由哈希标识的位置处的位设置为 1。

问题是,有两个数据对象,每个都由一组排序的哈希表示,我如何计算它们之间的距离而不存储两个232内存中的位长向量?

3个回答

要走的路是使用相对相似度度量:

d(x,y)=(1|xy||xy|)k

Wherexy是包含哈希识别特征的集合,并且k是实验选择的允许“扩展”距离范围的因素。

鉴于该数据点,实际上是一个大小的二进制向量,2^32仅在哈希表示的位置上设置了位,我们可以将距离计算为哈希集的交集大小除以哈希集总和的大小。

欧几里得距离可以分解为点积

ab2=a22(ab)+b2
可以有效地计算稀疏向量。

对于二元向量,的非零索引集的大小,而的索引集的交集的大小。(对于位数组,交集只是按位“与”。)a2aabab

只需加入两个排序列表。如果您并行执行它们,则只需要遍历每个列表。

但是,如果您希望这更快,您可能需要使用咆哮位图来计算共享位和不同位的数量。

如果您没有注意到:在二进制数据上,几乎任何距离函数都会减少到计算交叉点大小和设置的位数。