def learn_gps(self): for lcid in tqdm(self.lcids, desc='Learning GPs', leave=False): kernel = Matern32Term(log(self.lpf.fluxes[lcid].std()), log(0.1)) gp = GP(kernel, mean=0.0) gp.freeze_parameter('kernel:log_sigma') def nll(x): gp.set_parameter_vector(x) gp.compute(self.lpf.times[lcid], self.lpf.wn[lcid]) return -gp.log_likelihood(self.lpf.fluxes[lcid] - 1.0) res = minimize(nll, [log(1.)]) gp.set_parameter_vector(res.x) gp.compute(self.lpf.times[lcid], self.lpf.wn[lcid]) self.gps.append(gp)
def __call__(self, period: Optional[float] = None): logger.info("Running Celerite") assert hasattr( self.ts, 'ls'), "Celerite step requires a prior Lomb-Scargle step" self.period = period if period is not None else self.ts.ls.period gp = GP(SHOTerm(log(self.ts.flux.var()), log(10), log(2 * pi / self.period)), mean=1.) gp.freeze_parameter('kernel:log_omega0') gp.compute(self.ts.time, yerr=self.ts.ferr) def minfun(pv): gp.set_parameter_vector(pv) gp.compute(self.ts.time, yerr=self.ts.ferr) return -gp.log_likelihood(self.ts.flux) res = minimize(minfun, gp.get_parameter_vector(), jac=False, method='powell') self.result = res self.parameters = res.x self.prediction = gp.predict(self.ts.flux, return_cov=False)