Як NumPy вирішує найменші квадрати для недостатньо визначених систем?


14

Скажімо, у нас є X форми (2, 5)
і y форми (2,)

Це працює: np.linalg.lstsq(X, y)

Ми очікуємо, що це спрацює лише в тому випадку, якщо X має форму (N, 5), де N> = 5 Але чому і як?

Ми отримуємо назад 5 ваг, як очікувалося, але як вирішується ця проблема?

Хіба це не так, як у нас є 2 рівняння та 5 невідомих?
Як нуме може вирішити це?
Він повинен зробити щось на зразок інтерполяції, щоб створити більше штучних рівнянь? ..


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) А.

Я просто змалюю ідею використання 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-факторизацію за замовчуванням, але ви можете вказати альтернативи.
Sycorax каже, що повернеться до Моніки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.