Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_basics(self, ma2, distribution_test):
# A 1D case
normal = elfi.Prior('normal', 5, model=elfi.ElfiModel())
normal_prior = ModelPrior(normal.model)
distribution_test(normal_prior)
# A 2D case
prior = ModelPrior(ma2)
distribution_test(prior)
def test_basics(self, ma2, distribution_test):
# A 1D case
normal = elfi.Prior('normal', 5, model=elfi.ElfiModel())
normal_prior = ModelPrior(normal.model)
distribution_test(normal_prior)
# A 2D case
prior = ModelPrior(ma2)
distribution_test(prior)
def test_numerical_grad_logpdf(self):
# Test gradient with a normal distribution
loc = 2.2
scale = 1.1
x = np.random.rand()
analytical_grad_logpdf = -(x - loc) / scale**2
prior_node = elfi.Prior('normal', loc, scale, model=elfi.ElfiModel())
num_grad = ModelPrior(prior_node.model).gradient_logpdf(x)
assert np.isclose(num_grad, analytical_grad_logpdf, atol=0.01)
def test_gradient_logpdf(self, ma2):
prior = ModelPrior(ma2)
rv = prior.rvs(size=10)
grads = prior.gradient_logpdf(rv)
assert grads.shape == rv.shape
assert np.allclose(grads, 0)
def test_pdf(self, ma2):
prior = ModelPrior(ma2)
rv = prior.rvs(size=10)
assert np.allclose(prior.pdf(rv), np.exp(prior.logpdf(rv)))
The approximation is based on surrogate model regression.
Parameters
----------
threshold: float, optional
Discrepancy threshold for creating the posterior (log with log discrepancy).
Returns
-------
posterior : elfi.methods.posteriors.BolfiPosterior
"""
if self.state['n_evidence'] == 0:
raise ValueError('Model is not fitted yet, please see the `fit` method.')
return BolfiPosterior(self.target_model, threshold=threshold, prior=ModelPrior(self.model))
----------
model : ElfiModel or NodeReference
discrepancy_name : str, NodeReference, optional
Only needed if model is an ElfiModel
output_names : list, optional
Additional outputs from the model to be included in the inference result, e.g.
corresponding summaries to the acquired samples
kwargs:
See InferenceMethod
"""
model, discrepancy_name = self._resolve_model(model, discrepancy_name)
super(SMC, self).__init__(model, output_names, **kwargs)
self._prior = ModelPrior(self.model)
self.discrepancy_name = discrepancy_name
self.state['round'] = 0
self._populations = []
self._rejection = None
self._round_random_state = None
target_model = target_model or GPyRegression(self.model.parameter_names, bounds=bounds)
self.target_name = target_name
self.target_model = target_model
n_precomputed = 0
n_initial, precomputed = self._resolve_initial_evidence(initial_evidence)
if precomputed is not None:
params = batch_to_arr2d(precomputed, self.parameter_names)
n_precomputed = len(params)
self.target_model.update(params, precomputed[target_name])
self.batches_per_acquisition = batches_per_acquisition or self.max_parallel_batches
self.acquisition_method = acquisition_method or LCBSC(self.target_model,
prior=ModelPrior(self.model),
noise_var=acq_noise_var,
exploration_rate=exploration_rate,
seed=self.seed)
self.n_initial_evidence = n_initial
self.n_precomputed_evidence = n_precomputed
self.update_interval = update_interval
self.async_acq = async_acq
self.state['n_evidence'] = self.n_precomputed_evidence
self.state['last_GP_update'] = self.n_initial_evidence
self.state['acquisition'] = []