Я работаю над SVD, используя pyspark.Но в документации , как и в любом другом месте, я не нашел, как восстановить матрицу обратно, используя сегментированные векторы. Например, используя svd pyspark, я получил U
, s
и V
матрица, как показано ниже.
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.linalg.distributed import RowMatrix
rows = sc.parallelize([
Vectors.sparse(5, {1: 1.0, 3: 7.0}),
Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0)
])
mat = RowMatrix(rows)
# Compute the top 5 singular values and corresponding singular vectors.
svd = mat.computeSVD(5, computeU=True)
U = svd.U # The U factor is a RowMatrix.
s = svd.s # The singular values are stored in a local dense vector.
V = svd.V # The V factor is a local dense matrix.
Теперь я хочу восстановить исходную матрицу, умножив ее обратно.Уравнение:
mat_cal = U.diag(s).V.T
В Python мы можем легко это сделать.Но в писпарке я не получаю результат.Я нашел эту ссылку.Но это в scala, и я не знаю, как конвертировать его в pyspark.Если кто-то может направить меня, это будет очень полезно.
Спасибо!