我有一个很大的用户和他们喜欢的项目的稀疏矩阵(按照 1M 用户和 100K 项目的顺序,稀疏度非常低)。我正在探索可以对其执行 kNN 搜索的方法。鉴于我的数据集的大小和我执行的一些初始测试,我的假设是我将使用的方法需要是并行的或分布式的。所以我正在考虑两类可能的解决方案:一类在单个多核机器上可用(或以相当简单的方式实现),另一类在 Spark 集群上,即作为 MapReduce 程序。以下是我考虑的三个广泛的想法:
- 假设一个余弦相似度度量,通过其转置执行归一化矩阵的全乘(实现为外积之和)
- 使用局部敏感散列 (LSH)
- 首先使用 PCA 降低问题的维数
对于我可以解决此问题的其他可能方式,我将不胜感激。