稀疏与密集向量 PySpark
Sparse vs. Dense Vectors PySpark
我怎么知道我应该在 PySpark 中使用稀疏表示还是密集表示?我理解它们之间的区别(稀疏通过仅存储非零索引和值来节省内存),但是在性能方面,是否有任何通用的启发式方法来描述何时使用稀疏向量而不是密集向量?
是否有一个通用的 "cutoff" 维度和 0 值的百分比,超过该值通常最好使用稀疏向量?如果没有,我应该如何做决定?谢谢。
要记住的是pyspark.ml.linalg.Vector
和pyspark.mllib.linalg.Vector
只是Python和JavaAPI之间的兼容层。没有全功能或优化的线性代数实用程序,您不应该这样使用它们。可用的操作不是为性能而设计的,就是在幕后转换为标准 NumPy 数组。
当与其他 ml
/ mllib
工具一起使用时,将被序列化并转换为 Java 等价物,因此 Python 表示性能几乎无关紧要。
这意味着最大的实际问题是存储,一个简单的经验法则是:
- 如果平均一半的条目为零,则最好使用
SparseVector
。
- 否则最好用
DenseVector
.
我怎么知道我应该在 PySpark 中使用稀疏表示还是密集表示?我理解它们之间的区别(稀疏通过仅存储非零索引和值来节省内存),但是在性能方面,是否有任何通用的启发式方法来描述何时使用稀疏向量而不是密集向量?
是否有一个通用的 "cutoff" 维度和 0 值的百分比,超过该值通常最好使用稀疏向量?如果没有,我应该如何做决定?谢谢。
要记住的是pyspark.ml.linalg.Vector
和pyspark.mllib.linalg.Vector
只是Python和JavaAPI之间的兼容层。没有全功能或优化的线性代数实用程序,您不应该这样使用它们。可用的操作不是为性能而设计的,就是在幕后转换为标准 NumPy 数组。
当与其他 ml
/ mllib
工具一起使用时,将被序列化并转换为 Java 等价物,因此 Python 表示性能几乎无关紧要。
这意味着最大的实际问题是存储,一个简单的经验法则是:
- 如果平均一半的条目为零,则最好使用
SparseVector
。 - 否则最好用
DenseVector
.