Скажем, у нас есть X формы (2, 5)
и y формы (2,)
Это работает: np.linalg.lstsq(X, y)
Мы ожидаем, что это сработает, только если X имеет форму (N, 5), где N> = 5. Но почему и как?
Мы получаем 5 весов, как и ожидалось, но как решить эту проблему?
Разве у нас не 2 уравнения и 5 неизвестных?
Как NumPy может решить это?
Это должно сделать что-то вроде интерполяции, чтобы создать более искусственные уравнения? ..
least-squares
linear-algebra
numpy
Джордж Плигоропулос
источник
источник
Ответы:
Насколько я понимаю, numpy.linalg.lstsq использует подпрограмму LAPACK dgelsd .
Задача состоит в том, чтобы решить:
Конечно, это не имеет единственного решения для матрицы A, ранг которой меньше длины вектора . В случае неопределенной системы предоставляет решение такое, что:b z
dgelsd
Например, если система имеет , numpy.linalg.lstsq вернет .x+y=1 x=.5,y=.5
Как работает dgelsd?
Процедура
dgelsd
вычисляет разложение по сингулярным числам (SVD) в A.Я просто набросаю идею использования SVD для решения линейной системы. Разложение по сингулярным значениям - это факторизация где и - ортогональные матрицы, а - диагональная матрица, в которой диагональные элементы известны как сингулярные значения.UΣV′=A U V Σ
Эффективным рангом матрицы будет число сингулярных значений, которые фактически не равны нулю (т. Е. Достаточно отличаются от нуля относительно точности машины и т. Д.). Пусть - диагональная матрица ненулевых сингулярных значений. SVD, таким образом:A S
Псевдообратная из определяется по формуле:A
Рассмотрим решение . Потом:x=A†b
Здесь в основном два случая:
Эта последняя часть немного хитрая ... нужно отслеживать размеры матрицы и использовать как ортогональную матрицу.U
Эквивалентность псевдообратного
Когда имеет линейно независимые строки (например, у нас толстая матрица), тогда:A A†=A′(AA′)−1
Для неопределенной системы вы можете показать, что псевдообратное решение дает минимальное решение для нормы.
Когда имеет линейно независимые столбцы (например, у нас есть тощая матрица), тогда:A A†=(A′A)−1A′
источник
lm
по умолчанию использует QR-факторизацию, но вы можете указать альтернативы.