NumPyは、未決定システムの最小二乗法をどのように解決しますか?


14

Xの形状(
2、5 )とyの形状(2、)があるとしましょう

これは動作します: np.linalg.lstsq(X, y)

Xが形状(N、5)で、N> = 5である場合にのみ、これが機能すると期待しますが、なぜ、どのように?

予想どおり5つのウェイトが返されますが、この問題はどのように解決されますか?

2つの方程式と5つの未知数があるのではないでしょうか?
numpyはこれをどのように解決できますか?
より人工的な方程式を作成するには、補間のようなことをする必要がありますか?..


3
なぜ機能しないのですか?未決定のシステムには多くの解決策があります。
マシューガン

あなたは、関連する理論へのリンクを持っているかもしれないですか..?
ジョージPligoropoulos

回答:


18

私の理解では、numpy.linalg.lstsqLAPACKルーチンdgelsdに依存しています。

問題は解決することです:

minimize(overx)Axb2

もちろん、これには、ランクがベクトルbの長さより短い行列Aに対する一意の解はありません。未決定のシステムの場合、次のようなソリューションzを提供します。bdgelsdz

  • Az=b
  • z2x2すべてについてを満たすことが。(つまり、は未決定システムの最小ノルム解です。xAx=bz

たとえば、システムが場合、numpy.linalg.lstsqはを返します。x+y=1x=.5,y=.5

dgelsdはどのように機能しますか?

このルーチンは、Aの特異値分解(SVD)をdgelsd計算します

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

ここには基本的に2つのケースがあります。

  1. 非ゼロの特異値の数(つまり、行列のサイズ)は、長さよりも小さくなります。ここでの解決策は正確ではありません。最小二乗の意味で線形システムを解きます。Ib
  2. Axb=0

この最後の部分は少し注意が必要です。行列の次元を追跡し、が直交行列であることを使用する必要があります。U

擬似逆関数の等価性

とき線形独立の行を、持っている(例えば、我々は、脂肪マトリックスを持っている。)、そして: A

A=A(AA)1

未決定のシステムの場合、擬似逆関数が最小ノルム解を与えることを示すことができます。

とき線形独立の列を、持っている(例えば、我々はスキニー行列を持っている。)、そして: A

A=(AA)1A


dgelsdはSVDを使用しますが、R lmはQRを使用しますか?
ハイタオデュ

@ hxd1011R lmはデフォルトでQR分解を使用しますが、代替を指定できます。
シコラックスは、モニカを復活させる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.