稀疏向量是一个数组或列表,其中大多数元素的值为零。与主要存储非零值的密集向量不同,稀疏向量通过仅关注包含有意义数据的元素来优化存储和计算。这在数据维度高但实际值很少的情况下特别有用,例如在自然语言处理 (NLP) 或推荐系统中。例如,表示为词袋向量的文本文档可能具有数千个维度(每个词一个),但只有几十个非零值对应于文档中存在的词。稀疏向量通过仅存储非零元素的索引和值来避免在零上浪费内存。
稀疏向量通常使用优先考虑效率的数据结构来表示。常用格式包括坐标列表 (COO)、压缩稀疏行 (CSR) 和键字典 (DOK)。例如,在 Python 中,稀疏向量可以存储为字典,其中键是索引,值是非零条目。SciPy 等库提供经过优化的稀疏矩阵类,可在内部处理这些表示形式。例如,在位置 3 和 7(值分别为 5 和 9)处具有非零值的向量可以存储为 {3: 5, 7: 9}
而不是 [0, 0, 0, 5, 0, 0, 0, 9]
。这减少了内存使用并加快了点积等运算的速度,因为只处理非零元素。
稀疏向量的主要优点是减少了内存开销和某些操作的更快计算。在机器学习中,TF-IDF 或 one-hot 编码等算法经常生成稀疏数据,而使用稀疏向量可以避免不必要的存储成本。例如,如果 99% 的特征为零,则在每个样本具有 10,000 个特征的文本数据上训练分类器将需要减少 99% 的内存。类似地,向量加法或矩阵乘法等数学运算可以跳过零条目,从而提高性能。但是,稀疏向量并非普遍适用 - 需要全向量扫描的操作(例如,查找阈值以上的所有值)可能会因需要跟踪索引而变得较慢。在稀疏表示和密集表示之间进行选择取决于具体的用例和数据的稀疏程度。