#coding: utf-8
import numpy as np
from pylab import *
import sys
M = 9
def y(x, wlist):
ret = wlist[0]
for i in range(1, M+1):
ret += wlist[i] * (x ** i)
return ret
def estimate(xlist, tlist, lam):
A = []
for i in range(M+1):
for j in range(M+1):
temp = (xlist**(i+j)).sum()
if i == j:
temp += lam
A.append(temp)
A = array(A).reshape(M+1, M+1)
T = []
for i in range(M+1):
T.append(((xlist**i) * tlist).sum())
T = array(T)
wlist = np.linalg.solve(A, T)
return wlist
def rms(xlist, tlist, wlist):
E_w = 0
N = len(xlist)
for n in range(0, N):
sum = 0
for j in range(0, M+1):
sum += wlist[j] * (xlist[n] ** j)
E_w += ((sum - tlist[n]) ** 2)/2
return str(np.sqrt(2 * E_w / N))
def example1():
# number of training data
N = 10
# generate training data
xlist = np.linspace(0, 1, N) # extract N-points
tlist = np.sin(2 * np.pi * xlist) + np.random.normal(0, 0.2, xlist.size)
# estimate parametaer w
wlist = estimate(xlist, tlist, np.exp(-18.0))
#print wlist
print "E_RMS for training data: %s" % rms(xlist, tlist, wlist)
N = 100
xlist2 = np.linspace(0, 1, N) # extract N-points
tlist2 = np.sin(2 * np.pi * xlist2) + np.random.normal(0, 0.2, xlist2.size)
print "E_RMS for test data: %s" % rms(xlist2, tlist2, wlist)
# generate original data
xs = np.linspace(0, 1, 1000)
# ideal and model
ideal = np.sin(2 * np.pi * xs)
model = [y(x, wlist) for x in xs]
# plot training data and original data
plot(xlist, tlist, 'bo')
plot(xlist2, tlist2, 'rd')
plot(xs, ideal, 'g-')
plot(xs, model, 'r-')
xlim(0.0, 1.0)
ylim(-1.5, 1.5)
show()
if __name__ == "__main__":
example1()
2011/08/03
machine learning: curve-fitting
ラベル:
machine learning,
python
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment