Dictionary learning
Finds a dictionary (a set of atoms) that can best be used to represent data using a sparse code.
Solves the optimization problem::
(U^*,V^* ) = argmin 0.5 || Y - U V ||_2^2 + alpha * || U ||_1 (U,V) with || V_k ||_2 = 1 for all 0 <= k < n_components
Read more in the :ref:`User Guide <DictionaryLearning>`.
Parameters ---------- n_components : int, default=n_features number of dictionary elements to extract
alpha : float, default=1.0 sparsity controlling parameter
max_iter : int, default=1000 maximum number of iterations to perform
tol : float, default=1e-8 tolerance for numerical error
fit_algorithm : 'lars', 'cd'
, default='lars' lars: uses the least angle regression method to solve the lasso problem (linear_model.lars_path) cd: uses the coordinate descent method to compute the Lasso solution (linear_model.Lasso). Lars will be faster if the estimated components are sparse.
.. versionadded:: 0.17 *cd* coordinate descent method to improve speed.
transform_algorithm : 'lasso_lars', 'lasso_cd', 'lars', 'omp', 'threshold'
, default='omp' Algorithm used to transform the data lars: uses the least angle regression method (linear_model.lars_path) lasso_lars: uses Lars to compute the Lasso solution lasso_cd: uses the coordinate descent method to compute the Lasso solution (linear_model.Lasso). lasso_lars will be faster if the estimated components are sparse. omp: uses orthogonal matching pursuit to estimate the sparse solution threshold: squashes to zero all coefficients less than alpha from the projection ``dictionary * X'``
.. versionadded:: 0.17 *lasso_cd* coordinate descent method to improve speed.
transform_n_nonzero_coefs : int, default=0.1*n_features Number of nonzero coefficients to target in each column of the solution. This is only used by `algorithm='lars'` and `algorithm='omp'` and is overridden by `alpha` in the `omp` case.
transform_alpha : float, default=1.0 If `algorithm='lasso_lars'` or `algorithm='lasso_cd'`, `alpha` is the penalty applied to the L1 norm. If `algorithm='threshold'`, `alpha` is the absolute value of the threshold below which coefficients will be squashed to zero. If `algorithm='omp'`, `alpha` is the tolerance parameter: the value of the reconstruction error targeted. In this case, it overrides `n_nonzero_coefs`.
n_jobs : int or None, default=None Number of parallel jobs to run. ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context. ``-1`` means using all processors. See :term:`Glossary <n_jobs>` for more details.
code_init : array of shape (n_samples, n_components), default=None initial value for the code, for warm restart
dict_init : array of shape (n_components, n_features), default=None initial values for the dictionary, for warm restart
verbose : bool, default=False To control the verbosity of the procedure.
split_sign : bool, default=False Whether to split the sparse feature vector into the concatenation of its negative part and its positive part. This can improve the performance of downstream classifiers.
random_state : int, RandomState instance or None, default=None If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by `np.random`.
positive_code : bool, default=False Whether to enforce positivity when finding the code.
.. versionadded:: 0.20
positive_dict : bool, default=False Whether to enforce positivity when finding the dictionary
.. versionadded:: 0.20
transform_max_iter : int, default=1000 Maximum number of iterations to perform if `algorithm='lasso_cd'` or `lasso_lars`.
.. versionadded:: 0.22
Attributes ---------- components_ : array, n_components, n_features
dictionary atoms extracted from the data
error_ : array vector of errors at each iteration
n_iter_ : int Number of iterations run.
Notes ----- **References:**
J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009: Online dictionary learning for sparse coding (https://www.di.ens.fr/sierra/pdfs/icml09.pdf)
See also -------- SparseCoder MiniBatchDictionaryLearning SparsePCA MiniBatchSparsePCA