def test_independentnormalkernel(): x0 = {'y0': np.array([1, 2]), 'y1': 2.5} x = {'y0': np.array([0, 0]), 'y1': 7} # use default var kernel = IndependentNormalKernel() kernel.initialize(0, None, x0) ret = kernel(x, x0) expected = -0.5 * (3 * np.log(2 * np.pi * 1) + 1**2 + 2**2 + 4.5**2) assert np.isclose(ret, expected) # define own var kernel = IndependentNormalKernel([1, 2, 3]) kernel.initialize(0, None, x0) ret = kernel(x, x0) expected = -0.5 * (3 * np.log(2 * np.pi) + np.log(1) + np.log(2) + np.log(3) + 1**2 / 1 + 2**2 / 2 + 4.5**2 / 3) assert np.isclose(ret, expected) # compare to normal kernel normal_kernel = NormalKernel(cov=np.diag([1, 2, 3])) normal_kernel.initialize(0, None, x0) normal_ret = normal_kernel(x, x0) assert np.isclose(ret, normal_ret) # function var def var(p): if p is None: return 42 return np.array([p['th0'], p['th1'], 3]) kernel = IndependentNormalKernel(var) kernel.initialize(0, None, x0) ret = kernel(x, x0, par={'th0': 1, 'th1': 2}) assert np.isclose(ret, expected)
def test_independentnormalkernel(): x0 = {'y0': np.array([1, 2]), 'y1': 2.5} x = {'y0': np.array([0, 0]), 'y1': 7} # use default var kernel = IndependentNormalKernel() kernel.initialize(0, None, x0, total_sims=0) ret = kernel(x, x0) expected = -0.5 * (3 * np.log(2 * np.pi * 1) + 1**2 + 2**2 + 4.5**2) sp_expected = np.log( np.prod([stats.norm.pdf(x=x, loc=0, scale=1) for x in [1, 2, 4.5]])) assert np.isclose(expected, sp_expected) assert np.isclose(ret, expected) # define own var kernel = IndependentNormalKernel([1, 2, 3]) kernel.initialize(0, None, x0, total_sims=0) ret = kernel(x, x0) expected = -0.5 * (3 * np.log(2 * np.pi) + np.log(1) + np.log(2) + np.log(3) + 1**2 / 1 + 2**2 / 2 + 4.5**2 / 3) sp_expected = np.log( np.prod([ stats.norm.pdf(x=x, loc=0, scale=s) for x, s in zip([1, 2, 4.5], np.sqrt([1, 2, 3])) ])) assert np.isclose(expected, sp_expected) assert np.isclose(ret, expected) # compare to normal kernel normal_kernel = NormalKernel(cov=np.diag([1, 2, 3])) normal_kernel.initialize(0, None, x0, total_sims=0) normal_ret = normal_kernel(x, x0) assert np.isclose(ret, normal_ret) # function var def var(p): if p is None: return 42 return np.array([p['th0'], p['th1'], 3]) kernel = IndependentNormalKernel(var) kernel.initialize(0, None, x, total_sims=0) ret = kernel(x, x0, par={'th0': 1, 'th1': 2}) assert np.isclose(ret, expected)
def test_normalkernel(): x0 = {'y0': np.array([1, 0]), 'y1': 1} x = {'y0': np.array([2, 2]), 'y1': 2} # use default cov kernel = NormalKernel() kernel.initialize(0, None, x0, total_sims=0) ret = kernel(x, x0) # expected value logterm = 3 * np.log(2 * np.pi * 1) quadterm = 1**2 + 2**2 + 1**2 expected = -0.5 * (logterm + quadterm) assert np.isclose(ret, expected) # define own cov cov = np.array([[2, 1, 0], [0, 2, 1], [0, 1, 3]]) kernel = NormalKernel(cov=cov) kernel.initialize(0, None, x0, total_sims=0) ret = kernel(x, x0) expected = stats.multivariate_normal(cov=cov).logpdf([1, 2, 1]) assert np.isclose(ret, expected) # define own keys, linear output kernel = NormalKernel(keys=['y0'], ret_scale=SCALE_LIN) kernel.initialize(0, None, x0, total_sims=0) ret = kernel(x, x0) expected = stats.multivariate_normal(cov=np.eye(2)).pdf([1, 2]) assert np.isclose(ret, expected)