최소 자승법(제곱법) 을 이용하여 데이터를 근사하는 방법에 대해 알아보려고 한다.
여기서는 각각의 데이터들이 일차함수 y=ax+b의 형태로 나타낼 수 있음을
알고 있다고 가정했을 때이다.

최소제곱법을 이용한 함수의 근사 (1) 
위의 페이지에 최소자승법에 대한 설명이 자세히 나와있어 
더 이상의 설명은 하지 않는다.
위의 페이지에는 파이썬으로 구현된 코드도 있는데 a와b를 구하는 방법이 생략되었다.
그래서 그 부분을 추가시켰다.

~\Downloads\LSM.py.html
 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from scipy import linalg
 4 
 5 x=[0.0,0.1,0.2,0.3,0.4]
 6 y=[2.50,5.68,9.00,12.2,15.0]
 7 
 8 xp=np.arange(-0.1,0.5,0.05)
 9 
10 a11=sum([xx**2 for xx in x])
11 a12=sum([xx for xx in x])
12 a21=sum([xx for xx in x])
13 a22=sum([1 for xx in x])
14 b2=sum([yy for yy in y])
15 b1=0.0
16 for ii in range(len(x)):
17     b1=b1+x[ii]*y[ii]
18 
19 A=np.array(((a11,a12),(a21,a22)))
20 b=np.reshape(np.array((b1,b2)),(2,1))
21 
22 X=np.linalg.solve(A,b)
23 
24 print X[0], X[1]
25 
26 #a=31.54
27 #b=2.57
28 
29 yp=[X[0]*xx+X[1] for xx in xp]
30 fig=plt.figure(0)
31 ax=fig.add_subplot(111)
32 plt.plot(x,y,'o',xp,yp)
33 ax.axis([-0.1,0.45,-0.5,15.5])
34 plt.show()
by inceptionkid 2012. 11. 26. 20:54