私は、ユーザーと彼らが好むアイテムの大きなまばらなマトリックスを持っています(100万ユーザーと100Kアイテムのオーダーで、非常に低いレベルのスパース性があります)。kNN検索を実行する方法を模索しています。データセットのサイズと実行した初期テストを考えると、使用する方法は並列または分散のいずれかである必要があるという前提があります。そこで、2つのクラスの可能なソリューションを検討しています。1つは単一のマルチコアマシンで利用可能(または合理的に簡単な方法で実装可能)、もう1つはSparkクラスター、つまりMapReduceプログラムとして利用可能です。私が検討した3つの広範なアイデアは次のとおりです。
- コサイン類似度メトリックを想定して、正規化された行列とその転置(外積の合計として実装)の完全な乗算を実行します。
- 局所性依存ハッシュ(LSH)の使用
- 最初にPCAで問題の次元を減らす
この問題に取り組むことができる他の可能な方法についての考えやアドバイスをいただければ幸いです。