给定一个scipy.sparse.csr_matrix大小为 NxN (N = 900,000)的稀疏矩阵(使用),我试图使用自定义距离度量为测试集中的每一行找到前 k 个最近邻(来自输入矩阵的稀疏行向量)。基本上,输入矩阵的每一行代表一个项目,对于测试集中的每个项目(行),我需要找到它的 knn。
尝试:
尝试使用sklearn.neighbors.NearestNeighbor. 但是,在处理稀疏矩阵时,sklearn 似乎没有将可调用的度量函数作为输入:
ValueError: metric '<function <lambda> at 0x7f92ce221938>' not valid for sparse input
Run Code Online (Sandbox Code Playgroud)目前正在尝试使用facebookresearch/pysparnn(看起来很有希望!)。它对实现自己的自定义距离类有一定的规定。但是,执行后,建立索引需要很长时间(24小时后仍在运行),正如作者所提到的,似乎
使用距离类型
scipy.spatial.distance.cdist(或 sklearn 距离度量)比目前在 pysparnn 中的要慢得多。
我们正在通过编写自定义内容来调试 sklearn/scipy 距离度量的这个性能问题。
我想知道是否有任何其他有效的最近邻搜索实现稀疏矩阵来提供使用自定义距离度量?
(将在具有 64 GB RAM、12 核的服务器上执行)
谢谢!