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)
Example #2
0
    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)