一致流形逼近与投影
umap-learn的Python项目详细描述
umap
一致流形逼近与投影(umap)是一种降维方法 与t-sne类似,也可用于可视化的技术 一般非线性降维。算法建立在 关于数据的假设
- 数据在黎曼流形上均匀分布;
- 黎曼度量是局部常数(或可近似为局部常数);
- 歧管在本地连接。 < > >
- n_neighbors :这决定了在 流形结构的局部逼近。较大的值将导致 更多的全球结构在失去详细的本地 结构。一般来说,该参数通常应在5到 50,选择10到15是合理的违约。
- 最小距离 :这控制允许压缩的嵌入程度 点在一起。较大的值确保嵌入点更均匀 分布的,而较小的值允许算法优化更多 准确地考虑到当地的结构。合理的价值观在 范围是0.001到0.5,0.1是合理的默认值。
- 公制 :这决定了用于测量距离的公制的选择 在输入空间中。已经编码了各种各样的度量,并且用户 定义的函数只要被numba jitd,就可以传递。
- 努比
- scipy
- SCIKIT学习
- numba
根据这些假设,可以用模糊 拓扑结构。嵌入是通过搜索低维 具有最接近的等价模糊性的数据的投影 拓扑结构。
基础数学的细节可以在 我们关于arxiv的论文 :
mcinnes,l,healy,j, umap:一致流形逼近与投影 对于尺寸缩减 ,arxiv e-prints 1802.034261018
重要的是你不需要担心这个-你可以使用 立即进行尺寸缩减的umap一滴一滴地想象 取代scikit learn的t-sne。
文档可通过readthedocs获得。
如何使用umap
umap包继承自sklearn类,因此可以方便地插入 与其他具有相同调用API的Sklearn Transformers相邻。
importumapfromsklearn.datasetsimportload_digitsdigits=load_digits()embedding=umap.UMAP().fit_transform(digits.data)
可以为umap类设置多个参数; 主要有以下几点:
< Buff行情>使用这些选项的示例:
importumapfromsklearn.datasetsimportload_digitsdigits=load_digits()embedding=umap.UMAP(n_neighbors=5,min_dist=0.3,metric='correlation').fit_transform(digits.data)
umap还支持对稀疏矩阵数据的拟合。更多细节 请参见umap文档。
umap的好处
umap在当前的版本中有一些重大的胜利。
首先,umap是快的。它可以处理大数据集和高 没有太多困难的维度数据,超出了大多数t-sne 包可以管理。
其次,umap在嵌入维度方面具有很好的可伸缩性,这不仅仅是为了 形象化!可以使用umap作为通用维度缩减 作为其他机器学习任务的初步步骤的技术。用一个 很少有人关心IT与 hdbscan 群集库(用于 有关更多详细信息,请参见使用umap进行群集的 。
第三,umap在保存 数据比t-sne。这意味着它通常可以提供更好的 picture"查看数据并保留本地邻居关系。
第四,umap支持多种距离功能,包括 非度量距离函数,如 余弦距离 和 相关 距离 。你终于可以用余弦距离正确地嵌入字向量了!
第五,umap支持通过 标准的sklearn 转换方法。这意味着umap可以 用作sklearn管道中的预处理转换器。
第六,umap支持有监督和半监督降维。 这意味着,如果您有希望用作 用于降维的额外信息(即使它只是部分的 标签)您可以这样做–就像提供 y 拟合方法中的参数。
最后,umap在流形学习中有着坚实的理论基础。 (见我们关于arxiv的论文)。 这既证明了该方法的合理性,也允许进一步 即将添加到库中的扩展 (嵌入数据帧等)。
性能和示例
umap在嵌入大型高维数据集方面非常有效。在 标准它在输入维和嵌入维上都有很好的伸缩性。 因此,对于诸如784维mnist数字集这样的问题 70000个数据样本,umap可以在大约2.5分钟内完成嵌入(如 与大多数t-sne实现大约45分钟相比)。尽管如此 运行时效率umap仍然可以生成高质量的嵌入。
必需的mnist数字数据集,嵌入在2分钟和22分钟内 使用3.1 GHz Intel Core i7处理器的秒数(n_Neighbors=10,min_Dist=0 001):
UCI穿梭机数据集(8维43500个样本)嵌入在 相关性 2分39秒后的距离(请注意较长的时间 相关距离计算所需):
安装
umap依赖于scikit learn的依赖性。 例如 numpy 和 scipy 。umap为 性能原因。最初的版本使用cython,但是改进后的代码 numba的清晰、简单和性能使它成为必要的过渡。
要求:
安装选项
Conda安装,通过Conda Forge团队的出色工作:
conda install -c conda-forge umap-learn
Conda Forge软件包可用于Linux、OS X和Windows 64位。
pypi安装,假设您有numba和sklearn及其所有需求 (numpy和scipy)已安装:
pip install umap-learn
如果pip在提取依赖项时遇到困难,那么我们建议安装 使用anaconda手动依赖项,然后从pip中提取umap:
conda install numpy scipy conda install scikit-learn conda install numba pip install umap-learn
对于手动安装,请获取此软件包:
wget https://github.com/lmcinnes/umap/archive/master.zip
unzip master.zip
rm master.zip
cd umap-master
安装要求
sudo pip install -r requirements.txt
或
conda install scikit-learn numba
安装软件包
python setup.py install
帮助和支持
有关文档,请访问 阅读文档 。 文档 包含一个常见问题 可以回答你的问题。如果你还有问题请 打开问题 我会尽我所能提供帮助和指导。
引文
如果你把这个软件用于你的工作,我们将不胜感激 引用《开放源码软件杂志》的论文:
importumapfromsklearn.datasetsimportload_digitsdigits=load_digits()embedding=umap.UMAP().fit_transform(digits.data)0
如果你想在你的工作中引用这个算法,arxiv论文是 当前参考:
importumapfromsklearn.datasetsimportload_digitsdigits=load_digits()embedding=umap.UMAP().fit_transform(digits.data)1
许可证
umap软件包是3条款bsd许可的。
我们想指出的是,umap软件包充分利用了 NumFocus赞助的项目,如果没有 他们对这些项目的支持,因此请考虑为numfocus做出贡献。 < / div>
贡献
我们非常欢迎您的贡献!有很多机会 对于潜在的项目,如果您愿意,请与我们联系 帮忙。从代码到笔记本到 示例和文档都同样有价值,所以请不要觉得 你不能贡献。请捐款 分叉项目 做些改变 提交请求。我们将尽最大努力解决 然后将代码合并到主分支中。