我对用户和他们喜欢的项目有一个稀疏的矩阵(按100万个用户和100K个项目的顺序排列,稀疏程度很低)。我正在探索可以对其执行kNN搜索的方法。考虑到数据集的大小和我执行的一些初始测试,我的假设是我将使用的方法必须是并行的或分布式的。因此,我正在考虑两类可能的解决方案:一种可以在单个多核计算机上使用(或以相当容易的方式实现),另一种可以在Spark集群上使用,即作为MapReduce程序。我考虑了以下三个主要思想:
- 假设一个余弦相似性度量,通过其转置(作为外部乘积之和来实现)对归一化矩阵进行完全乘法
- 使用位置敏感的哈希(LSH)
- 首先使用PCA降低问题的维度
对于任何其他可以解决此问题的方式的想法或建议,我将不胜感激。