def bounds(Xs, Ys, ns=100): #use a gp to infer mean and bounds on sets of x/y data that have diffent x #f,a = plt.subplots(2) #for i in xrange(len(Ys)): # a[0].plot(Xs[i],Ys[i]) X = sp.hstack(Xs) np = X.size Y = sp.hstack(Ys) X.resize([np, 1]) Y.resize([np, 1]) #a[1].plot(X,Y,'r.') np = X.size S = sp.zeros(np) D = [[sp.NaN]] * np ki = GPdc.MAT52CS mprior = sp.array([1., 2., 1.]) sprior = sp.array([2., 2., 2.]) #MAPH = GPdc.searchMAPhyp(X,Y,S,D,mprior,sprior, ki,mx=500) MAPH = sp.array([0.5, 5., 0.3]) g = GPdc.GPcore(X, Y, S, D, GPdc.kernel(ki, 1, MAPH)) sup = sp.linspace(min(X), max(X), ns) [m, V] = g.infer_diag_post(sup, [[sp.NaN]] * ns) std = sp.sqrt(V + MAPH[2]) #plt.fill_between(sup.flatten(),(m-std).flatten(),(m+std).flatten(),facecolor='lightblue',edgecolor='lightblue',alpha=0.5) #a[1].plot(sup,m.flatten(),'b') return [sup, m, std]
def gpmapasrecc(optstate, **para): if para['onlyafter'] > len( optstate.y) or not len(optstate.y) % para['everyn'] == 0: return [sp.NaN for i in para['lb']], {'didnotrun': True} logger.info('gpmapas reccomender') d = len(para['lb']) x = sp.hstack( [sp.vstack(optstate.x), sp.vstack([e['xa'] for e in optstate.ev])]) y = sp.vstack(optstate.y) s = sp.vstack([e['s'] for e in optstate.ev]) dx = [e['d'] for e in optstate.ev] MAP = GPdc.searchMAPhyp(x, y, s, dx, para['mprior'], para['sprior'], para['kindex']) logger.info('MAPHYP {}'.format(MAP)) G = GPdc.GPcore(x, y, s, dx, GPdc.kernel(para['kindex'], d + 1, MAP)) def directwrap(xq, y): xq.resize([1, d]) xe = sp.hstack([xq, sp.array([[0.]])]) #print xe a = G.infer_m(xe, [[sp.NaN]]) return (a[0, 0], 0) [xmin, ymin, ierror] = DIRECT.solve(directwrap, para['lb'], para['ub'], user_data=[], algmethod=1, volper=para['volper'], logfilename='/dev/null') logger.info('reccsearchresult: {}'.format([xmin, ymin, ierror])) return [i for i in xmin], {'MAPHYP': MAP, 'ymin': ymin}
def genmat52ojf(d, lb, ub): from ESutils import gen_dataset nt = 14 [X, Y, S, D] = gen_dataset(nt, d, lb, ub, GPdc.MAT52, sp.array([1.5] + [0.55] * d)) G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.MAT52, d, sp.array([1.5] + [0.55] * d))) def ojf(x, **ev): dx = ev['d'] s = ev['s'] if ev['s'] > 0: noise = sp.random.normal(scale=sp.sqrt(ev['s'])) else: noise = 0 return G.infer_m(sp.array(x), [dx])[0, 0] + noise, 1., dict() def dirwrap(x, y): z = G.infer_m(x, [[sp.NaN]])[0, 0] #z = obj(x,0.,[sp.NaN]) return (z, 0) [xmin, ymin, ierror] = DIRECT.solve(dirwrap, lb, ub, user_data=[], algmethod=1, maxf=89000, logfilename='/dev/null') logger.info('generated function xmin {} ymin {} {}'.format( xmin, ymin, ierror)) return ojf, xmin, ymin
def run_search(self): MAP = GPdc.searchMAPhyp(self.X, self.Y, self.S, self.D, self.mprior, self.sprior, self.kindex) try: del (self.G) except: pass self.G = GPdc.GPcore(self.X, self.Y, self.S, self.D, GPdc.kernel(self.kindex, self.d, MAP)) def directwrap(x, y): x.resize([1, self.d]) a = self.G.infer_lEI(x, [[sp.NaN]]) #print [x,a] #print G.infer_diag_post(x,[[sp.NaN]]) return (-a[0, 0], 0) [xmin, ymin, ierror] = DIRECT.solve(directwrap, self.lb, self.ub, user_data=[], algmethod=1, volper=self.volper, logfilename='/dev/null') return [xmin, self.s, [sp.NaN]]
def gensquexpdraw(d, lb, ub, ignores=-1): nt = 14 [X, Y, S, D] = ESutils.gen_dataset(nt, d, lb, ub, GPdc.SQUEXP, sp.array([1.5] + [0.30] * d)) G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, d, sp.array([1.5] + [0.30] * d))) def obj(x, s, d, override=False): #print [x,s,d] if ignores > 0: s = ignores if s == 0. or override: noise = 0. else: noise = sp.random.normal(scale=sp.sqrt(s)) print "EVAL WITH NOISE: " + str(noise) + "FROM S= " + str(s) return [G.infer_m(x, [d])[0, 0] + noise, 1.] def dirwrap(x, y): z = G.infer_m(x, [[sp.NaN]])[0, 0] #z = obj(x,0.,[sp.NaN]) return (z, 0) [xmin, ymin, ierror] = DIRECT.solve(dirwrap, lb, ub, user_data=[], algmethod=1, maxf=89000, logfilename='/dev/null') return [obj, xmin, ymin]
def makeG(X,Y,S,D,kindex,mprior,sprior,nh): #draw hyps based on plk #print "RRRRRRRRRRRRRR"+str([X,Y,S,D,kindex,mprior,sprior,nh]) H = ESutils.drawhyp_plk(X,Y,S,D,kindex,mprior,sprior,nh) G = GPdc.GPcore(X,Y,S,D,[GPdc.kernel(kindex,X.shape[1],i) for i in H]) return G
def EIMAPaq(optstate, persist, ev=None, ub=None, lb=None, nrandinit=None, mprior=None, sprior=None, kindex=None, directmaxiter=None): para = copy.deepcopy(para) if persist == None: persist = {'n': 0, 'd': len(ub)} n = persist['n'] d = persist['d'] if n < nrandinit: persist['n'] += 1 return randomaq(optstate, persist, ev=ev, lb=lb, ub=ub) logger.info('EIMAPaq') #logger.debug(sp.vstack([e[0] for e in optstate.ev])) #raise x = sp.vstack(optstate.x) y = sp.vstack(optstate.y) s = sp.vstack([e['s'] for e in optstate.ev]) dx = [e['d'] for e in optstate.ev] MAP = GPdc.searchMAPhyp(x, y, s, dx, mprior, sprior, kindex) logger.info('MAPHYP {}'.format(MAP)) G = GPdc.GPcore(x, y, s, dx, GPdc.kernel(kindex, d, MAP)) def directwrap(xq, y): xq.resize([1, d]) a = G.infer_lEI(xq, [ev['d']]) return (-a[0, 0], 0) [xmin, ymin, ierror] = DIRECT.solve(directwrap, lb, ub, user_data=[], algmethod=0, maxf=directmaxiter, logfilename='/dev/null') #logger.debug([xmin,ymin,ierror]) persist['n'] += 1 return [i for i in xmin], ev, persist, { 'MAPHYP': MAP, 'logEImin': ymin, 'DIRECTmessage': ierror }
def gensquexpIPdraw(d, lb, ub, sl, su, sfn, sls, cfn): #axis = 0 value = sl #d dimensional objective +1 for s nt = 25 #print sp.hstack([sp.array([[sl]]),lb]) #print sp.hstack([sp.array([[su]]),ub]) [X, Y, S, D] = ESutils.gen_dataset(nt, d + 1, sp.hstack([sp.array([[sl]]), lb]).flatten(), sp.hstack([sp.array([[su]]), ub]).flatten(), GPdc.SQUEXP, sp.array([1.5] + [sls] + [0.30] * d)) G = GPdc.GPcore( X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, d + 1, sp.array([1.5] + [sls] + [0.30] * d))) def obj(x, s, d, override=False): x = x.flatten() if sfn(x) == 0. or override: noise = 0. else: noise = sp.random.normal(scale=sp.sqrt(sfn(x))) return [G.infer_m(x, [d])[0, 0] + noise, cfn(x)] def dirwrap(x, y): z = obj(sp.array([[sl] + [i for i in x]]), sl, [sp.NaN], override=True) return (z, 0) [xmin0, ymin0, ierror] = DIRECT.solve(dirwrap, lb, ub, user_data=[], algmethod=1, maxf=89000, logfilename='/dev/null') lb2 = xmin0 - sp.ones(d) * 1e-4 ub2 = xmin0 + sp.ones(d) * 1e-4 [xmin, ymin, ierror] = DIRECT.solve(dirwrap, lb2, ub2, user_data=[], algmethod=1, maxf=89000, logfilename='/dev/null') #print "RRRRR"+str([xmin0,xmin,ymin0,ymin,xmin0-xmin,ymin0-ymin]) return [obj, xmin, ymin]
def __init__(self,X,Y,S,D,lb,ub,kindex,mprior,sprior,DH_SAMPLES=8,DM_SAMPLES=8, DM_SUPPORT=400,DM_SLICELCBPARA=1.,mode=ESutils.SUPPORT_SLICELCB,noS=False): print "PES init:" self.lb=lb self.ub=ub self.noS=noS if noS: S=sp.zeros(S.shape) self.G = makeG(X,Y,S,D,kindex,mprior,sprior,DH_SAMPLES) HS = sp.vstack([k.hyp for k in self.G.kf]) print "\nhyp mean: "+str(sp.mean(HS,axis=0)) print "hyp std: "+str(sp.sqrt(sp.mean(HS,axis=0))) self.Z = drawmins(self.G,DM_SAMPLES,lb,ub,SUPPORT=DM_SUPPORT,SLICELCB_PARA=DM_SLICELCBPARA,mode=mode) print "mindraws: "+str(self.Z) self.Ga = [GPdc.GPcore(*addmins(self.G,X,Y,S,D,self.Z[i,:])+[self.G.kf]) for i in xrange(DM_SAMPLES)]
def __init__(self,X,Y,S,D,lb,ub,kindex,mprior,sprior,axis,value,DH_SAMPLES=8,DM_SAMPLES=8, DM_SUPPORT=400,DM_SLICELCBPARA=1.,AM_POLICY=NOMIN,mode=ESutils.SUPPORT_SLICELCB,noS=False): print "PES init:" self.lb=lb self.ub=ub self.noS=noS self.X=X if noS: S=sp.zeros(S.shape) print [X.shape,Y.shape,mprior,sprior] self.G = makeG(X,Y,S,D,kindex,mprior,sprior,DH_SAMPLES) HS = sp.vstack([k.hyp for k in self.G.kf]) print "\nhyp mean: "+str(sp.mean(HS,axis=0)) print "hyp std: "+str(sp.sqrt(sp.mean(HS,axis=0))) self.Z = drawmins_inplane(self.G,DM_SAMPLES,lb,ub,axis=axis,value=value,SUPPORT=DM_SUPPORT,SLICELCB_PARA=DM_SLICELCBPARA,mode=mode) print "mindraws:\n"+str(self.Z) self.Ga = [GPdc.GPcore(*addmins_inplane(self.G,X,Y,S,D,self.Z[i,:],axis=axis,value=value,MINPOLICY=AM_POLICY)+[self.G.kf]) for i in xrange(DM_SAMPLES)] return
def train_costest(self): print self.X[:, 0] X = self.X[:, 0].copy().reshape([len(self.C), 1]) C = sp.array(self.C) D = [[sp.NaN]] * len(self.C) S = sp.zeros([len(self.C), 1]) lbc = sp.array([-3., -2., -6.]) ubc = sp.array([3., 2., 1.]) MLEC = GPdc.searchMLEhyp(X, sp.log(C), S, D, lbc, ubc, GPdc.SQUEXPCS, mx=10000) print "MLEC " + str(MLEC) self.ce = GPdc.GPcore(X.copy(), sp.log(C), S, D, GPdc.kernel(GPdc.SQUEXPCS, 1, sp.array(MLEC))) #self.ce = GPdc.GPcore(X,C,S,D,GPdc.kernel(GPdc.SQUEXPCS,1,sp.array([1.,0.3,1e-3]))) #self.ce.printc() return
def genbiasedmat52ojf(d, lb, ub, sls): #s normalised to 0 exact, 1 from ESutils import gen_dataset nt = 20 [X, Y, S, D] = gen_dataset(nt, d + 1, [0.] + lb, [1.] + ub, GPdc.MAT52, sp.array([1.5] + [0.30] * d + [sls])) G = GPdc.GPcore( X, Y, S, D, GPdc.kernel(GPdc.MAT52, d + 1, sp.array([1.5] + [0.30] * d + [sls]))) def ojf(x, **ev): #print "\nojfinput: {} : {}".format(x,ev) dx = ev['d'] s = ev['s'] if ev['s'] > 0: noise = sp.random.normal(scale=sp.sqrt(ev['s'])) else: noise = 0 xa = ev['xa'] x = sp.array(x) xfull = sp.hstack([x, xa]) return G.infer_m(xfull, [dx])[0, 0] + noise, 1., dict() def dirwrap(x, y): z = G.infer_m(sp.hstack(sp.array(x) + [0.]), [[sp.NaN]])[0, 0] return (z, 0) [xmin, ymin, ierror] = DIRECT.solve(dirwrap, lb, ub, user_data=[], algmethod=1, maxf=89000, logfilename='/dev/null') logger.info('generated function xmin {} ymin {}'.format(xmin, ymin)) return ojf, xmin, ymin
nt=34 X = ESutils.draw_support(2, sp.array([-1.,-1.]),sp.array([1.,1.]),nt,ESutils.SUPPORT_UNIFORM) D = [[sp.NaN]]*(nt) hyp = sp.array([1.5,0.25,0.25]) kf = GPdc.gen_sqexp_k_d(hyp) Kxx = GPdc.buildKsym_d(kf,X,D) Y = spl.cholesky(Kxx,lower=True)*sp.matrix(sps.norm.rvs(0,1.,nt)).T+sp.matrix(sps.norm.rvs(0,1e-3,nt)).T S = sp.matrix([1e-6]*nt).T lb = sp.array([-2.,-2.,-2.]) ub = sp.array([2.,2.,2.]) #MLEH = GPdc.searchMLEhyp(X,Y,S,D,lb,ub,GPdc.SQUEXP,mx=10000) G = GPdc.GPcore(X,Y,S,D,GPdc.kernel(GPdc.SQUEXP,2,sp.array([1.5,0.15,0.15]))) #np=180 #sup = sp.linspace(-1,1,np) #Dp = [[sp.NaN]]*np #Xp = sp.vstack([sp.array([i]) for i in sup]) #[m,v] = G.infer_diag(Xp,Dp) #a0.plot(sup,m) #sq = sp.sqrt(v) #a0.fill_between(sup, sp.array(m-2.*sq).flatten(), sp.array(m+2.*sq).flatten(), facecolor='lightblue',edgecolor='lightblue') Z = ESutils.draw_support(G, sp.array([-1.,-1.]),sp.array([1.,1.]),500,ESutils.SUPPORT_SLICEEI) np=30 R = ESutils.draw_min(G,Z,500) Z2 = ESutils.draw_support(G, sp.array([-1.,-1.]),sp.array([1.,1.]),500,ESutils.SUPPORT_LAPAPR,para=np) R2 = ESutils.draw_min(G,Z2,500)
from scipy import linalg as spl from matplotlib import pyplot as plt import GPdc import OPTutils import ESutils import DIRECT #base dimension d = 2 kindex = GPdc.MAT52 nt = 34 lb = sp.array([0.] + [-1.] * d) ub = sp.array([5.] + [1.] * d) Htrue = sp.array([1.4, 4.] + [0.25] * d) [X, Y, S, D] = ESutils.gen_dataset(nt, d + 1, lb, ub, kindex, Htrue, s=1e-8) G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(kindex, d + 1, Htrue)) def ojfaugnn(x): return G.infer_m(x, [[sp.NaN]])[0, 0] def opt_ip(s): def dwrap(x, y): X = sp.hstack([[s], x]) return (ojfaugnn(X), 0) [xm, ym, ierror] = DIRECT.solve(dwrap, lb[1:], ub[1:], user_data=[],
#lb = sp.array([0.,0.,-4.,-0.5*float(nf),float(nf)]) #ub = sp.array([4.,3.,3.,0.,1.5*float(nf)]) #MLEH = GPdc.searchMLEhyp(X,H,sp.zeros([np,1]),[[sp.NaN]]*(np),lb,ub,GPdc.SQUEXPPS,mx=10000) #G = GPdc.GPcore(X.copy(),H,sp.zeros([np,1]),[[sp.NaN]]*(np),GPdc.kernel(GPdc.SQUEXPPS,1,sp.array(MLEH))) lb = sp.array([0., 0., -4., -1., -3.]) ub = sp.array([4., 3., 3., 0.5, 3.]) MLEH = GPdc.searchMLEhyp(1. / float(nf) * X, H, sp.zeros([np, 1]), [[sp.NaN]] * (np), lb, ub, GPdc.SQUEXPBS, mx=10000) G = GPdc.GPcore(1. / float(nf) * X.copy(), H, sp.zeros([np, 1]), [[sp.NaN]] * (np), GPdc.kernel(GPdc.SQUEXPBS, 1, sp.array(MLEH))) [m, v] = G.infer_diag(1. / float(nf) * X, [[sp.NaN]] * (np)) S = sp.empty([np, 1]) for i in xrange(np): S[i, 0] = MLEH[2] * ((1. / float(nf) * X[i, 0])**(MLEH[3] * MLEH[4])) * ( (1. - 1. / float(nf) * X[i, 0])**(MLEH[3] * (1. - MLEH[4]))) lbc = sp.array([-4., 0., -6.]) ubc = sp.array([2., 3., 0.]) MLEC = GPdc.searchMLEhyp(X, sp.log(T), sp.zeros([np, 1]), [[sp.NaN]] * (np), lbc,
D = [[sp.NaN], [sp.NaN], [0], [0, 0]] a[0].plot([-0.8, -0.8], [0.3 - sp.sqrt(1e-1), 0.3 + sp.sqrt(1e-1)], 'r') a[0].plot([-0.8], [0.3], 'ro') a[0].plot([-0.25], [-0.2], 'ro') a[1].plot([0.25], [2.5], 'ro') a[2].plot([0.8], [50], 'ro') k = GPdc.kernel(GPdc.SQUEXP, 1, sp.array([0.5, 0.2])) K = sp.empty([4, 4]) for i in xrange(4): for j in xrange(i, 4): K[i, j] = K[j, i] = k(X[i, :], X[j, :], D[i], D[j]) K[i, i] += 1e-6 g = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, 1, sp.array([0.5, 0.2]))) #g.printc() C = g.get_cho() print C print spl.cho_solve((C, True), sp.eye(4)).dot(K) for i, d in enumerate([[sp.NaN], [0], [0, 0]]): m, v = g.infer_diag(sup, [d] * ns) vl = (m - sp.sqrt(v)).flatten() vu = (m + sp.sqrt(v)).flatten() a[i].plot(sup, m.flatten()) a[i].fill_between(sup, vl, vu, facecolor='LightBlue', edgecolor='LightBlue')
f0 = plt.figure() a0 = plt.subplot(111) a0.plot(sp.array(X[:,0]).flatten(),Y,'g.') lb = sp.array([-2.,-2.,-9,-2.,-2.]) ub = sp.array([2.,2.,-1,2.,2.]) MLEH = GPdc.searchMLEhyp(X,Y,S,D,lb,ub,GPdc.SQUEXPPS,mx=20000) mprior = sp.array([0.,-1.,-5.,-0.5,0.5]) sprior = sp.array([1.,1.,3.,1.,1.]) MAPH = GPdc.searchMAPhyp(X,Y,S,D,mprior,sprior,GPdc.SQUEXPPS,mx=20000) print "MLEH: "+str(MLEH) print "MAPH: "+str(MAPH) G = GPdc.GPcore(X,Y,S,D,GPdc.kernel(GPdc.SQUEXPPS,1,sp.array(MAPH))) print G.llk() np=180 sup = sp.linspace(-1,1,np) Dp = [[sp.NaN]]*np Xp = sp.vstack([sp.array([i]) for i in sup]) [m,v] = G.infer_diag(Xp,Dp) sq = sp.sqrt(v) S = sp.empty([np,1]) for i in xrange(np): S[i,0] = -MAPH[2]*(Xp[i,0]-MAPH[3])*(Xp[i,0]-MAPH[4])
def traincfn(x, c): n = x.size g = GPdc.GPcore(x, c, sp.array([1e-1] * n), [[sp.NaN]] * n, GPdc.kernel(GPdc.MAT52, 1, [1., 0.2])) return cfnobj(g)
from matplotlib import pyplot as plt import GPdc #test on a single point nt = 3 X = ESutils.draw_support(1, sp.array([-1.]), sp.array([1.]), nt, ESutils.SUPPORT_UNIFORM) D = [[sp.NaN]] * (nt) hyp = sp.array([1.5, 0.15]) kf = GPdc.gen_sqexp_k_d(hyp) Kxx = GPdc.buildKsym_d(kf, X, D) Y = spl.cholesky(Kxx, lower=True) * sp.matrix(sps.norm.rvs( 0, 1., nt)).T + sp.matrix(sps.norm.rvs(0, 1e-3, nt)).T S = sp.matrix([1e-6] * nt).T G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, 2, hyp)) ng = 40 A = sp.empty([ng, ng]) print 'startimage1' sup = sp.logspace(-3, 2, ng) for i, hi in enumerate(sup): for j, hj in enumerate(sup): A[i, j] = GPdc.GP_LKonly(X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, 2, sp.array([hi, hj]))).plk( sp.array([0., -1.]), sp.array([1., 1.])) A = -sp.log10(-A + sp.amax(A) + 1.) plt.figure()
S *= 0. f0 = plt.figure() a0 = plt.subplot(111) a0.plot(sp.array(X[:, 0]).flatten(), Y, 'g.') lb = sp.array([-2., -2., -9]) ub = sp.array([2., 2., -1]) MLEH = GPdc.searchMLEhyp(X, Y, S, D, lb, ub, GPdc.SQUEXPCS, mx=10000) mprior = sp.array([0., -1., -5.]) sprior = sp.array([1., 1., 3.]) MAPH = GPdc.searchMAPhyp(X, Y, S, D, mprior, sprior, GPdc.SQUEXPCS, mx=10000) print "MLEH: " + str(MLEH) print "MAPH: " + str(MAPH) G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.SQUEXPCS, 1, sp.array(MLEH))) print G.llk() np = 180 sup = sp.linspace(-1, 1, np) Dp = [[sp.NaN]] * np Xp = sp.vstack([sp.array([i]) for i in sup]) [m, v] = G.infer_diag(Xp, Dp) a0.plot(sup, m.flatten()) sq = sp.sqrt(v) a0.fill_between(sup, sp.array(m - 1. * sq).flatten(), sp.array(m + 1. * sq).flatten(),
ax[i].plot(sup,sps.norm.pdf(sup,loc=m[i],scale=sp.sqrt(v[i,i])),'b') ax[i].plot(sup,sps.norm.pdf(sup,loc=mu[i],scale=sp.sqrt(vu[i,i])),'r') ax[i].twinx().plot(sup,sps.norm.cdf(Z[i]*(sup-Y[i])/max(F[i],1e-20))*sps.norm.pdf(sup,loc=m[i],scale=sp.sqrt(v[i,i])),'g') #est on a gp import ESutils import GPdc nt=5 X = sp.matrix(sp.linspace(-1,1,nt)).T D = [[sp.NaN]]*(nt) hyp = sp.array([1.5,0.15]) kf = GPdc.kernel(GPdc.SQUEXP,1,hyp) Kxx = GPdc.buildKsym_d(kf,X,D) Y = spl.cholesky(Kxx,lower=True)*sp.matrix(sps.norm.rvs(0,1.,nt)).T+sp.matrix(sps.norm.rvs(0,1e-3,nt)).T S = sp.matrix([1e-2]*nt).T g = GPdc.GPcore(X,Y,S,D,kf) f,a = plt.subplots(2) Xe = sp.array([-0.25,0.25]) De = [[sp.NaN]]*2 [m0,V0] = g.infer_full(Xe,De) Ye = sp.array([2.,-2.]) Ze = sp.array([1.,-1.]) Fe = sp.array([(1e-6)**2,(1e-6)**2]) mt,vt = eprop.expectation_prop(m0,V0,Ye,Ze,Fe,20) print D+De g2 = GPdc.GPcore(sp.vstack([X,sp.array([Xe]).T]),sp.vstack([Y,sp.array([Ye]).T]),sp.vstack([S,sp.array([Fe]).T]),D+De,kf) ESutils.plot_gp(g,a[0],sp.linspace(-1,1,100),[[sp.NaN]]*100) ESutils.plot_gp(g2,a[1],sp.linspace(-1,1,100),[[sp.NaN]]*100)
from scipy import linalg as spl from scipy import stats as sps from matplotlib import pyplot as plt import GPdc import PES nt=12 d=1 lb = sp.array([-1.]*d) ub = sp.array([1.]*d) [X,Y,S,D] = ESutils.gen_dataset(nt,d,lb,ub,GPdc.SQUEXP,sp.array([1.5,0.15])) G = PES.makeG(X,Y,S,D,GPdc.SQUEXP,sp.array([0.,-1.]),sp.array([1.,1.]),12) Z=PES.drawmins(G,8,sp.array([-1.]),sp.array([1.]),SUPPORT=400,SLICELCB_PARA=1.) Ga = GPdc.GPcore(*PES.addmins(G,X,Y,S,D,Z[0,:])+[G.kf]) np=100 sup = sp.linspace(-1,1,np) Dp = [[sp.NaN]]*np Xp = sp.vstack([sp.array([i]) for i in sup]) [m,V] = G.infer_diag_post(Xp,Dp) [mp,Vp] = Ga.infer_diag_post(Xp,Dp) f,a = plt.subplots(2) s = sp.sqrt(V[0,:]) a[0].fill_between(sup,sp.array(m[0,:]-2.*s).flatten(),sp.array(m[0,:]+2.*s).flatten(),facecolor='lightblue',edgecolor='lightblue') a[0].plot(sup,m[0,:].flatten()) a[0].plot(sp.array(X[:,0]).flatten(),Y,'g.')
#X = sp.matrix([[0.,-9.],[0.2,5.],[0.4,12.],[0.6,3.],[0.8,9.]]) #Y = sp.matrix([0.2,0.1,0.,-0.15,-0.3]).T D = [[sp.NaN]] * (X.shape[0]) S = sp.matrix([0.005**2] * X.shape[0]).T f0 = plt.figure() a0 = plt.subplot(111) a0.plot(sp.array(X[:, 0]).flatten(), Y, 'g.') lb = sp.array([-2., -1., -2.]) ub = sp.array([2., 1., 2.]) MLEH = GPdc.searchMLEhyp(X, Y, S, D, lb, ub, GPdc.LIN1, mx=10000) print MLEH G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.LIN1, 2, MLEH)) print G.llk() np = 180 sup = sp.linspace(-1, 1, np) Dp = [[sp.NaN]] * np Xp = sp.vstack([sp.array([i, 1.]) for i in sup]) [m, v] = G.infer_diag(Xp, Dp) a0.plot(sup, m.flatten()) sq = sp.sqrt(v) a0.fill_between(sup, sp.array(m - 1. * sq).flatten(), sp.array(m + 1. * sq).flatten(), facecolor='lightblue',
Kxx = GPdc.buildKsym_d(kf, X, D) Y = spl.cholesky(Kxx, lower=True) * sp.matrix(sps.norm.rvs( 0, 1., nt)).T + sp.matrix(sps.norm.rvs(0, 1e-3, nt)).T S = sp.matrix([1e-6] * nt).T f0 = plt.figure() a0 = plt.subplot(111) a0.plot(sp.array(X[:, 0]).flatten(), Y, 'g.') lb = sp.array([-2., -2.]) ub = sp.array([2., 2.]) MLEH = GPdc.searchMLEhyp(X, Y, S, D, lb, ub, GPdc.SQUEXP, mx=10000) print MLEH G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(GPdc.SQUEXP, 1, MLEH)) print G.llk() np = 180 sup = sp.linspace(-1, 1, np) Dp = [[sp.NaN]] * np Xp = sp.vstack([sp.array([i]) for i in sup]) [m, v] = G.infer_diag(Xp, Dp) a0.plot(sup, m.flatten()) sq = sp.sqrt(v) a0.fill_between(sup, sp.array(m - 2. * sq).flatten(), sp.array(m + 2. * sq).flatten(),
D = [[sp.NaN]] * (nt) hyp0 = sp.array([1.5, 0.15]) hyp1 = sp.array([1.5, 0.05]) hyp2 = sp.array([1.5, 0.20]) kf = GPdc.kernel(GPdc.SQUEXP, 1, hyp0) Kxx = GPdc.buildKsym_d(kf, X, D) Y = spl.cholesky(Kxx, lower=True) * sp.matrix(sps.norm.rvs( 0, 1., nt)).T + sp.matrix(sps.norm.rvs(0, 1e-3, nt)).T S = sp.matrix([1e-6] * nt).T G = GPdc.GPcore(X, Y, S, D, [ GPdc.kernel(GPdc.SQUEXP, 1, hyp0), GPdc.kernel(GPdc.SQUEXP, 1, hyp1), GPdc.kernel(GPdc.SQUEXP, 1, hyp2), GPdc.kernel(GPdc.SQUEXP, 1, hyp0) ]) #G.printc() np = 100 sup = sp.linspace(-1, 1, np) Dp = [[sp.NaN]] * np Xp = sp.vstack([sp.array([i]) for i in sup]) m = G.infer_m(Xp, Dp) f, a = plt.subplots(m.shape[0]) for i in xrange(m.shape[0]): a[i].plot(sup, m[i, :].flatten()) a[i].plot(sp.array(X[:, 0]).flatten(), Y, 'g.')
D = [[sp.NaN]]*X.shape[0] S = sp.matrix([0.005**2]*X.shape[0]).T f0 = plt.figure() a0 = plt.subplot(111) a0.plot(sp.array(X[:,0]).flatten(),Y,'g.') lb = sp.array([-2.,-1.,-2.,-2.,-2.,-2.,-2.]) ub = sp.array([2.,1.,2.,2.,2.,2.,2.]) MLEH = GPdc.searchMLEhyp(X,Y,S,D,lb,ub,GPdc.LINSQUEXPXSQUEXP,mx=10000) print "xxx" GPdc.kernel(GPdc.LINSQUEXPXSQUEXP,2,MLEH) print "yyyy" print MLEH G = GPdc.GPcore(X,Y,S,D,GPdc.kernel(GPdc.LINSQUEXPXSQUEXP,2,MLEH)) print G.llk() print "zzz" np=180 sup = sp.linspace(-1,1,np) Dp = [[sp.NaN]]*np Xp = sp.vstack([sp.array([i,0.2]) for i in sup]) [m,v] = G.infer_diag(Xp,Dp) print "wwww" a0.plot(sup,m) sq = sp.sqrt(v) a0.fill_between(sup, sp.array(m-1.*sq).flatten(), sp.array(m+1.*sq).flatten(), facecolor='lightblue',edgecolor='lightblue')
G = PES.makeG(X, Y, S, D, GPdc.SQUEXP, sp.array([0., -1., -1.]), sp.array([1., 1., 1.]), 6) nz = 8 Z = PES.drawmins_inplane(G, nz, sp.array([-1.] * d), sp.array([1.] * d), axis=0, value=0., SUPPORT=500, SLICELCB_PARA=1.) print Z Ga = [ GPdc.GPcore(*PES.addmins_inplane( G, X, Y, S, D, Z[i, :], axis=0, value=0., MINPOLICY=PES.NOMIN) + [G.kf]) for i in xrange(nz) ] np = 220 sup = sp.linspace(-1, 1, np) Dp = [[sp.NaN]] * np Xp0 = sp.vstack([sp.array([i, Z[0, 1]]) for i in sup]) Xp1 = sp.vstack([sp.array([Z[0, 0], i]) for i in sup]) [mp0, Vp0] = Ga[0].infer_diag_post(Xp0, Dp) [mp1, Vp1] = Ga[0].infer_diag_post(Xp1, Dp) f, a = plt.subplots(d) s = sp.sqrt(Vp0[0, :]) a[0].fill_between(sup,