#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.
Приветствия!!