2016-01-20 9 views
7

私はスパークとスケーラでニューラルネットワークを実装しようとしていますが、ベクトルや行列の乗算は実行できません。 スパークは2つのベクトルを提供します。 Spark.util vectorはドット操作をサポートしていますが、廃止予定です。 mllib.linalgベクトルはスカラー演算をサポートしていません。機械学習のためのApache spark mllib.linalgベクトルとspark.utilベクトルの違い

重みと訓練データの保存に使用するのはどちらですか?

w * xのようなmllibでspark scalaでベクトル乗算を実行する方法wは、重みのベクトルまたは行列であり、xが入力されます。 pysparkベクトルサポートドットプロダクトはスカラですが、ベクトルでそのような関数を見つけることができません。

答えて

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を確認できます。

関連する問題