機械学習分科会、第六章、カーネル法、前編。
おわび
ガウス過程のところの話が分からなかったのでその手前までです。ベイズファンのみなさんすみません。
以下、6.40のとこのコードです。なんか適当にいじって遊んだってください。
#coding:utf-8 import random import math import numpy as np print "inported" import matplotlib.pyplot as plt print "inported" def getdata(pn,sgm): res = [] for i in xrange(pn): x = random.uniform(0,10) t = math.sin(x) + random.gauss(0,sgm) x += random.gauss(0,sgm) res.append((x,t)) return res def toplts(x): a,b = [],[] for p in x: a.append(p[0]) b.append(p[1]) return (a,b) pi = 3.1415926535897932384626433 def norm(m,x,sgm): return math.exp(-((x-m)**2)/(2*sgm*sgm)) / (math.sqrt(2*pi)*sgm) ''' plt.clf() X = np.linspace(-2, 2, 256, endpoint=True) plt.plot(X, map(lambda x: norm(0,x,0.5),X)) plt.show() ''' def nadaraya_6_40(dat,ix,sgm): def myu(gzi): return norm(0,gzi,sgm) myuz = map(lambda p: (myu(ix-p[0]),p[1]),dat) s = 0.0 res = 0.0 for (v,t) in myuz: res += v * t s += v res /= s return res sgm = 0.3 pn = 50 plt.clf() #ideal X = np.linspace(0, 10, 256, endpoint=True) plt.plot(X, np.sin(X)) #data dat = getdata(pn,sgm) xs,ys = toplts(dat) plt.plot(xs,ys, 'o') #predict pres = map(lambda x: nadaraya_6_40(dat,x,sgm),X) plt.plot(X, pres) plt.show()