Пример #1
0
def test_update_cholesky_single(method):
    X, y = make_test_case(50, 5, 2)

    E = np.array([True, False, True, False, False])
    E_new = np.array([True, False, True, True, False])

    L = lasso._compute_cholesky(X, E)
    L_new, index_new = method(X, L, np.flatnonzero(E), np.flatnonzero(E_new))
    L_new_truth = lasso._compute_cholesky(X, E_new)

    assert np.linalg.norm(
        lasso._compute_leverage_cholesky(X, L_new, index_new) -
        lasso._compute_leverage_cholesky(X, L_new_truth, E_new)) < 0.001
Пример #2
0
def test_update_cholesky_no_order(method):
    X, y = make_test_case(50, 5, 2)

    E = np.array([True, False, True, False, False])
    E_new = np.array([True, True, True, False, False])

    perm = np.array([0, 2, 1, 3, 4])

    L = lasso._compute_cholesky(X, E)
    L_new, index_new = method(X, L, np.flatnonzero(E), np.flatnonzero(E_new))
    L_new_truth = lasso._compute_cholesky(X, E_new)
    L_new_truth_perm = lasso._compute_cholesky(X[:, perm], E_new[perm])

    assert np.linalg.norm(np.tril(L_new) - np.tril(L_new_truth_perm)) < 1e-5
    assert np.linalg.norm(
        lasso._compute_leverage_cholesky(X, L_new, index_new) -
        lasso._compute_leverage_cholesky(X, L_new_truth, E_new)) < 1e-3
Пример #3
0
def test_update_cholesky_inplace():
    X, y = make_test_case(50, 5, 2)

    E = np.array([True, False, True, True, False])
    E_new = np.array([True, True, True, False, False])

    L_orig = lasso._compute_cholesky(X, E)
    L_new_truth = lasso._compute_cholesky(X, E_new)

    L = np.empty_like(L_new_truth, order='F')
    L[:L_orig.shape[0], :L_orig.shape[1]] = L_orig
    L_new, index_new = native_impl.lasso_update_cholesky_w(
        X, L, np.flatnonzero(E), np.flatnonzero(E_new), overwrite_L=True)

    assert L_new is L or L_new.base is L
    assert np.linalg.norm(
        lasso._compute_leverage_cholesky(X, L_new, index_new) -
        lasso._compute_leverage_cholesky(X, L_new_truth, E_new)) < 1e-5