加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Apache spark mllib.linalg向量与用于机器学习的spark.

发布时间:2020-12-16 19:16:05 所属栏目:安全 来源:网络整理
导读:我正在尝试在spark和 scala中实现神经网络,但无法执行任何向量或矩阵乘法. Spark提供两个向量. Spark.util向量支持点操作但不推荐使用. mllib.linalg向量不支持scala中的操作. 哪一个用于存储权重和训练数据? 如何使用像w * x这样的mllib在spark scala中执
我正在尝试在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)
}

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

对于简单的矩阵向量乘法,可以更容易地利用现有的矩阵方法.例如,IndexedRowMatrix和RowMatrix提供了可以采用局部矩阵的乘法方法.您可以查看Matrix Multiplication in Apache Spark以获取示例用法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读