UMAP-JS
这是一个基于Python实现(https://github.com/lmcinnes/umap)的JavaScript重新实现的UMAP。
统一流形近似和投影(UMAP)是一种降维技术,可以用于类似t-SNE的可视化,也可用于一般的非线性降维。
Python实现和JS移植版本之间有一些重要的区别:
- 优化步骤使用随机嵌入而非谱嵌入作为种子。这对较小的数据集给出了可比较的结果。谱嵌入计算依赖于在JS中难以高效完成的特征值/特征向量计算。
- 没有针对角度距离或稀疏数据表示的专门功能。
使用方法
安装
yarn add umap-js
同步拟合
import { UMAP } from 'umap-js';
const umap = new UMAP();
const embedding = umap.fit(data);
异步拟合
import { UMAP } from 'umap-js';
const umap = new UMAP();
const embedding = await umap.fitAsync(data, epochNumber => {
// 检查进度并给予用户反馈,或返回 `false` 以停止
});
逐步拟合
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();
使用标签进行监督投影
import { UMAP } from 'umap-js';
const umap = new UMAP();
umap.setSupervisedProjection(labels);
const embedding = umap.fit(data);
拟合后转换额外的点
import { UMAP } from 'umap-js';
const umap = new UMAP();
umap.fit(data);
const transformed = umap.transform(additionalData);
参数
UMAP构造函数可以通过UMAPParameters
对象接受多个超参数,下面描述了最常见的参数。更多详情请参见umap.ts。
参数 | 描述 | 默认值 |
---|---|---|
nComponents | 将数据投影到的组件(维度)数量 | 2 |
nEpochs | 通过SGD优化嵌入的轮数 | (自动计算) |
nNeighbors | 构建模糊流形的最近邻数量 | 15 |
minDist | 嵌入点之间的有效最小距离,与spread 一起控制嵌入的聚集/分散性质 | 0.1 |
spread | 嵌入点的有效比例,与minDist 一起控制嵌入的聚集/分散性质 | 1.0 |
random | 用于控制随机过程的伪随机数生成器 | Math.random |
distanceFn | 要使用的自定义距离函数 | euclidean |
const umap = new UMAP({
nComponents: 2,
nEpochs: 400,
nNeighbors: 15,
});
测试
umap-js
使用jest
进行测试。
yarn test
这不是 Google 官方支持的产品