Skip to content
JavaScript implementation of UMAP
JavaScript TypeScript
Branch: master
Clone or download
Andy Coenen
Andy Coenen Update license
Latest commit e25aa2c Oct 31, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Merged latest master. Jun 7, 2019
src Move guard to initializeFit Jul 30, 2019
test Move guard to initializeFit Jul 30, 2019
webpack Create UMD build and point unpkg and jsdelivr to it Jun 6, 2019
.gitignore Update umap ignore files to properly publish dist folder to npm May 3, 2019
.npmignore Update umap ignore files to properly publish dist folder to npm May 3, 2019
.prettierignore Add findABParams method using mljs-powered curve-fitting Feb 28, 2019
.prettierrc Initial commit Feb 20, 2019
.travis.yml Update test and travis.yml Mar 1, 2019
CONTRIBUTING.md Initial commit Feb 20, 2019
LICENSE Update license Oct 31, 2019
README.md
jest.config.js Update all license headers and LICENSE Apr 10, 2019
package.json Update version Jun 8, 2019
tsconfig.json ah, turn on esModuleInterop to get tests to pass w/LM import change May 21, 2019
yarn.lock Bump mixin-deep from 1.3.1 to 1.3.2 Aug 28, 2019

README.md

Build Status

UMAP-JS

This is a JavaScript reimplementation of UMAP from the python implementation found at https://github.com/lmcinnes/umap.

Uniform Manifold Approximation and Projection (UMAP) is a dimension reduction technique that can be used for visualisation similarly to t-SNE, but also for general non-linear dimension reduction.

There are a few important differences between the python implementation and the JS port.

  • The optimization step is seeded with a random embedding rather than a spectral embedding. This gives comparable results for smaller datasets. The spectral embedding computation relies on efficient eigenvalue / eigenvector computations that are not easily done in JS.
  • There is no specialized functionality for angular distances or sparse data representations.

Usage

Installation

yarn add umap-js

Synchronous fitting

import { UMAP } from 'umap-js';

const umap = new UMAP();
const embedding = umap.fit(data);

Asynchronous fitting

import { UMAP } from 'umap-js';

const umap = new UMAP();
const embedding = await umap.fitAsync(data, epochNumber => {
  // check progress and give user feedback, or return `false` to stop
});

Step-by-step fitting

import { UMAP } from 'umap-js';

const umap = new UMAP();
const nEpochs = umap.initializeFit(data);
for (let i = 0; i < nEpochs; i++) {
  umap.step();
}
const embedding = umap.getEmbedding();

Supervised projection using labels

import { UMAP } from 'umap-js';

const umap = new UMAP();
umap.setSupervisedProjection(labels);
const embedding = umap.fit(data);

Transforming additional points after fitting

import { UMAP } from 'umap-js';

const umap = new UMAP();
umap.fit(data);
const transformed = umap.transform(additionalData);

Parameters

The UMAP constructor can accept a number of hyperparameters via a UMAPParameters object, with the most common described below. See umap.ts for more details.

Parameter Description default
nComponents The number of components (dimensions) to project the data to 2
nEpochs The number of epochs to optimize embeddings via SGD (computed automatically)
nNeighbors The number of nearest neighbors to construct the fuzzy manifold 15
minDist The effective minimum distance between embedded points, used with spread to control the clumped/dispersed nature of the embedding 0.1
spread The effective scale of embedded points, used with minDist to control the clumped/dispersed nature of the embedding 1.0
random A pseudo-random-number generator for controlling stochastic processes Math.random
distanceFn A custom distance function to use euclidean
const umap = new UMAP({
  nComponents: 2,
  nEpochs: 400,
  nNeighbors: 15,
});

Testing

umap-js uses jest for testing.

yarn test

This is not an officially supported Google product

You can’t perform that action at this time.