Beispiel #1
0
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)
Beispiel #2
0
def test_update_L_C_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)

    L_C = np.linalg.cholesky(compute_C(X, omega, u))
    L_C = update_L_C_single(x, L_C, N, omega, u)
    L_C_batch = np.linalg.cholesky(compute_C(np.vstack((X, x)), omega, u))

    assert_allclose(L_C, L_C_batch)
Beispiel #3
0
def test_update_C_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)

    C = compute_C(X, omega, u)
    C = update_C(x, C, n=N, omega=omega, u=u)
    C_batch = compute_C(np.vstack((X, x)), omega, u)

    assert_allclose(C, C_batch)
Beispiel #4
0
def test_update_L_C_single_equals_compute_L_C_when_initialised_correctly():
    sigma = 1.
    lmbda = 2.
    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
    L_C_update = np.eye(m) * np.sqrt(lmbda)
    n_update = m
    for x in X:
        L_C_update = update_L_C_single(x, L_C_update, n_update, omega, u)
        n_update += 1

    # initial fit and batch (average of "fake" b and new observations
    L_C_fake = np.eye(m) * np.sqrt(lmbda)
    n_fake = m
    C_batch = (np.dot(L_C_fake, L_C_fake.T) * n_fake +
               compute_C(X, omega, u) * N) / (n_fake + N)
    L_C_batch = np.linalg.cholesky(C_batch)

    assert_allclose(L_C_update, L_C_batch)
Beispiel #5
0
def test_compute_C_equals_compute_C_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)

    C = compute_C(X, omega, u)
    C_storage = compute_C_memory(X, omega, u)
    assert_allclose(C, C_storage, rtol=1e-4)