Решение системы линейных уравнений в Spark

#scala #matrix #apache-spark

#scala #матрица #apache-spark

Вопрос:

У меня есть система линейных уравнений в форме Ax = b для решения в Spark.

A является n by n

b является n by 1

Я представляю A в форме IndexedRowMatrix или RowMatrix и b в форме DenseMatrix или DenseVector .

Как я могу решить эту систему для вычисления x вектора?

Если предлагаемое решение — декомпозиция Холецкого, не могли бы вы помочь мне сделать это, поскольку оно не является частью общедоступного API? Например, если исходная матрица A равна:

 1,2,3,4
2,1,5,6
3,5,1,7
4,6,7,1
  

и b является:

 5,6,7,8
  

Что передается в качестве аргумента solve методу ?

Любое другое решение, отличное от инверсии, было A бы очень полезно.

Комментарии:

1. Обязательно ли использовать Spark? Эта матрица очень мала.

2. И что вы имеете в виду под «не частью общедоступного API»? «mllib.linalg», безусловно, является частью общедоступного пакета MLlib

3. На самом деле это всего лишь пример, который я упомянул, чтобы получить представление о моем огромном наборе данных.

4. Если я правильно понимаю, это частный объект, который недоступен как часть общедоступного API.

5. Декомпозиция Холецкого используется WeightedLeastSquares . Вы не получите точного решения (если вы не установите regParam в 0). Вам нужно создать RDD экземпляра (характеристики: вектор, метка: двойная, вес: двойной). и передайте ее в WeightedLeastSquares.fit

Ответ №1:

Я не знаю, актуален ли для вас этот вопрос или нет, но другим решением вопроса является инвертирование матрицы коэффициентов, а затем умножение инвертированной матрицы на вектор b. Существует множество алгоритмов инверсии матриц. Один из таких алгоритмов можно найти в следующей статье

SPIN: быстрый и масштабируемый метод инверсии матрицы в Apache Spark

Вы также можете найти полный код по ссылке на GitHub.

Приветствия!!