def test_update_b_L_C_weighted_equals_compute_b_and_compute_L_C_constant_weights( ): N = 2 D = 2 m = 2 omega = np.random.randn(D, m) u = np.random.uniform(0, 2 * np.pi, m) X1 = np.random.randn(N, D) X2 = np.random.randn(N, D) log_weights1 = np.log(np.ones(N)) log_weights2 = np.log(np.ones(N)) stacked = np.vstack((X1, X2)) b = compute_b(stacked, omega, u) L_C = np.linalg.cholesky(compute_C(stacked, omega, u)) b_updated = compute_b(X1, omega, u) L_C_updated = np.linalg.cholesky(compute_C(X1, omega, u)) log_sum_weights1 = log_sum_exp(log_weights1) b_updated, L_C_updated = update_b_L_C_weighted(X2, b_updated, L_C_updated, log_sum_weights1, log_weights2, omega, u) assert_allclose(b, b_updated) assert_allclose(L_C, L_C_updated)
def test_update_b_single_equals_batch(): N = 100 D = 3 m = 10 omega = np.random.randn(D, m) u = np.random.uniform(0, 2 * np.pi, m) X = np.random.randn(N, D) x = np.random.randn(D) b = compute_b(X, omega, u) b = update_b_single(x, b, n=N, omega=omega, u=u) b_batch = compute_b(np.vstack((X, x)), omega, u) assert_allclose(b, b_batch)
def test_compute_b_equals_compute_b_memory(): N = 100 D = 3 m = 10 omega = np.random.randn(D, m) u = np.random.uniform(0, 2 * np.pi, m) X = np.random.randn(N, D) b = compute_b(X, omega, u) b_storage = compute_b_memory(X, omega, u) assert_allclose(b, b_storage)
def test_update_b_single_equals_compute_b_when_initialised_correctly(): sigma = 1. N = 200 D = 2 m = 10 X = np.random.randn(N, D) # basis omega, u = rff_sample_basis(D, m, sigma) # initial fit and update b_update = np.zeros(m) n_update = m for x in X: b_update = update_b_single(x, b_update, n_update, omega, u) n_update += 1 # initial fit and batch (average of "fake" b and new observations b_fake = np.zeros(m) n_fake = m b_batch = (b_fake * n_fake + compute_b(X, omega, u) * N) / (n_fake + N) assert_allclose(b_update, b_batch)