gau*_*rai 8 scala machine-learning apache-spark apache-spark-mllib
我正在尝试在spark和scala中实现神经网络,但无法执行任何向量或矩阵乘法.Spark提供两个向量.Spark.util矢量支持点操作但不推荐使用.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)
}
Run Code Online (Sandbox Code Playgroud)
Mahout提供了有趣的Spark和Scala绑定,您可能会感兴趣.
对于简单的矩阵向量乘法,可以更容易地利用现有的矩阵方法.例如IndexedRowMatrix,RowMatrix提供multiply可以采用局部矩阵的方法.您可以在Apache Spark中检查Matrix Multiplication以获取示例用法.
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |