Ejemplo n.º 1
0
def test_dict_learning_shapes():
    n_components = 5
    dico = DictionaryLearning(n_components, random_state=0).fit(X)
    assert dico.components_.shape == (n_components, n_features)

    n_components = 1
    dico = DictionaryLearning(n_components, random_state=0).fit(X)
    assert dico.components_.shape == (n_components, n_features)
    assert dico.transform(X).shape == (X.shape[0], n_components)
Ejemplo n.º 2
0
def test_dict_learning_split():
    n_components = 5
    dico = DictionaryLearning(n_components,
                              transform_algorithm='threshold',
                              random_state=0)
    code = dico.fit(X).transform(X)
    dico.split_sign = True
    split_code = dico.transform(X)

    assert_array_almost_equal(
        split_code[:, :n_components] - split_code[:, n_components:], code)
Ejemplo n.º 3
0
def test_dict_learning_lars_code_positivity():
    n_components = 5
    dico = DictionaryLearning(n_components,
                              transform_algorithm="lars",
                              random_state=0,
                              positive_code=True,
                              fit_algorithm="cd").fit(X)

    err_msg = "Positive constraint not supported for '{}' coding method."
    err_msg = err_msg.format("lars")
    with pytest.raises(ValueError, match=err_msg):
        dico.transform(X)
Ejemplo n.º 4
0
def test_dict_learning_lassocd_readonly_data():
    n_components = 12
    with TempMemmap(X) as X_read_only:
        dico = DictionaryLearning(n_components,
                                  transform_algorithm='lasso_cd',
                                  transform_alpha=0.001,
                                  random_state=0,
                                  n_jobs=4)
        with ignore_warnings(category=ConvergenceWarning):
            code = dico.fit(X_read_only).transform(X_read_only)
        assert_array_almost_equal(np.dot(code, dico.components_),
                                  X_read_only,
                                  decimal=2)
Ejemplo n.º 5
0
def test_dict_learning_positivity(transform_algorithm, positive_code,
                                  positive_dict):
    n_components = 5
    dico = DictionaryLearning(n_components,
                              transform_algorithm=transform_algorithm,
                              random_state=0,
                              positive_code=positive_code,
                              positive_dict=positive_dict,
                              fit_algorithm="cd").fit(X)

    code = dico.transform(X)
    if positive_dict:
        assert (dico.components_ >= 0).all()
    else:
        assert (dico.components_ < 0).any()
    if positive_code:
        assert (code >= 0).all()
    else:
        assert (code < 0).any()
Ejemplo n.º 6
0
def test_dict_learning_lars_dict_positivity(positive_dict):
    n_components = 5
    dico = DictionaryLearning(n_components,
                              transform_algorithm="lars",
                              random_state=0,
                              positive_dict=positive_dict,
                              fit_algorithm="cd").fit(X)

    if positive_dict:
        assert (dico.components_ >= 0).all()
    else:
        assert (dico.components_ < 0).any()
Ejemplo n.º 7
0
def test_dict_learning_nonzero_coefs():
    n_components = 4
    dico = DictionaryLearning(n_components,
                              transform_algorithm='lars',
                              transform_n_nonzero_coefs=3,
                              random_state=0)
    code = dico.fit(X).transform(X[np.newaxis, 1])
    assert len(np.flatnonzero(code)) == 3

    dico.set_params(transform_algorithm='omp')
    code = dico.transform(X[np.newaxis, 1])
    assert len(np.flatnonzero(code)) == 3
Ejemplo n.º 8
0
def test_dict_learning_reconstruction():
    n_components = 12
    dico = DictionaryLearning(n_components,
                              transform_algorithm='omp',
                              transform_alpha=0.001,
                              random_state=0)
    code = dico.fit(X).transform(X)
    assert_array_almost_equal(np.dot(code, dico.components_), X)

    dico.set_params(transform_algorithm='lasso_lars')
    code = dico.transform(X)
    assert_array_almost_equal(np.dot(code, dico.components_), X, decimal=2)
Ejemplo n.º 9
0
def test_dict_learning_reconstruction_parallel():
    # regression test that parallel reconstruction works with n_jobs>1
    n_components = 12
    dico = DictionaryLearning(n_components,
                              transform_algorithm='omp',
                              transform_alpha=0.001,
                              random_state=0,
                              n_jobs=4)
    code = dico.fit(X).transform(X)
    assert_array_almost_equal(np.dot(code, dico.components_), X)

    dico.set_params(transform_algorithm='lasso_lars')
    code = dico.transform(X)
    assert_array_almost_equal(np.dot(code, dico.components_), X, decimal=2)
Ejemplo n.º 10
0
def test_dict_learning_overcomplete():
    n_components = 12
    dico = DictionaryLearning(n_components, random_state=0).fit(X)
    assert dico.components_.shape == (n_components, n_features)
Ejemplo n.º 11
0
def test_dict_learning_unknown_fit_algorithm():
    n_components = 5
    dico = DictionaryLearning(n_components, fit_algorithm='<unknown>')
    with pytest.raises(ValueError):
        dico.fit(X)