diff --git a/doc/modules/classes.rst b/doc/modules/classes.rst index 61b17a5a12ab290ba16c8a80ccb383d9317b5e9b..88088ff6e713fa7c7d62bf2d29d851d0471adacc 100644 --- a/doc/modules/classes.rst +++ b/doc/modules/classes.rst @@ -390,6 +390,8 @@ Signal Decomposition decomposition.fastica decomposition.dict_learning decomposition.dict_learning_online + decomposition.sparse_encode + decomposition.sparse_encode_parallel Linear Discriminant Analysis diff --git a/doc/modules/decomposition.rst b/doc/modules/decomposition.rst index ed00de58f4bddafc88ee11930e6592509971925b..9565426ad6f19863acaeb24213f692ffb35f86dc 100644 --- a/doc/modules/decomposition.rst +++ b/doc/modules/decomposition.rst @@ -263,6 +263,18 @@ dictionary fixed, and then updating the dictionary to best fit the sparse code. \text{subject to\,} & ||V_k||_2 = 1 \text{ for all } 0 \leq k < n_{atoms} + +.. |pca_img| image:: ../auto_examples/decomposition/images/plot_faces_decomposition_2.png + :target: ../auto_examples/decomposition/plot_faces_decomposition.html + :scale: 60% + +.. |dict_img| image:: ../auto_examples/decomposition/images/plot_faces_decomposition_6.png + :target: ../auto_examples/decomposition/plot_faces_decomposition.html + :scale: 60% + +.. centered:: |pca_img| |dict_img| + + After using such a procedure to fit the dictionary, the fitted object can be used to transform new data. The transformation amounts to a sparse coding problem: finding a representation of the data as a linear combination of as few @@ -310,12 +322,6 @@ extracted from part of the image of Lena looks like. :scale: 50% -.. figure:: ../auto_examples/decomposition/images/plot_faces_decomposition_6.png - :target: ../auto_examples/decomposition/plot_faces_decomposition.html - :align: center - :scale: 50% - - .. topic:: Examples: * :ref:`example_decomposition_plot_image_denoising.py` diff --git a/sklearn/decomposition/__init__.py b/sklearn/decomposition/__init__.py index 748832041db71068999a6b3374e6bdb18593c401..63c0bb1bc3bb59c763a58fea6cfb4cc99cebbc6a 100644 --- a/sklearn/decomposition/__init__.py +++ b/sklearn/decomposition/__init__.py @@ -8,4 +8,5 @@ from .kernel_pca import KernelPCA from .sparse_pca import SparsePCA, MiniBatchSparsePCA from .fastica_ import FastICA, fastica from .dict_learning import dict_learning, dict_learning_online, \ - DictionaryLearning, MiniBatchDictionaryLearning + DictionaryLearning, MiniBatchDictionaryLearning, \ + sparse_encode, sparse_encode_parallel diff --git a/sklearn/decomposition/dict_learning.py b/sklearn/decomposition/dict_learning.py index b8e74087b68daf0741486602856079e21a6ee73f..a4e71dda33cd356d8cdd332bcfa808b9c12423ba 100644 --- a/sklearn/decomposition/dict_learning.py +++ b/sklearn/decomposition/dict_learning.py @@ -80,6 +80,12 @@ def sparse_encode(X, Y, gram=None, cov=None, algorithm='lasso_lars', ------- code: array of shape (n_components, n_features) The sparse codes + + See also + -------- + linear_model.lars_path + linear_model.orthogonal_mp + linear_model.Lasso """ alpha = float(alpha) if alpha is not None else None X, Y = map(np.asanyarray, (X, Y)) @@ -223,6 +229,12 @@ def sparse_encode_parallel(X, Y, gram=None, cov=None, algorithm='lasso_lars', ------- code: array of shape (n_components, n_features) The sparse codes + + See also + -------- + linear_model.lars_path + linear_model.orthogonal_mp + linear_model.Lasso """ n_samples, n_features = Y.shape n_components = X.shape[1] diff --git a/sklearn/linear_model/coordinate_descent.py b/sklearn/linear_model/coordinate_descent.py index 6a19bdb97bf7fa81acb3e78d11703233cf52993e..b124c955136671cc4e1d9fea7577412517656479 100644 --- a/sklearn/linear_model/coordinate_descent.py +++ b/sklearn/linear_model/coordinate_descent.py @@ -240,6 +240,8 @@ class Lasso(ElasticNet): See also -------- LassoLars + decomposition.sparse_encode + decomposition.sparse_encode_parallel Notes ----- diff --git a/sklearn/linear_model/least_angle.py b/sklearn/linear_model/least_angle.py index 1d135a62b571321879061807183b99514d741810..6b79659d2da7490f59e08b8e180f1789f10891ce 100644 --- a/sklearn/linear_model/least_angle.py +++ b/sklearn/linear_model/least_angle.py @@ -69,7 +69,10 @@ def lars_path(X, y, Xy=None, Gram=None, max_iter=500, See also -------- - :ref:`LassoLars`, :ref:`Lars` + :ref:`LassoLars` + :ref:`Lars` + decomposition.sparse_encode + decomposition.sparse_encode_parallel Notes ------ @@ -358,6 +361,7 @@ class Lars(LinearModel): See also -------- lars_path, LassoLARS, LarsCV, LassoLarsCV + decomposition.sparse_encode, decomposition.sparse_encode_parallel """ def __init__(self, fit_intercept=True, verbose=False, normalize=True, precompute='auto', n_nonzero_coefs=500, diff --git a/sklearn/linear_model/omp.py b/sklearn/linear_model/omp.py index 81b4f38ed8582e6c71e22747dab6d0c1f62d9fa2..7c7a84c73e7e55dc1124985958032163da4f48f4 100644 --- a/sklearn/linear_model/omp.py +++ b/sklearn/linear_model/omp.py @@ -250,6 +250,8 @@ def orthogonal_mp(X, y, n_nonzero_coefs=None, tol=None, precompute_gram=False, OrthogonalMatchingPursuit orthogonal_mp_gram lars_path + decomposition.sparse_encode + decomposition.sparse_encode_parallel Notes ----- @@ -349,6 +351,8 @@ def orthogonal_mp_gram(Gram, Xy, n_nonzero_coefs=None, tol=None, OrthogonalMatchingPursuit orthogonal_mp lars_path + decomposition.sparse_encode + decomposition.sparse_encode_parallel Notes ----- @@ -459,6 +463,8 @@ class OrthogonalMatchingPursuit(LinearModel): lars_path Lars LassoLars + decomposition.sparse_encode + decomposition.sparse_encode_parallel """ def __init__(self, overwrite_X=False, overwrite_gram=False,