最近傍データによる非常に高次元のデータの検索


17

私は、ユーザーと彼らが好むアイテムの大きなまばらなマトリックスを持っています(100万ユーザーと100Kアイテムのオーダーで、非常に低いレベルのスパース性があります)。kNN検索を実行する方法を模索しています。データセットのサイズと実行した初期テストを考えると、使用する方法は並列または分散のいずれかである必要があるという前提があります。そこで、2つのクラスの可能なソリューションを検討しています。1つは単一のマルチコアマシンで利用可能(または合理的に簡単な方法で実装可能)、もう1つはSparkクラスター、つまりMapReduceプログラムとして利用可能です。私が検討した3つの広範なアイデアは次のとおりです。

  • コサイン類似度メトリックを想定して、正規化された行列とその転置(外積の合計として実装)の完全な乗算を実行します。
  • 局所性依存ハッシュ(LSH)の使用
  • 最初にPCAで問題の次元を減らす

この問題に取り組むことができる他の可能な方法についての考えやアドバイスをいただければ幸いです。


1
私はちょうどこの分野を調査しており、私が見つけたものについてのブログ記事を書きました。LSHを使用しましたが、スパースレベルはあなたが探しているよりも高いと思います。 tttv-engineering.tumblr.com/post/109569205836/...
フィリップ・パール

回答:


15

次のリソースが、問題を解決するための追加のアイデアを得られることを願っています。

1)研究論文「高次元スパースデータ用の効率的なK-Nearest Neighbor Joinアルゴリズム」http : //arxiv.org/abs/1011.2807

2)クラスプロジェクトペーパー「コラボレーティブフィルタリングに基づく推奨システム」(スタンフォード大学):http : //cs229.stanford.edu/proj2008/Wen-RecommendationSystemBasedOnCollaborativeFiltering.pdf

3)Netflix賞コンクールのプロジェクトk-NNベース)http : //cs.carleton.edu/cs_comps/0910/netflixprize/final_results/knn/index.html

4)研究論文「宇宙におけるハブ:高次元データで人気の最寄りの隣人」次元の呪い現象との関係機械学習、一般的に、そしてK-NNアルゴリズム、特に:http://jmlr.org /papers/volume11/radovanovic10a/radovanovic10a.pdf

5)スパースk-NN分類用のソフトウェア(無料ですが、オープンソースではないようです-著者と明確になる可能性があります):http : //www.autonlab.org/autonweb/10408.html

6)いくつかのディスカッションスレッドのStackOverflow

7)に注意してGraphLab、オープンソースの機械学習のための並列フレームワークhttp://select.cs.cmu.edu/code/graphlab対応)、パラレルクラスタリングを介して、MapReduceモデル:のhttp://select.cs.cmuを。 edu / code / graphlab / clustering.html

また、関連するパッケージおよびページへのリンクについては、スパース回帰に関するData Science StackExchangeでの私の回答(/datascience//a/918/2452)も確認できますRCRAN Task View


4

協調フィルタリングに取り組んでいる場合、両方のユーザーが同じ低次元空間に同時に埋め込まれている低ランク行列近似として問題を提起する必要があります。その場合、類似検索ははるかに簡単になります。あなたが提案したように、LSHを使用することをお勧めします。まだ言及されていない次元削減のための別の実り多い道は、ランダム投影です。


1

PySparNNを使用する必要があります。これは、Facebookによるpythonでの最近の実装で、血まみれの高速です。使い方も簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.