2013-08-10 10 views
8

私はスパース行列に変換したデータ(テキスト)の大きなコーパスを持っています(スパース行列を格納するためにscipy.sparse.csr.csr_matrixを使用しています)。私は、すべての文書について、上位n個の最近接の一致を見つけたいと思います。私はPython scikit-learnライブラリではNearestNeighborルーティン(正確にはsklearn.neighbors.NearestNeighbor)が私の問題を解決することを期待していましたが、KD treesBall treesなどのスペースパーティショニングデータ構造を使用する効率的なアルゴリズムは疎行列では機能しません。 brute-forceアルゴリズムのみが、疎な行列で動作します(これは、私が大規模なコーパスを扱っているので、私の場合は実行不可能です)。スパース行列の効率的な最近傍検索

スパース行列(Pythonまたは他の言語)の最近傍探索の効率的な実装はありますか?

ありがとうございました。

答えて

3

TruncatedSVDを使用して高次元の疎データを低次元の高密度データに変換し、ボールツリーを作成できます。

+0

SVD出力でボールツリーがうまく動作しますか?通常、テキストデータの場合、SVDは100-200次元を維持したいと考えています。 –

4

後期の答え:Locality-Sensitive-Hashing

を見てscikit学習でサポートherehereを提案されています。

+0

LSHForestが動作していて、スパース行列入力が2016年にもサポートされていることを確認できます。ダウンサイドはこの実装の驚異的な遅さであり、バージョン1の出力は少なくとも正しいと思われますが、バージョン2が必要な場合があります。スピードを上げるために、私はBallTreeを試しています。そして、MathieuがBallTreeの高密度マトリクス要件をサポートするように提案したように、最初にSVDを使って次元を減らしています。 SVDは、DBSCANを使ったクラスタリングを支援する潜在的な機能を見つけるのにも役立ちます。最後に、コサイン距離メトリックはLSHForestの唯一の距離メトリックです。これは多くのデータに適していますが、すべてではありません。 –

関連する問題