queso icon indicating copy to clipboard operation
queso copied to clipboard

Surrogate-Based Likelihoods

Open pbauman opened this issue 9 years ago • 3 comments

A natural (I think) follow-on to #351 is to subclass the more specialized likelihoods, e.g. GaussianLikelihoodScalarCovariance and have them take a pointer to a SurrogateBase. Then, we can implement the evaluate_model method to call the surrogate model. Then, the user only has to worry about their SurrogateBase subclass and the likelihood is bascially taken care of. It's not a huge deal, but one step less the user has to do.

Wanted to solicit thoughts on this before proceeding.

pbauman avatar May 01 '15 12:05 pbauman

Right now, to use the surrogate functionality in a likelihood class (or one of the specialised ones) the user has to do all of this boilerplate in their likelihood's constructor (or some init() method), correct?

dmcdougall avatar May 01 '15 18:05 dmcdougall

Correct, the user would've had to do this code somewhere. But it doesn't necessarily have to be in the likelihood. I was envisioning that the user passes a pointer to the their (already setup) surrogate to the likelihood so they don't have to necessarily further subclass the likelihood object - they pass their surrogate, setup the inverse problem, and off they go.

(I just remembered what I haven't done yet in #351, but I mean(t) to, is create a monitor (or whatever) to read/write the surrogate data so that the user could create the object, read the data, and then use the surrogate. So this would bypass the Builder part.) But, otherwise, yes, that code is needed.

But could be I"m overlooking something or that there's a better way to do it.

pbauman avatar May 01 '15 18:05 pbauman

Also this would be perfect for derivative calculations. All of that can be done automatically because the derivative and Hessian calculations are all analytical.

dmcdougall avatar May 05 '15 04:05 dmcdougall