Skip to main content

TriMap:使用三元组的大规模降维

项目描述

TriMap 是一种降维方法,它使用三元组约束来形成一组点的低维嵌入。三元组约束的形式是“点i比点k更接近点j ”。三元组是从点的高维表示中采样的,并使用加权方案来反映每个三元组的重要性。

与 t-SNE、LargeVis 和 UMAP 等其他降维方法相比,TriMap 提供了更好的数据全局视图。全局结构包括聚类的相对距离、数据中的多个尺度以及可能存在的异常值。我们定义了一个全局分数来量化嵌入的质量,以反映数据的全局结构。

通过 CNN 的 CIFAR-10 数据集(测试集)(n = 10,000,d = 1024):注意 TriMap 揭示的语义结构。

CIFAR-10 数据集的可视化

以下实现是在 Python 中。更多细节和更多实验结果可在论文中找到。请参阅示例 colab进行一些分析。

消息!

[2022 年 3 月 16 日] 使用 TriMap JAX 实现的示例 colab现在可在https://github.com/eamid/examples/blob/master/TriMap.ipynb获得。我们使用 t-SNE、UMAP、TriMap 和 PCA 分析 S-curve、MNIST、Fashion MNIST 等的结果。

[2022 年 2 月 17 日] 现已在https://github.com/google-research/google-research/tree/master/trimap上提供了 JAX 实现。更多更新即将推出!

如何使用 TriMap

TriMap 有一个类似于其他 sklearn 库的转换器 API。要使用带有默认参数的 TriMap,只需执行以下操作:

import trimap
from sklearn.datasets import load_digits

digits = load_digits()

embedding = trimap.TRIMAP().fit_transform(digits.data)

要使用预先计算的成对距离矩阵 D 找到嵌入,请将 D 作为输入传递并将 use_dist_matrix 设置为 True:

embedding = trimap.TRIMAP(use_dist_matrix=True).fit_transform(D)

您还可以将预先计算的 k 最近邻及其对应的距离作为元组 (knn_nbrs, knn_distances) 传递。请注意,行必须按顺序排列,从点 0 开始到 n-1。此功能还需要 X 来计算嵌入

embedding = trimap.TRIMAP(knn_tuple=(knn_nbrs, knn_distances)).fit_transform(X)

要计算全局分数,请执行以下操作:

gs = trimap.TRIMAP(verbose=False).global_score(digits.data, embedding)
print("global score %2.2f" % gs)

参数

参数列表如下:

  • n_dims:嵌入的维数(默认 = 2)

  • n_inliers:形成最近邻三元组的最近邻数(默认值 = 12)。

  • n_outliers:形成最近邻三元组的异常值数(默认值 = 4)。

  • n_random:每个点的随机三元组数(默认值 = 3)。

  • distance:距离度量('euclidean'(默认),'manhattan','angular'(或'cosine'),'hamming')

  • weight_temp:应用于权重的对数的温度。更高的温度会产生更紧凑的嵌入。重量温度=0。对应于无转换(默认值=0.5)。

  • weight_adj(已弃用):对数转换的 gamma 值(默认 = 500.0)。

  • lr:学习率(默认 = 0.1)。

  • n_iters:迭代次数(默认 = 400)。

其他参数包括:

  • knn_tuple:以元组 (knn_nbrs, knn_distances) 的形式使用预先计算的最近邻信息(默认 = 无)

  • use_dist_matrix:使用预先计算的成对距离矩阵(默认 = False)

  • apply_pca:如果需要,在应用最近邻搜索之前将数据的维数减少到 100(默认 = True)。

  • opt_method:优化方法{'sd'(最速下降),'momentum'(带动量的GD),'dbd'(delta-bar-delta,默认)}。

  • 详细:打印进度报告(默认 = False)。

  • return_seq:存储中间结果并以张量形式返回结果(默认 = False)。

调整这些参数的示例:

import trimap
from sklearn.datasets import load_digits

digits = load_digits()

embedding = trimap.TRIMAP(n_inliers=20,
                          n_outliers=10,
                          n_random=10).fit_transform(digits.data)

使用 ANNOY执行最近邻计算。

例子

以下是真实世界数据集的一些结果。最近邻精度和全局分数的值在每个图的顶部显示为一对(NN,GS)。有关更多结果,请参阅我们的论文

USPS 手写数字(n = 11,000,d = 256

USPS 数据集的可视化

20 个新闻组(n = 18,846,d = 100

20 个新闻组数据集的可视化

Tabula Muris ( n = 53,760, d = 23,433 )

Tabula Muris Mouse Tissues 数据集的可视化

MNIST 手写数字(n = 70,000,d = 784

MNIST 数据集的可视化

时尚 MNIST ( n = 70,000, d = 784 )

Fashion MNIST 数据集的可视化

电视新闻(n = 129,685,d = 100

电视新闻数据集的可视化

下表给出了 t-SNE、LargeVis、UMAP 和 TriMap 在具有 2.6 GHz Intel Core i5 CPU 和 16 GB 内存的单台机器上的 hh:mm:ss 格式的运行时间。我们将每个方法的运行时间限制为 12 小时。此外,UMAP 在大于约 4M 点的数据集上会耗尽内存。

TriMap 的运行时间与其他方法的比较

安装

要求:

  • 麻木的

  • scikit-学习

  • 麻木

  • 惹恼

安装烦人

如果您在使用以下命令在 macOS上安装annoy时遇到问题:

pip3 install annoy

您也可以尝试:

pip3 install git+https://github.com/sutao/annoy.git@master

安装选项

如果您安装了所有要求,则可以使用 pip:

sudo pip install trimap

请定期检查更新并确保您使用的是最新版本。如果您安装了 TriMap 并想升级到较新的版本,您可以使用以下命令:

sudo pip install --upgrade --force-reinstall trimap

另一种方法是使用 anaconda 手动安装依赖项并使用 pip 安装 TriMap:

conda install numpy
conda install scikit-learn
conda install numba
conda install annoy
pip install trimap

对于手动安装,请获取此软件包:

wget https://github.com/eamid/trimap/archive/master.zip
unzip master.zip
rm master.zip
cd trimap-master

安装要求

sudo pip install -r requirements.txt

或者

conda install scikit-learn numba annoy

安装包

python setup.py install

支持和贡献

此实施仍在进行中。非常感谢任何评论/建议/错误报告。请随时通过以下方式与我联系:eamid @ ucsc 教育_ 如果您想为代码做出贡献,请分叉项目 并向我发送拉取请求。

引文

如果您在出版物中使用 TriMap,请在 arXiv 上引用我们当前的参考资料:

@article{2019TRIMAP,
     author = {{Amid}, Ehsan and {Warmuth}, Manfred K.},
     title = "{TriMap: Large-scale Dimensionality Reduction Using Triplets}",
     journal = {arXiv preprint arXiv:1910.00204},
     archivePrefix = "arXiv",
     eprint = {1910.00204},
     year = 2019,
}

执照

请参阅许可证文件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

trimap-1.1.4-py3-none-any.whl (15.5 kB 查看哈希

已上传 py3