예제 #1
0
def test_omp_path():
    path = orthogonal_mp(X, y, n_nonzero_coefs=5, return_path=True)
    last = orthogonal_mp(X, y, n_nonzero_coefs=5, return_path=False)
    assert path.shape == (n_features, n_targets, 5)
    assert_array_almost_equal(path[:, :, -1], last)
    path = orthogonal_mp_gram(G, Xy, n_nonzero_coefs=5, return_path=True)
    last = orthogonal_mp_gram(G, Xy, n_nonzero_coefs=5, return_path=False)
    assert path.shape == (n_features, n_targets, 5)
    assert_array_almost_equal(path[:, :, -1], last)
예제 #2
0
def test_unreachable_accuracy():
    assert_array_almost_equal(orthogonal_mp(X, y, tol=0),
                              orthogonal_mp(X, y, n_nonzero_coefs=n_features))

    assert_array_almost_equal(
        assert_warns(RuntimeWarning,
                     orthogonal_mp,
                     X,
                     y,
                     tol=0,
                     precompute=True),
        orthogonal_mp(X, y, precompute=True, n_nonzero_coefs=n_features))
예제 #3
0
def test_omp_return_path_prop_with_gram():
    path = orthogonal_mp(X,
                         y,
                         n_nonzero_coefs=5,
                         return_path=True,
                         precompute=True)
    last = orthogonal_mp(X,
                         y,
                         n_nonzero_coefs=5,
                         return_path=False,
                         precompute=True)
    assert path.shape == (n_features, n_targets, 5)
    assert_array_almost_equal(path[:, :, -1], last)
예제 #4
0
def test_perfect_signal_recovery():
    idx, = gamma[:, 0].nonzero()
    gamma_rec = orthogonal_mp(X, y[:, 0], 5)
    gamma_gram = orthogonal_mp_gram(G, Xy[:, 0], 5)
    assert_array_equal(idx, np.flatnonzero(gamma_rec))
    assert_array_equal(idx, np.flatnonzero(gamma_gram))
    assert_array_almost_equal(gamma[:, 0], gamma_rec, decimal=2)
    assert_array_almost_equal(gamma[:, 0], gamma_gram, decimal=2)
예제 #5
0
def test_swapped_regressors():
    gamma = np.zeros(n_features)
    # X[:, 21] should be selected first, then X[:, 0] selected second,
    # which will take X[:, 21]'s place in case the algorithm does
    # column swapping for optimization (which is the case at the moment)
    gamma[21] = 1.0
    gamma[0] = 0.5
    new_y = np.dot(X, gamma)
    new_Xy = np.dot(X.T, new_y)
    gamma_hat = orthogonal_mp(X, new_y, 2)
    gamma_hat_gram = orthogonal_mp_gram(G, new_Xy, 2)
    assert_array_equal(np.flatnonzero(gamma_hat), [0, 21])
    assert_array_equal(np.flatnonzero(gamma_hat_gram), [0, 21])
예제 #6
0
def test_with_without_gram_tol():
    assert_array_almost_equal(orthogonal_mp(X, y, tol=1.),
                              orthogonal_mp(X, y, tol=1., precompute=True))
예제 #7
0
def test_with_without_gram():
    assert_array_almost_equal(
        orthogonal_mp(X, y, n_nonzero_coefs=5),
        orthogonal_mp(X, y, n_nonzero_coefs=5, precompute=True))
예제 #8
0
def test_tol():
    tol = 0.5
    gamma = orthogonal_mp(X, y[:, 0], tol=tol)
    gamma_gram = orthogonal_mp(X, y[:, 0], tol=tol, precompute=True)
    assert np.sum((y[:, 0] - np.dot(X, gamma))**2) <= tol
    assert np.sum((y[:, 0] - np.dot(X, gamma_gram))**2) <= tol
예제 #9
0
def test_n_nonzero_coefs():
    assert np.count_nonzero(orthogonal_mp(X, y[:, 0], n_nonzero_coefs=5)) <= 5
    assert np.count_nonzero(
        orthogonal_mp(X, y[:, 0], n_nonzero_coefs=5, precompute=True)) <= 5
예제 #10
0
def test_correct_shapes():
    assert (orthogonal_mp(X, y[:, 0],
                          n_nonzero_coefs=5).shape == (n_features, ))
    assert (orthogonal_mp(X, y, n_nonzero_coefs=5).shape == (n_features, 3))