稀疏矩阵的高效最近邻搜索

Posted

技术标签:

【中文标题】稀疏矩阵的高效最近邻搜索【英文标题】:Efficient nearest neighbour search for sparse matrices 【发布时间】:2013-08-12 10:16:23 【问题描述】:

我有大量数据(文本),我已将其转换为稀疏术语文档矩阵(我使用scipy.sparse.csr.csr_matrix 来存储稀疏矩阵)。我想为每个文档找到前 n 个最近邻匹配项。我希望Python scikit-learn 库中的NearestNeighbor 例程(准确地说是sklearn.neighbors.NearestNeighbor)可以解决我的问题,但是使用空间分区数据结构(如KD treesBall trees)的有效算法不适用于稀疏矩阵.只有蛮力算法适用于稀疏矩阵(在我的情况下这是不可行的,因为我正在处理大型语料库)。

是否有针对稀疏矩阵的最近邻搜索的有效实现(在 Python 或任何其他语言中)?

谢谢。

【问题讨论】:

【参考方案1】:

您可以尝试使用 TruncatedSVD 将高维稀疏数据转换为低维密集数据,然后执行球树。

【讨论】:

你确定球树在 SVD 输出中表现得很好吗?通常对于文本数据,您希望 SVD 保持大约 100-200 个维度...【参考方案2】:

迟到的答案:看看Locality-Sensitive-Hashing

已提议支持 scikit-learn here 和 here。

【讨论】:

我可以确认 LSHForest 正在工作,并且在 2016 年也支持稀疏矩阵输入,这很棒。缺点是这个实现的速度非常慢,它可能需要版本 2,尽管版本 1 的输出至少看起来是正确的。为了获得更好的速度,我正在尝试 BallTree 并首先使用 SVD 来降低维度,就像 Mathieu 建议的那样来支持 BallTree 的密集矩阵要求。 SVD 还可以帮助我找到潜在特征以帮助使用 DBSCAN 进行聚类。最后,余弦距离度量是 LSHForest 唯一的距离度量,它适用于许多数据,但不是全部。

以上是关于稀疏矩阵的高效最近邻搜索的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵的表示法

什么是数据结构中的特殊矩阵和稀疏矩阵

Scipy---6.稀疏矩阵

稀疏表示字典学习和压缩感知(基本概念)

哪个 SciPy 稀疏矩阵类最适合计算距离矩阵?

稀疏矩阵 - 矩阵乘法