Source code for stream2.tools._dimension_reduction

"""UMAP (Uniform Manifold Approximation and Projection)"""

import umap as umap_learn
from sklearn.manifold import (
    LocallyLinearEmbedding,
    Isomap,
    TSNE,
    SpectralEmbedding,
)


[docs] def dimension_reduction( adata, n_neighbors=15, n_components=2, random_state=2020, layer=None, obsm=None, n_dim=None, method="umap", eigen_solver="auto", **kwargs, ): """perform dimension reduction Parameters ---------- adata: AnnData Annotated data matrix. method: `str`, optional (default: 'umap') Choose from {{'umap','se','mlle','tsne','isomap'}} Method used for dimension reduction. 'umap': Uniform Manifold Approximation and Projection 'se': Spectral embedding algorithm 'mlle': Modified locally linear embedding algorithm 'tsne': T-distributed Stochastic Neighbor Embedding 'isomap': Isomap Embedding Returns ------- updates `adata` with the following fields: `.obsm['X_umap']` : `numpy.ndarray` UMAP coordinates of samples. """ if sum(list(map(lambda x: x is not None, [layer, obsm]))) == 2: raise ValueError("Only one of `layer` and `obsm` can be used") elif obsm is not None: X = adata.obsm[obsm] elif layer is not None: X = adata.layers[layer] else: X = adata.X if n_dim is not None: X = X[:, :n_dim] if method == "umap": reducer = umap_learn.UMAP( n_neighbors=n_neighbors, n_components=n_components, random_state=random_state, **kwargs, ) elif method == "se": reducer = SpectralEmbedding( n_neighbors=n_neighbors, n_components=n_components, random_state=random_state, **kwargs, ) elif method == "mlle": reducer = LocallyLinearEmbedding( n_neighbors=n_neighbors, n_components=n_components, eigen_solver=eigen_solver, random_state=random_state, **kwargs, ) elif method == "tsne": reducer = TSNE( n_components=n_components, random_state=random_state, **kwargs, ) elif method == "isomap": reducer = Isomap( n_neighbors=n_neighbors, n_components=n_components, eigen_solver=eigen_solver, **kwargs, ) reducer.fit(X) adata.obsm["X_dr"] = reducer.embedding_