読者です 読者をやめる 読者になる 読者になる

stMind

You'll never blog alone

Numpyのlinalg.lstsqの覚書

ヘルプは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()

f:id:satojkovic:20120425020910p:image