UNPKG

@aidanconnelly/tsnejs

Version:

t-SNE visualization algorithm

141 lines (87 loc) 3.21 kB
# tSNEJS tSNEJS is an implementation of t-SNE visualization algorithm in Javascript. t-SNE is a visualization algorithm that embeds things in 2 or 3 dimensions. If you have some data and you can measure their pairwise differences, t-SNE visualization can help you identify clusters in your data. ## Online demo The main project website has a [live example](http://cs.stanford.edu/people/karpathy/tsnejs/) and more description. There is also the [t-SNE CSV demo](http://cs.stanford.edu/people/karpathy/tsnejs/csvdemo.html) that allows you to simply paste CSV data into a textbox and tSNEJS computes and visualizes the embedding on the fly (no coding needed). ## Research Paper The algorithm was originally described in this paper: L.J.P. van der Maaten and G.E. Hinton. Visualizing High-Dimensional Data Using t-SNE. Journal of Machine Learning Research 9(Nov):2579-2605, 2008. You can find the PDF [here](http://jmlr.csail.mit.edu/papers/volume9/vandermaaten08a/vandermaaten08a.pdf). ## Example ```shell npm --save i @jwalsh/tsnejs ``` ```javascript import * as tsnejs from '@jwalsh/tsnejs'; const opt = { epsilon: 10, // epsilon is learning rate (10 = default) perplexity: 30, // roughly how many neighbors each point influences (30 = default) dim: 2 // dimensionality of the embedding (2 = default) }; const tsne = new tsnejs.tSNE(opt); // create a tSNE instance // initialize data. Here we have 3 points and some example pairwise dissimilarities const dists = [[1.0, 0.1, 0.2], [0.1, 1.0, 0.3], [0.2, 0.1, 1.0]]; tsne.initDataDist(dists); // every time you call this, solution gets better [...Array(500)].forEach((_, i) => tsne.step()); const Y = tsne.getSolution(); // Y is an array of 2-D points that you can plot ``` The data can be passed to tSNEJS as a set of high-dimensional points using the `tsne.initDataRaw(X)` function, where X is an array of arrays (high-dimensional points that need to be embedded). The algorithm computes the Gaussian kernel over these points and then finds the appropriate embedding. ## API <!-- Generated by documentation.js. Update this documentation by updating the source code. --> ### getopt syntax sugar **Parameters** - `opt` - `field` - `defaultval` ### return_v return 0 mean unit standard deviation random number ### randn return random normal number ### zeros utilitity that creates contiguous vector of zeros of size n **Parameters** - `n` ### randn2d utility that returns 2d array filled with random numbers or with value s, if provided ### L2 compute L2 distance between two vectors ### xtod compute pairwise distance in all vectors in X ### d2p compute (p_{i|j} + p_{j|i})/(2n) ### sign helper function **Parameters** - `x` ### tSNE t-SNE visualization algorithm ## Web Demos There are two web interfaces to this library that we are aware of: - By Andrej, [here](http://cs.stanford.edu/people/karpathy/tsnejs/csvdemo.html). - By Laurens, [here](http://homepage.tudelft.nl/19j49/tsnejs/), which takes data in different format and can also use Google Spreadsheet input. ## About Send questions to [@karpathy](https://twitter.com/karpathy). ## License MIT