我正在使用Mahout API进行朴素贝叶斯分类器。其中一个功能是SparseVectorsFromSequenceFiles,尽管我尝试过旧的Google搜索,但我仍然不知道稀疏矢量是什么。 最接近我的解释是site,这对我没有帮助。
答案 0 :(得分:2)
从概念上讲,向量表示数组的泛化,即允许使用索引任意访问其元素的数据结构。 Java的内置数组Vector<T>
和ArrayList<T>
是实现&#34;常规&#34;的数据结构的示例。 (密集)矢量概念。
密集向量通过使用简单公式baseAddress + index * elementSize
将向量索引转换为内存地址,提供对其元素的恒定时间访问。这意味着内存中的大小与向量需要支持的最大索引成比例。
虽然在希望放入矢量和最高可能索引的元素数量相对接近的情况下,这是可以接受的。但是,如果您希望使用范围较广的索引来索引相对较少数量的元素(例如,分散在具有100,000个索引的向量上的1,000个元素),则分配100,000个空格是浪费的。您可以通过实现暴露向量接口的数据结构来节省内存,但代价是CPU周期,但内部表示使用较少的内存。
链接中的示例显示了一种可能的实现方式。其他实现也是可能的,具体取决于数据中索引的分布。如果索引是随机分布的,则可以使用HashMap<Integer,T>
作为稀疏向量的后备存储。如果索引聚集在一起,您可以将索引空间拆分为&#34; pages&#34;,并将实数数组仅分配给您需要的页面。此实现类似于物理内存分配给虚拟内存空间的方式。