2008年2月12日火曜日

Python - numarray で最小二乗法

Python - numarray で最小二乗法をやってみる。

当てはめる関数を
とする。

係数a1,a2, ... , akを求めるには、正規方程式
を解けばよい。

ここで、


 , 
である。


例えば、

(x,y) = (1.0, 8.1), (2.0, 2.5), (3.0, 2.1), (4.0, 3.4), (5.0, 9.8)

というデータがあったとして、これに二次関数


を当てはめることを考える。

, ,

である。

Pythonでnumarrayを使って行列演算をする。


# coding: utf-8
import numarray
import numarray.linear_algebra as la

F = numarray.array([[1,1,1],[4,2,1],[9,3,1],[16,4,1],[25,5,1]])
y = numarray.array([[8.1],[2.5],[2.1],[3.4],[9.8]])

tF = numarray.transpose(F)
tFF = numarray.dot(tF, F)
tFF_inv = la.inverse(tFF) #tFFの逆行列
tFy = numarray.dot(tF, y)
a = numarray.dot(tFF_inv, tFy)

print a


計算してみると、(a1, a2, a3) = (1.8357, -10.5843, 16.74) と求まる。実際にプロットするとこんな感じ。

0 件のコメント: