def test_model_selection_exact(): prng = np.random.RandomState(10) data, XYZ, XYZvol, vardata, signal = make_data(n=30, dim=20, r=3, amplitude=1, noise=0, jitter=0, prng=prng) labels = (signal > 0).astype(int) P1 = os.multivariate_stat(data, labels=labels) P1.init_hidden_variables() P1.evaluate(nsimu=100, burnin=10, verbose=verbose) L1 = P1.compute_log_region_likelihood() Prior1 = P1.compute_log_prior() #v, m_mean, m_var = P1.v.copy(), P1.m_mean.copy(), P1.m_var.copy() Post1 = P1.compute_log_posterior(nsimu=1e2, burnin=1e2, verbose=verbose) M1 = L1 + Prior1[:-1] - Post1[:-1] yield assert_almost_equal(M1.mean(), P1.compute_marginal_likelihood().mean(), 0) P0 = os.multivariate_stat(data, labels=labels) P0.network *= 0 P0.init_hidden_variables() P0.evaluate(nsimu=100, burnin=100, verbose=verbose) L0 = P0.compute_log_region_likelihood() Prior0 = P0.compute_log_prior() Post0 = P0.compute_log_posterior(nsimu=1e2, burnin=1e2, verbose=verbose) M0 = L0 + Prior0[:-1] - Post0[:-1] yield assert_almost_equal(M0.mean(), P0.compute_marginal_likelihood().mean(), 0) yield assert_true(M1[1] > M0[1]) yield assert_true(M1[0] < M0[0])
def test_evaluate_exact(): # without mfx nor spatial relaxation prng = np.random.RandomState(10) data, XYZ, XYZvol, vardata, signal = make_data(n=20, dim=np.array([20,20,20]), r=3, amplitude=5, noise=0, jitter=0, prng=prng) p = len(signal) XYZvol *= 0 XYZvol[list(XYZ)] = np.arange(p) P = os.multivariate_stat(data) P.init_hidden_variables() P.evaluate(nsimu=100, burnin=100, J=[XYZvol[5, 5, 5]], compute_post_mean=True, verbose=verbose) P.log_likelihood_values = P.compute_log_region_likelihood() # Verify code consistency Q = os.multivariate_stat(data, vardata*0, XYZ, std=0, sigma=5) Q.init_hidden_variables() Q.evaluate(nsimu=100, burnin=100, J = [XYZvol[5,5,5]], compute_post_mean=True, update_spatial=False, verbose=verbose) Q.log_likelihood_values = Q.compute_log_region_likelihood() yield assert_almost_equal(P.mean_m.mean(), Q.mean_m.mean(), int(np.log10(P.nsimu))-1) yield assert_almost_equal(Q.log_likelihood_values.sum(), P.log_likelihood_values.sum(), 0)
def test_model_selection_mfx_spatial_rand_walk(): prng = np.random.RandomState(10) data, XYZ, XYZvol, vardata, signal = make_data(n=20, dim=np.array([1,20,20]), r=3, amplitude=3, noise=1, jitter=0.5, prng=prng) labels = (signal > 0).astype(int) P = os.multivariate_stat(data, vardata, XYZ, std=0.5, sigma=5, labels=labels) P.network[:] = 0 P.init_hidden_variables() P.evaluate(nsimu=100, burnin=100, verbose=verbose, proposal='rand_walk', proposal_std=0.5) L00 = P.compute_log_region_likelihood() # Test simulated annealing procedure P.estimate_displacements_SA(nsimu=100, c=0.99, proposal_std=P.proposal_std, verbose=verbose) L0 = P.compute_log_region_likelihood() yield assert_true(L0.sum() > L00.sum()) #Prior0 = P.compute_log_prior() #Post0 = P.compute_log_posterior(nsimu=1e2, burnin=1e2, verbose=verbose) #M0 = L0 + Prior0[:-1] - Post0[:-1] M0 = P.compute_marginal_likelihood(update_spatial=True) #yield assert_almost_equal(M0.sum(), P.compute_marginal_likelihood(verbose=verbose).sum(), 0) P.network[1] = 1 #P.init_hidden_variables(init_spatial=False) P.init_hidden_variables(init_spatial=False) P.evaluate(nsimu=100, burnin=100, verbose=verbose, update_spatial=False, proposal_std=P.proposal_std) #L1 = P.compute_log_region_likelihood() #Prior1 = P.compute_log_prior() #Post1 = P.compute_log_posterior(nsimu=1e2, burnin=1e2, verbose=verbose) #M1 = L1 + Prior1[:-1] - Post1[:-1] M1 = P.compute_marginal_likelihood(update_spatial=True) #yield assert_almost_equal(0.1*M1.sum(), 0.1*P.compute_marginal_likelihood(verbose=verbose).sum(), 0) yield assert_true(M1 > M0)
def test_update_labels(): prng = np.random.RandomState(10) data, XYZ, XYZvol, vardata, signal = make_data(n=20, dim=20, r=3, amplitude=5, noise=1, jitter=1, prng=prng) P = os.multivariate_stat(data, vardata, XYZ) P.init_hidden_variables() p = P.data.shape[1] P.labels_prior = np.ones((1, p), float) P.label_values = np.zeros((1, p), int) P.labels_prior_mask = np.arange(p) P.update_labels() yield assert_equal(max(abs(P.labels - np.zeros(p, int))), 0)
def test_evaluate_mfx_spatial(): prng = np.random.RandomState(10) data, XYZ, XYZvol, vardata, signal = make_data(n=20, dim=10, r=3, amplitude=5, noise=1, jitter=1, prng=prng) P = os.multivariate_stat(data, vardata, XYZ, std=1, sigma=3) P.init_hidden_variables() P.evaluate(nsimu=5, burnin=5, J=[P.D.XYZ_vol[10, 10, 10]], verbose=verbose, mode='mcmc') # Test log_likelihood computation v = P.v.copy() m_var = P.m_var.copy() m_mean = P.m_mean.copy() L1 = P.compute_log_region_likelihood_slow(v, m_mean, m_var) L2 = P.compute_log_region_likelihood(v, m_mean, m_var) yield assert_almost_equal(-L1.sum(), L2.sum()*2, 2)