umap-js: 高效的JavaScript实现UMAP算法
umap-js是一个JavaScript实现的UMAP (Uniform Manifold Approximation and Projection)算法库。UMAP是一种流行的降维和数据可视化技术,可以将高维数据映射到低维空间,同时保留数据的全局结构。umap-js基于Python版本的UMAP重新实现,为JavaScript开发者提供了高效的UMAP算法工具。
主要特性
- 提供与Python版本相当的功能,支持降维和可视化
- 针对JavaScript环境进行了优化,运行速度快
- 支持同步和异步API,灵活易用
- 可自定义参数,如降维后的维度、邻居数等
- 支持监督投影,可利用标签信息
- 支持增量转换新数据点
安装使用
通过npm安装:
npm install umap-js
或者yarn:
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
对象来设置超参数,主要包括:
参数 | 描述 | 默认值 |
---|---|---|
nComponents | 降维后的维度 | 2 |
nEpochs | SGD优化的轮数 | (自动计算) |
nNeighbors | 构建模糊流形的近邻数 | 15 |
minDist | 嵌入点之间的有效最小距离 | 0.1 |
spread | 嵌入点的有效尺度 | 1.0 |
random | 用于控制随机过程的伪随机数生成器 | Math.random |
distanceFn | 自定义距离函数 | euclidean |
示例:
const umap = new UMAP({
nComponents: 2,
nEpochs: 400,
nNeighbors: 15,
});
与Python版本的区别
虽然umap-js提供了与Python版本相似的功能,但也有一些重要的区别:
-
优化步骤使用随机嵌入而不是谱嵌入作为初始值。这对小型数据集产生类似的结果,但避免了在JavaScript中难以高效实现的特征值/特征向量计算。
-
不支持角度距离和稀疏数据表示的专门功能。
性能和应用
umap-js在JavaScript环境中表现出色,可以高效地处理中等规模的数据集。它适用于各种数据可视化和降维任务,如:
- 探索性数据分析
- 特征提取
- 聚类可视化
- 非线性降维
在实际应用中,umap-js可以与其他JavaScript数据处理和可视化库(如D3.js)结合使用,创建交互式的数据可视化应用。
测试
umap-js使用Jest进行测试。要运行测试,请执行:
yarn test
贡献
欢迎对umap-js项目做出贡献!如果你发现了bug或有改进建议,请在GitHub上提交issue或pull request。在贡献之前,请先阅读项目的CONTRIBUTING.md文件。
许可证
umap-js采用Apache-2.0许可证。详细信息请参阅LICENSE文件。
结语
umap-js为JavaScript开发者提供了一个强大的UMAP算法实现,使得在Web环境中进行高效的数据降维和可视化成为可能。无论是在数据分析、机器学习还是数据可视化领域,umap-js都是一个值得考虑的工具。通过持续的优化和社区贡献,相信umap-js会在未来变得更加强大和易用。