queso
queso copied to clipboard
Surrogate-Based Likelihoods
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.
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?
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.
Also this would be perfect for derivative calculations. All of that can be done automatically because the derivative and Hessian calculations are all analytical.