如何嵌入欧几里得空间

机器算法验证 机器学习 降维 多维尺度 嵌入
2022-04-05 23:56:44

我有一个我认为可能是标准机器学习问题的问题,但我找不到明确的解决方案。

我有很多不同维度的向量。对于每对向量,我可以计算它们的相似度。我想将这些向量嵌入到某个固定维度d的欧几里得空间中,这样在原始度量下相似的向量在嵌入下的欧几里得距离很小。

这似乎被称为相似性度量学习,但 wiki 似乎没有详细说明解决它的方法。我还在 Python 中找到了一些用于度量学习的代码,但它似乎解决了与我感兴趣的问题不同的问题。

你如何解决这个相似性学习问题?

2个回答

这些被称为多维缩放算法。来自维基百科(https://en.wikipedia.org/wiki/Multidimensional_scaling),“MDS算法旨在将每个对象放置在 N 维空间中,以便尽可能保留对象之间的距离。” 所以基本上你输入一个距离矩阵,算法输出一个应该近似距离的欧几里得表示。在您的情况下,您有相似度分数,因此您需要取倒数(距离 = 1 / 相似度)或从大常数中减去相似度(距离 = c - 相似度)。

在原始度量下相似的向量在嵌入下具有较小的欧几里得距离

这是降维的目标,尤其是非线性降维,它是唯一的目标(因为它们通常不能强制相距很远的点之间的距离不会失真,如果你有兴趣证明你可以找到它在这里)。

一些方法:

  • 多维缩放
    • Isomap(这是一种非线性方法,使用 MDS 从 kNN 图中检索距离)
  • 内核 PCA(使用内核技巧在嵌入空间中进行 PCA)
  • 基于图的降维(您的距离矩阵定义了一个图,并且图产生了有用的矩阵,请查看A tutorial on Spectral Clustering。在 Python megaman 实现Spectral Embedding
  • tSNE(减少维度试图保持距离分布)

如果您特别对 Python 感兴趣,那么几乎所有这些方法都在scikit-learn中实现,尤其是在流形模块中。