Как NumPy решает наименьшие квадраты для недоопределенных систем?


14

Скажем, у нас есть X формы (2, 5)
и y формы (2,)

Это работает: np.linalg.lstsq(X, y)

Мы ожидаем, что это сработает, только если X имеет форму (N, 5), где N> = 5. Но почему и как?

Мы получаем 5 весов, как и ожидалось, но как решить эту проблему?

Разве у нас не 2 уравнения и 5 неизвестных?
Как NumPy может решить это?
Это должно сделать что-то вроде интерполяции, чтобы создать более искусственные уравнения? ..


3
Почему это не должно работать? Неопределенная система имеет много решений.
Мэтью Ганн

Может быть, у вас есть ссылка на соответствующую теорию? ..
Джордж Плигоропулос

Ответы:


19

Насколько я понимаю, numpy.linalg.lstsq использует подпрограмму LAPACK dgelsd .

Задача состоит в том, чтобы решить:

minimize(overx)Axb2

Конечно, это не имеет единственного решения для матрицы A, ранг которой меньше длины вектора . В случае неопределенной системы предоставляет решение такое, что:bdgelsdz

  • Az=b
  • z2x2 для всех которые удовлетворяют . (то есть является минимальным решением для неопределенной системы.xAx=bz

Например, если система имеет , numpy.linalg.lstsq вернет .x+y=1x=.5,y=.5

Как работает dgelsd?

Процедура dgelsdвычисляет разложение по сингулярным числам (SVD) в A.

Я просто набросаю идею использования SVD для решения линейной системы. Разложение по сингулярным значениям - это факторизация где и - ортогональные матрицы, а - диагональная матрица, в которой диагональные элементы известны как сингулярные значения.UΣV=AUVΣ

Эффективным рангом матрицы будет число сингулярных значений, которые фактически не равны нулю (т. Е. Достаточно отличаются от нуля относительно точности машины и т. Д.). Пусть - диагональная матрица ненулевых сингулярных значений. SVD, таким образом:AS

A=U[S000]V

Псевдообратная из определяется по формуле:A

A=V[S1000]U

Рассмотрим решение . Потом:x=Ab

Axb=U[S000]VV[S1000]Ubb=U[I000]Ubb

Здесь в основном два случая:

  1. Число ненулевых сингулярных значений (т. Е. Размер матрицы ) меньше длины . Решение здесь не будет точным; мы решим линейную систему в смысле наименьших квадратов.Ib
  2. Axb=0

Эта последняя часть немного хитрая ... нужно отслеживать размеры матрицы и использовать как ортогональную матрицу.U

Эквивалентность псевдообратного

Когда имеет линейно независимые строки (например, у нас толстая матрица), тогда: A

A=A(AA)1

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

Когда имеет линейно независимые столбцы (например, у нас есть тощая матрица), тогда: A

A=(AA)1A


dgelsd использует SVD, а R lm использует QR?
Haitao Du

@ hxd1011R lmпо умолчанию использует QR-факторизацию, но вы можете указать альтернативы.
Сикоракс говорит восстановить Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.