ction.

Setting density to 1 / 3 will yield the original matrix by Dimitris
Achlioptas while setting a lower value will yield the generalization
by Ping Li et al.

If we note :math:`s = 1 / density`, the components of the random matrix are
drawn from:

  - -sqrt(s) / sqrt(n_components)   with probability 1 / 2s
  -  0                              with probability 1 - 1 / s
  - +sqrt(s) / sqrt(n_components)   with probability 1 / 2s

Read more in the :ref:`User Guide <sparse_random_matrix>`.

Parameters
----------
n_components : int,
    Dimensionality of the target projection space.

n_features : int,
    Dimensionality of the original source space.

density : float or 'auto', default='auto'
    Ratio of non-zero component in the random projection matrix in the
    range `(0, 1]`

    If density = 'auto', the value is set to the minimum density
    as recommended by Ping Li et al.: 1 / sqrt(n_features).

    Use density = 1 / 3.0 if you want to reproduce the results from
    Achlioptas, 2001.

random_state : int, RandomState instance or None, default=None
    Controls the pseudo random number generator used to generate the matrix
    at fit time.
    Pass an int for reproducible output across multiple function calls.
    See :term:`Glossary <random_state>`.

Returns
-------
components : {ndarray, sparse matrix} of shape (n_components, n_features)
    The generated Gaussian random matrix. Sparse matrix will be of CSR
    format.

See Also
--------
SparseRandomProjection

References
----------

.. [1] Ping Li, T. Hastie and K. W. Church, 2006,
       "Very Sparse Random Projections".
       https://web.stanford.edu/~hastie/Papers/Ping/KDD06_rp.pdf

.. [2] D. Achlioptas, 2001, "Database-friendly random projections",
       https://cgi.di.uoa.gr/~optas/papers/jl.pdf

r