簡體   English   中英

Apache spark mllib.linalg向量與用於機器學習的spark.util向量之間的區別

[英]Difference between Apache spark mllib.linalg vectors and spark.util vectors for machine learning

我正在嘗試在spark和scala中實現神經網絡,但無法執行任何向量或矩陣乘法。 Spark提供兩個向量。 Spark.util vector支持點操作但不推薦使用。 mllib.linalg向量不支持scala中的操作。

哪一個用於存儲權重和訓練數據?

如何使用像w * x這樣的mllib在spark scala中執行向量乘法,其中w是向量或權重矩陣,x是輸入。 pyspark矢量支持點積,但在scala我無法在向量中找到這樣的函數

好吧,如果您需要完全支持線性代數運算符,您必須自己實現這些或使用外部庫。 在第二種情況下,明顯的選擇是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和Scala綁定,您可能會感興趣。

對於簡單的矩陣向量乘法,可以更容易地利用現有的矩陣方法。 例如, IndexedRowMatrixRowMatrix提供了可以采用局部矩陣的multiply方法。 您可以在Apache Spark中檢查Matrix Multiplication以獲取示例用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM