Почему метод наименьших квадратов не работает для матрицы высокого, а не полного ранга?

У меня есть матрица A формы (224, 45). Это ранг 44. Когда я пробую этот код:

solution = np.linalg.lstsq(A, rhs)[0]

Я получаю решение с очень высокими значениями, что-то вроде 1e14.

Когда я пытаюсь

solution = np.linalg.lstsq(A.T.dot(A), A.T.dot(rhs))[0]

Я получаю хорошее решение, как и ожидалось.

Вопрос в том, нужно ли мне использовать np.linalg.lstsq только для квадратных симметричных матриц или что-то в этом роде? В документах об этом ничего нет.


person Andrey    schedule 23.11.2015    source источник
comment
Тот факт, что ваш solution содержит большие значения, не обязательно означает, что он недействителен. Вы смотрели на A.dot(solution) - rhs?   -  person ali_m    schedule 24.11.2015
comment
Да, я смотрел. Норма ошибки A.dot(solution) - rhs достаточно велика, однако относительная ошибка мала. Самое интересное, что если я нанесу результаты, то у меня получится та же картинка, но она смещена.   -  person Andrey    schedule 24.11.2015
comment
Решаю задачу нахождения координат положения объектов, имеющих разные наблюдения. Может быть, смещение просто означает перемещение всего набора объектов в глобальном пространстве, потому что их относительное положение остается неизменным независимо от того, использую ли я первый или второй метод.   -  person Andrey    schedule 24.11.2015
comment
Это ожидаемо - поскольку вы пытаетесь решить недоопределенную систему, существует бесконечное количество одинаково хороших решений методом наименьших квадратов, которые являются смещениями друг друга в нулевом пространстве A.   -  person ali_m    schedule 24.11.2015
comment
@ali_m спасибо! Это действительно объяснение того, что я наблюдаю.   -  person Andrey    schedule 24.11.2015
comment
Это может оказаться полезным: stackoverflow.com/a/33620007/1461210   -  person ali_m    schedule 24.11.2015