Katakanlah kita memiliki X bentuk (2, 5)
dan y bentuk (2,)
Ini bekerja: np.linalg.lstsq(X, y)
Kami berharap ini berfungsi hanya jika X adalah bentuk (N, 5) di mana N> = 5 Tapi mengapa dan bagaimana?
Kami mendapatkan kembali 5 bobot seperti yang diharapkan, tetapi bagaimana masalah ini diselesaikan?
Bukankah kita memiliki 2 persamaan dan 5 yang tidak diketahui?
Bagaimana numpy bisa menyelesaikan ini?
Itu harus melakukan sesuatu seperti interpolasi untuk membuat lebih banyak persamaan buatan? ..
least-squares
linear-algebra
numpy
George Pligoropoulos
sumber
sumber
Jawaban:
Pemahaman saya adalah bahwa numpy.linalg.lstsq bergantung pada dgelsd rutin LAPACK .
Masalahnya adalah untuk menyelesaikan:
Tentu saja, ini tidak memiliki solusi unik untuk matriks A yang peringkatnya kurang dari panjang vektor . Dalam kasus sistem yang tidak ditentukan, solusi sedemikian rupa sehingga:b z
dgelsd
Contoh, jika sistem , numpy.linalg.lstsq akan mengembalikan .x+y=1 x=.5,y=.5
Bagaimana cara kerja dgelsd?
Rutin
dgelsd
menghitung dekomposisi nilai singular (SVD) dari A.Saya hanya akan membuat sketsa ide di balik menggunakan SVD untuk menyelesaikan sistem linear. Dekomposisi nilai singular adalah faktorisasi mana dan adalah matriks ortogonal dan adalah matriks diagonal di mana entri diagonal dikenal sebagai nilai singular.UΣV′=A U V Σ
Peringkat efektif matriks adalah jumlah nilai singular yang secara efektif bukan nol (yaitu cukup berbeda dari nol relatif terhadap presisi mesin dll ...). Biarkan menjadi matriks diagonal dari nilai singular non-nol. SVD demikian:A S
The pseudo-inverse dari diberikan oleh:A
Pertimbangkan solusinya . Kemudian:x=A†b
Pada dasarnya ada dua kasus di sini:
Bagian terakhir ini agak sulit ... perlu melacak dimensi matriks dan menggunakan bahwa adalah matriks ortogonal.U
Kesetaraan dari invers semu
Ketika memiliki baris bebas linear, (mis. Kami memiliki matriks gemuk), maka:A A†=A′(AA′)−1
Untuk sistem yang tidak ditentukan, Anda dapat menunjukkan bahwa invers semu memberi Anda solusi norma minimum.
Ketika memiliki kolom yang bebas linear, (mis. Kami memiliki matriks kurus), maka:A A†=(A′A)−1A′
sumber
lm
menggunakan faktorisasi QR secara default tetapi Anda dapat menentukan alternatif.