4

我需要生成随机索引向量(大约 1000 维的大量维度),这将主要是稀疏的(大部分是零值)。向量可以包含 1(正维度)、-1(负维度)和 0 的值。这些向量是为文本语料库中的每个单词生成的。在确保结果向量的随机性的同时,在 Java 中实现这一目标的最佳方法是什么?

谢谢

4

2 回答 2

1

要存储向量,请保留其非零位置和 +1/-1 位的列表。+1/-1 位需要一个字节。

如果你真的想尽可能多地节省内存,你可以保留一个长的BitSet,其中包含所有向量的 +1/-1 信息,每个向量都会记住它在 BitSet 中的起始索引。

要生成与其他向量正交的向量,您可以执行以下操作:

 [0 1 0 0 -1 ...]
 [1 0 1 0 0 ...]  // zeros where the first vector is non-zero
 ...

保留所有可用 1000 个索引的链接列表。生成向量时,选择少量随机索引,生成这些索引非零的向量,然后从可用索引列表中删除索引。然而,这样你很快就会用完可用的索引。但是在 1000 维空间中只有 1000 个相互正交的向量,所以无论如何你最多可以为 1000 个单词创建向量。

此外,向量必须是正交的这一事实意味着它们不能完全随机,因为真正的随机向量可能碰巧是非正交的。

于 2011-04-24T01:24:23.347 回答
0

如果您想尝试一种低成本的方法(编程方式),那么 aHashMap<Integer, Byte>或类似的东西可以制作一个不错的稀疏向量。

于 2011-04-23T23:56:29.963 回答