Использование обычного метода наименьших квадратов (OLS)

У меня есть уравнение A * x = b

размеры A — это размер матрицы nxm, x — mx 1, а b — nx 1. A имеет больше строк чем столбцы (n ‹ m).

Мое неизвестное — A, и, поскольку n != m, A не имеет обратного. Мои известные — это два вектора x и b. По сути, я хочу найти A, который делает (A * x - b) близким к нулю.

Метод наименьших квадратов кажется уместным, но я не уверен, как поступить, поскольку он не соответствует ни моему учебнику, ни запись в Википедии; обычно известна матрица A. Если OLS не подходит, то что? Разложение по сингулярным значениям? Опять же, указатели, пожалуйста, моя линейная алгебра заржавела.

Хотелось бы реализовать это (python/C). Указатели на хорошо читаемый код?


person bushbo    schedule 13.04.2012    source источник


Ответы (1)


Для этого существует бесконечно много решений, и ничего более сложного, чем разложение по сингулярным числам, не потребуется.

Если n = m, то A может быть просто диагональной матрицей, но у вас n > m. Поэтому мы не можем быть такими простыми.

Мы можем рассматривать это как проблему нахождения n независимых векторов (строк A), таких, что когда вы формируете их скалярное произведение с x, они дают соответствующий элемент b. Таким образом, A*x=b (решение будет точным) эквивалентно нахождению таких строк A, что если A_i является i-й строкой A, то dot(A_i,x) = b(i).

С этой точки зрения решение очевидно! Как очевидно, это показывает, почему не существует «решения», а существует бесконечно много таких решений, и все они довольно тривиальны.

Так, например, выберите ЛЮБОЙ элемент x, который не равен нулю. Скажем, это k-й элемент. Затем создайте A_i как вектор, который ВСЕ равен нулю, за исключением соответствующего выбранного ненулевого элемента x.

A_i(k) = b(i)/x(k)

Все остальные элементы A_i равны нулю. Итак, теперь сформируйте точечный продукт. Обратите внимание, что A * x = b решается точно с помощью матрицы X, которая имеет только один ненулевой столбец, и этот столбец довольно тривиален.

person Community    schedule 13.04.2012
comment
Будет ли моя проблема ограничена, если я ожидаю, что какая-либо одна строка A будет в основном отличной от нуля? - person bushbo; 14.04.2012
comment
Нет. Это все еще тривиально для решения. Вы можете задавать почти любые значения для большинства столбцов матрицы А и при этом иметь решение. На самом деле, вы можете выбирать случайные числа из любого распределения, которое вам нравится, для всех столбцов A, кроме одного. Просто нет жизнеспособного способа выбрать разумное решение из того, что вы сказали. И никакой сложной факторизации по-прежнему не требуется. - person ; 14.04.2012