class_docstr: Mini-batch dictionary learning.
  
  Finds a dictionary (a set of atoms) that performs well at sparsely
  encoding the fitted data.
  
  Solves the optimization problem::
  
     (U^*,V^*) = argmin 0.5 || X - U V ||_Fro^2 + alpha * || U ||_1,1
                  (U,V)
                  with || V_k ||_2 <= 1 for all  0 <= k < n_components
  
  ||.||_Fro stands for the Frobenius norm and ||.||_1,1 stands for
  the entry-wise matrix norm which is the sum of the absolute values
  of all the entries in the matrix.
  
  Read more in the :ref:`User Guide <DictionaryLearning>`.
  
  Parameters
  ----------
  n_components : int, default=None
      Number of dictionary elements to extract.
  
  alpha : float, default=1
      Sparsity controlling parameter.
  
  n_iter : int, default=1000
      Total number of iterations over data batches to perform.
  
      .. deprecated:: 1.1
         ``n_iter`` is deprecated in 1.1 and will be removed in 1.4. Use
         ``max_iter`` instead.
  
  max_iter : int, default=None
      Maximum number of iterations over the complete dataset before
      stopping independently of any early stopping criterion heuristics.
      If ``max_iter`` is not None, ``n_iter`` is ignored.
  
      .. versionadded:: 1.1
  
  fit_algorithm : {'lars', 'cd'}, default='lars'
      The algorithm used:
  
      - `'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.
  
  n_jobs : int, 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.
  
  batch_size : int, default=256
      Number of samples in each mini-batch.
  
      .. versionchanged:: 1.3
         The default value of `batch_size` changed from 3 to 256 in version 1.3.
  
  shuffle : bool, default=True
      Whether to shuffle the samples before forming batches.
  
  dict_init : ndarray of shape (n_components, n_features), default=None
      Initial value of the dictionary for warm restart scenarios.
  
  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'``.
  
  transform_n_nonzero_coefs : int, default=None
      Number of nonzero coefficients to target in each column of the
      solution. This is only used by `algorithm='lars'` and
      `algorithm='omp'`. If `None`, then
      `transform_n_nonzero_coefs=int(n_features / 10)`.
  
  transform_alpha : float, default=None
      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 `None`, defaults to `alpha`.
  
      .. versionchanged:: 1.2
          When None, default value changed from 1.0 to `alpha`.
  
  verbose : bool or int, 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
      Used for initializing the dictionary when ``dict_init`` is not
      specified, randomly shuffling the data when ``shuffle`` is set to
      ``True``, and updating the dictionary. Pass an int for reproducible
      results across multiple function calls.
      See :term:`Glossary <random_state>`.
  
  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
  
  callback : callable, default=None
      A callable that gets invoked at the end of each iteration.
  
      .. versionadded:: 1.1
  
  tol : float, default=1e-3
      Control early stopping based on the norm of the differences in the
      dictionary between 2 steps. Used only if `max_iter` is not None.
  
      To disable early stopping based on changes in the dictionary, set
      `tol` to 0.0.
  
      .. versionadded:: 1.1
  
  max_no_improvement : int, default=10
      Control early stopping based on the consecutive number of mini batches
      that does not yield an improvement on the smoothed cost function. Used only if
      `max_iter` is not None.
  
      To disable convergence detection based on cost function, set
      `max_no_improvement` to None.
  
      .. versionadded:: 1.1
  
  Attributes
  ----------
  components_ : ndarray of shape (n_components, n_features)
      Components extracted from the data.
  
  n_features_in_ : int
      Number of features seen during :term:`fit`.
  
      .. versionadded:: 0.24
  
  feature_names_in_ : ndarray of shape (`n_features_in_`,)
      Names of features seen during :term:`fit`. Defined only when `X`
      has feature names that are all strings.
  
      .. versionadded:: 1.0
  
  n_iter_ : int
      Number of iterations over the full dataset.
  
  n_steps_ : int
      Number of mini-batches processed.
  
      .. versionadded:: 1.1
  
  See Also
  --------
  DictionaryLearning : Find a dictionary that sparsely encodes data.
  MiniBatchSparsePCA : Mini-batch Sparse Principal Components Analysis.
  SparseCoder : Find a sparse representation of data from a fixed,
      precomputed dictionary.
  SparsePCA : Sparse Principal Components Analysis.
  
  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)
  
  Examples
  --------
  >>> import numpy as np
  >>> from sklearn.datasets import make_sparse_coded_signal
  >>> from sklearn.decomposition import MiniBatchDictionaryLearning
  >>> X, dictionary, code = make_sparse_coded_signal(
  ...     n_samples=30, n_components=15, n_features=20, n_nonzero_coefs=10,
  ...     random_state=42)
  >>> dict_learner = MiniBatchDictionaryLearning(
  ...     n_components=15, batch_size=3, transform_algorithm='lasso_lars',
  ...     transform_alpha=0.1, max_iter=20, random_state=42)
  >>> X_transformed = dict_learner.fit_transform(X)
  
  We can check the level of sparsity of `X_transformed`:
  
  >>> np.mean(X_transformed == 0) > 0.5
  True
  
  We can compare the average squared euclidean norm of the reconstruction
  error of the sparse coded signal relative to the squared euclidean norm of
  the original signal:
  
  >>> X_hat = X_transformed @ dict_learner.components_
  >>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1))
  0.052...
class_docstr_tok: ["Mini-batch","dictionary","learning",".","Finds","a","dictionary","(","a","set","of","atoms",")","that","performs","well","at","sparsely","encoding","the","fitted","data",".","Solves","the","optimization","problem",":",":","(","U^","*",",","V^","*",")","=","argmin","0.5","||","X","-","U","V","||_Fro^2","+","alpha","*","||","U","||_1,1","(","U",",","V",")","with","||","V_k","||_2","<","=","1","for","all","0","<","=","k","<","n_components","||.||_Fro","stands","for","the","Frobenius","norm","and","||.||_1,1","stands","for","the","entry-wise","matrix","norm","which","is","the","sum","of","the","absolute","values","of","all","the","entries","in","the","matrix",".","Read","more","in","the",":","ref",":","`","User","Guide","<","DictionaryLearning",">","`",".","Parameters","--","--","--","--","--","n_components",":","int",",","default=None","Number","of","dictionary","elements","to","extract",".","alpha",":","float",",","default=1","Sparsity","controlling","parameter",".","n_iter",":","int",",","default=1000","Total","number","of","iterations","over","data","batches","to","perform",".","..","deprecated",":",":","1.1","``","n_iter","``","is","deprecated","in","1.1","and","will","be","removed","in","1.4",".","Use","``","max_iter","``","instead",".","max_iter",":","int",",","default=None","Maximum","number","of","iterations","over","the","complete","dataset","before","stopping","independently","of","any","early","stopping","criterion","heuristics",".","If","``","max_iter","``","is","not","None",",","``","n_iter","``","is","ignored",".","..","versionadded",":",":","1.1","fit_algorithm",":","{","'lars","'",",","'cd","'","}",",","default='lars'","The","algorithm","used",":","-","`","'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",".","n_jobs",":","int",",","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",".","batch_size",":","int",",","default=256","Number","of","samples","in","each","mini-batch",".","..","versionchanged",":",":","1.3","The","default","value","of","`","batch_size","`","changed","from","3","to","256","in","version","1.3.","shuffle",":","bool",",","default=True","Whether","to","shuffle","the","samples","before","forming","batches",".","dict_init",":","ndarray","of","shape","(","n_components",",","n_features",")",",","default=None","Initial","value","of","the","dictionary","for","warm","restart","scenarios",".","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","'","``",".","transform_n_nonzero_coefs",":","int",",","default=None","Number","of","nonzero","coefficients","to","target","in","each","column","of","the","solution",".","This","is","only","used","by","`","algorithm='lars","'","`","and","`","algorithm='omp","'","`",".","If","`","None","`",",","then","`","transform_n_nonzero_coefs=int","(","n_features","\/","10",")","`",".","transform_alpha",":","float",",","default=None","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","`","None","`",",","defaults","to","`","alpha","`",".","..","versionchanged",":",":","1.2","When","None",",","default","value","changed","from","1.0","to","`","alpha","`",".","verbose",":","bool","or","int",",","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","Used","for","initializing","the","dictionary","when","``","dict_init","``","is","not","specified",",","randomly","shuffling","the","data","when","``","shuffle","``","is","set","to","``","True","``",",","and","updating","the","dictionary",".","Pass","an","int","for","reproducible","results","across","multiple","function","calls",".","See",":","term",":","`","Glossary","<","random_state",">","`",".","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","callback",":","callable",",","default=None","A","callable","that","gets","invoked","at","the","end","of","each","iteration",".","..","versionadded",":",":","1.1","tol",":","float",",","default=1e-3","Control","early","stopping","based","on","the","norm","of","the","differences","in","the","dictionary","between","2","steps",".","Used","only","if","`","max_iter","`","is","not","None",".","To","disable","early","stopping","based","on","changes","in","the","dictionary",",","set","`","tol","`","to","0.0",".","..","versionadded",":",":","1.1","max_no_improvement",":","int",",","default=10","Control","early","stopping","based","on","the","consecutive","number","of","mini","batches","that","does","not","yield","an","improvement","on","the","smoothed","cost","function",".","Used","only","if","`","max_iter","`","is","not","None",".","To","disable","convergence","detection","based","on","cost","function",",","set","`","max_no_improvement","`","to","None",".","..","versionadded",":",":","1.1","Attributes","--","--","--","--","--","components_",":","ndarray","of","shape","(","n_components",",","n_features",")","Components","extracted","from","the","data",".","n_features_in_",":","int","Number","of","features","seen","during",":","term",":","`","fit","`",".","..","versionadded",":",":","0.24","feature_names_in_",":","ndarray","of","shape","(","`","n_features_in_","`",",",")","Names","of","features","seen","during",":","term",":","`","fit","`",".","Defined","only","when","`","X","`","has","feature","names","that","are","all","strings",".","..","versionadded",":",":","1.0","n_iter_",":","int","Number","of","iterations","over","the","full","dataset",".","n_steps_",":","int","Number","of","mini-batches","processed",".","..","versionadded",":",":","1.1","See","Also","--","--","--","--","DictionaryLearning",":","Find","a","dictionary","that","sparsely","encodes","data",".","MiniBatchSparsePCA",":","Mini-batch","Sparse","Principal","Components","Analysis",".","SparseCoder",":","Find","a","sparse","representation","of","data","from","a","fixed",",","precomputed","dictionary",".","SparsePCA",":","Sparse","Principal","Components","Analysis",".","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",")","Examples","--","--","--","--",">",">",">","import","numpy","as","np",">",">",">","from","sklearn.datasets","import","make_sparse_coded_signal",">",">",">","from","sklearn.decomposition","import","MiniBatchDictionaryLearning",">",">",">","X",",","dictionary",",","code","=","make_sparse_coded_signal","(","...","n_samples=30",",","n_components=15",",","n_features=20",",","n_nonzero_coefs=10",",","...","random_state=42",")",">",">",">","dict_learner","=","MiniBatchDictionaryLearning","(","...","n_components=15",",","batch_size=3",",","transform_algorithm='lasso_lars","'",",","...","transform_alpha=0.1",",","max_iter=20",",","random_state=42",")",">",">",">","X_transformed","=","dict_learner.fit_transform","(","X",")","We","can","check","the","level","of","sparsity","of","`","X_transformed","`",":",">",">",">","np.mean","(","X_transformed","==","0",")",">","0.5","True","We","can","compare","the","average","squared","euclidean","norm","of","the","reconstruction","error","of","the","sparse","coded","signal","relative","to","the","squared","euclidean","norm","of","the","original","signal",":",">",">",">","X_hat","=","X_transformed","@","dict_learner.components_",">",">",">","np.mean","(","np.sum","(","(","X_hat","-","X",")","*","*","2",",","axis=1",")","\/","np.sum","(","X","*","*","2",",","axis=1",")",")","0.052","..."]
code: def __init__(
      self,
      n_components=None,
      *,
      alpha=1,
      n_iter="deprecated",
      max_iter=None,
      fit_algorithm="lars",
      n_jobs=None,
      batch_size=256,
      shuffle=True,
      dict_init=None,
      transform_algorithm="omp",
      transform_n_nonzero_coefs=None,
      transform_alpha=None,
      verbose=False,
      split_sign=False,
      random_state=None,
      positive_code=False,
      positive_dict=False,
      transform_max_iter=1000,
      callback=None,
      tol=1e-3,
      max_no_improvement=10,
  ):
      super().__init__(
          transform_algorithm,
          transform_n_nonzero_coefs,
          transform_alpha,
          split_sign,
          n_jobs,
          positive_code,
          transform_max_iter,
      )
      self.n_components = n_components
      self.alpha = alpha
      self.n_iter = n_iter
      self.max_iter = max_iter
      self.fit_algorithm = fit_algorithm
      self.dict_init = dict_init
      self.verbose = verbose
      self.shuffle = shuffle
      self.batch_size = batch_size
      self.split_sign = split_sign
      self.random_state = random_state
      self.positive_dict = positive_dict
      self.callback = callback
      self.max_no_improvement = max_no_improvement
      self.tol = tol
  
imports: import itertools
  import sys
  import time
  import warnings
  from math import ceil
  from numbers import Integral, Real
  import numpy
  from joblib import effective_n_jobs
  from scipy import linalg
  from ..base import BaseEstimator, ClassNamePrefixFeaturesOutMixin, TransformerMixin, _fit_context
  from ..linear_model import Lars, Lasso, LassoLars, orthogonal_mp_gram
  from ..utils import check_array, check_random_state, gen_batches, gen_even_slices
  from ..utils._param_validation import Hidden, Interval, StrOptions, validate_params
  from ..utils.extmath import randomized_svd, row_norms, svd_flip
  from ..utils.parallel import Parallel, delayed
  from ..utils.validation import check_is_fitted
label_desc: Use image node_id 1 to create a new MiniBatchDictionaryLearning object from inherited base classes: _BaseSparseCoding, BaseEstimator with example: obj = MiniBatchDictionaryLearning(n_components)