ヘルプはnumpy.linalg.lstsq ― NumPy v1.7.dev-3cb783e Manual (DRAFT)か、ipythonでhelp(linalg.lstsq)として確認できる。
- lstsq(a, b, rcond=-1)
- 最小二乗解を計算する
- ax=bを||b-ax||^2を最小にするベクトルxを求める事により解く
- パラメータ
- 係数行列a(M, N)、独立変数b(M,)or (M, K)、rcond
- 戻り値
- 最小二乗解p, 残差の合計residues, 係数行列aのランクrank, aのsingular value
- 最小二乗解を計算する
2つのパラメータを求めるサンプル問題。正解は(2.5, 3.2)に対して、(1.84768272, 4.06911899)と求められた。
from pylab import * from numpy import * x = arange(-3, 10, 0.05) # shape(x) = (400,) y = 2.5 * exp(-(x)**2/9) + 3.2 * exp(-(x-0.5)**2/4) + random.normal(0.0, 1.0, len(x)) # shape(y) = (400,) nParam = 2 A = zeros((len(x), nParam), float) A[:,0] = exp(-(x)**2/9) A[:,1] = exp(-(x-0.5)**2/4) # shape(A) = (400, 2) (p, residuals, rank, s) = linalg.lstsq(A, y) # p = array([ 1.84768272, 4.06911899]) # residuals = array([ 228.82195325]) # rank = 2 # s = array([ 10.989164 , 1.70740154]) plot(x, y, '.') plot(x, p[0]*A[:,0]+p[1]*A[:,1],'x') show()