Xの形状(
2、5 )とyの形状(2、)があるとしましょう
これは動作します: np.linalg.lstsq(X, y)
Xが形状(N、5)で、N> = 5である場合にのみ、これが機能すると期待しますが、なぜ、どのように?
予想どおり5つのウェイトが返されますが、この問題はどのように解決されますか?
2つの方程式と5つの未知数があるのではないでしょうか?
numpyはこれをどのように解決できますか?
より人工的な方程式を作成するには、補間のようなことをする必要がありますか?..
Xの形状(
2、5 )とyの形状(2、)があるとしましょう
これは動作します: np.linalg.lstsq(X, y)
Xが形状(N、5)で、N> = 5である場合にのみ、これが機能すると期待しますが、なぜ、どのように?
予想どおり5つのウェイトが返されますが、この問題はどのように解決されますか?
2つの方程式と5つの未知数があるのではないでしょうか?
numpyはこれをどのように解決できますか?
より人工的な方程式を作成するには、補間のようなことをする必要がありますか?..
回答:
私の理解では、numpy.linalg.lstsqはLAPACKルーチンdgelsdに依存しています。
問題は解決することです:
もちろん、これには、ランクがベクトルbの長さより短い行列Aに対する一意の解はありません。未決定のシステムの場合、次のようなソリューションzを提供します。dgelsd
たとえば、システムが場合、numpy.linalg.lstsqはを返します。
このルーチンは、Aの特異値分解(SVD)をdgelsd
計算します。
SVDを使用して線形システムを解く背後にあるアイデアをスケッチします。特異値分解は、因数分解ここで、とは直交行列で、は対角要素が特異値として知られる対角行列です。
行列の有効ランクは、事実上ゼロでない特異値の数になります(つまり、機械の精度などに対してゼロとは十分に異なります)。してみましょうゼロでない特異値の対角行列とします。したがって、SVDは次のとおりです。
擬似逆の次式で与えられます。
解考えます。次に:
ここには基本的に2つのケースがあります。
この最後の部分は少し注意が必要です。行列の次元を追跡し、が直交行列であることを使用する必要があります。
とき線形独立の行を、持っている(例えば、我々は、脂肪マトリックスを持っている。)、そして:
未決定のシステムの場合、擬似逆関数が最小ノルム解を与えることを示すことができます。
とき線形独立の列を、持っている(例えば、我々はスキニー行列を持っている。)、そして:
lm
はデフォルトでQR分解を使用しますが、代替を指定できます。