【问题标题】:Difference between Apache spark mllib.linalg vectors and spark.util vectors for machine learning用于机器学习的 Apache spark mllib.linalg 向量和 spark.util 向量之间的区别
【发布时间】:2016-04-25 19:20:27
【问题描述】:

我正在尝试在 spark 和 scala 中实现神经网络,但无法执行任何向量或矩阵乘法。 Spark 提供了两个向量。 Spark.util 矢量支持点操作,但已弃用。 mllib.linalg 向量不支持 scala 中的操作。

使用哪一个来存储权重和训练数据?

如何在 spark scala 中使用 mllib (如 w*x)执行向量乘法,其中 w 是向量或权重矩阵,x 是输入。 pyspark 向量支持点积,但在 scala 中我无法在向量中找到这样的函数

【问题讨论】:

    标签: scala apache-spark machine-learning apache-spark-mllib


    【解决方案1】:

    好吧,如果您需要对线性代数运算符的全面支持,您必须自己实现这些或使用外部库。在第二种情况下,显而易见的选择是Breeze

    它已经在后台使用,因此不会引入额外的依赖项,您可以轻松修改现有的 Spark 代码以进行转换:

    import breeze.linalg.{DenseVector => BDV, SparseVector => BSV, Vector => BV}
    
    def toBreeze(v: Vector): BV[Double] = v match {
      case DenseVector(values) => new BDV[Double](values)
      case SparseVector(size, indices, values) => {
        new BSV[Double](indices, values, size)
      }
    }
    
    def toSpark(v: BV[Double]) = v match {
      case v: BDV[Double] => new DenseVector(v.toArray)
      case v: BSV[Double] => new SparseVector(v.length, v.index, v.data)
    }
    

    Mahout 提供了有趣的Spark and Scala bindings,您可能也会觉得有趣。

    对于简单的矩阵向量乘法,可以更轻松地利用现有的矩阵方法。例如IndexedRowMatrixRowMatrix 提供了可以采用局部矩阵的multiply 方法。您可以查看Matrix Multiplication in Apache Spark 以获取示例用法。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2016-11-17
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多