【问题标题】:Sparse vs. Dense Vectors PySpark稀疏与密集向量 PySpark
【发布时间】:2018-12-25 09:47:39
【问题描述】:
我如何知道我应该在 PySpark 中使用稀疏表示还是密集表示?我了解它们之间的区别(稀疏通过仅存储非零索引和值来节省内存),但在性能方面,是否有任何通用的启发式方法来描述何时使用稀疏向量而不是密集向量?
是否有一个通用的“截止”维度和 0 值的百分比,超出该维度通常更好地使用稀疏向量?如果不是,我应该如何做出决定?谢谢。
【问题讨论】:
标签:
python
apache-spark
machine-learning
pyspark
sparse-matrix
【解决方案1】:
要记住的是,pyspark.ml.linalg.Vector 和 pyspark.mllib.linalg.Vector 只是 Python 和 Java API 之间的兼容层。没有功能齐全或优化的线性代数实用程序,您不应该这样使用它们。可用的操作要么不是为性能而设计的,要么只是在幕后转换为标准的 NumPy 数组。
当与其他 ml / mllib 工具一起使用时,将被序列化并转换为 Java 等效项,因此 Python 表示性能几乎无关紧要。
这意味着最大的真正问题是存储,一个简单的经验法则是:
- 如果平均一半的条目为零,最好使用
SparseVector。
- 否则最好使用
DenseVector。