稀疏矩阵的高效最近邻搜索
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 trees
或Ball 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 唯一的距离度量,它适用于许多数据,但不是全部。以上是关于稀疏矩阵的高效最近邻搜索的主要内容,如果未能解决你的问题,请参考以下文章