2016-01-20 1 views
7

Я пытаюсь реализовать нейронные сети в искро и скале, но не в состоянии выполнить любое умножение вектора или матрицы. Искры обеспечивают два вектора. Операция точки ночной привязки Spark.util, но она устарела. векторы mllib.linalg не поддерживают операции в scala.Разница между векторами apache spark mllib.linalg и векторами spark.util для машинного обучения

Какой из них следует использовать для хранения весов и данных обучения?

Как выполнить векторное умножение в искровой scala с mllib как w * x, где w - вектор или матрица весов, а x - вход. pyspark вектор поддержки точка продукта, но в scala Я не могу найти такую ​​функцию в векторах

ответ

6

Ну, если вам нужна полная поддержка операторов линейной алгебры, вы должны реализовать их самостоятельно или использовать внешнюю библиотеку. Во втором случае очевидным выбором является Breeze.

Он уже используется за кулисами так не вносит дополнительных зависимостей, и вы можете легко изменить существующий код искрой для преобразования:

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 предоставляют методы multiply, которые могут принимать локальную матрицу. Вы можете проверить Matrix Multiplication in Apache Spark для примера использования.

Смежные вопросы