2

クラスタリング(knn)の独自のJavaベースの実装があります。ただし、スケーラビリティの問題に直面しています。要件が非常に単純で、mahoutには多くの作業が必要なため、Mahoutを使用する予定はありません。アルゴにプラグインして並列処理を実行できるJavaベースのCanopyクラスタリング実装を探しています。

MahoutベースのCanopyライブラリは、ベクターおよびインデックスと結合されており、プレーンな文字列では機能しません。単純なライブラリを使用して文字列でキャノピークラスタリングを使用できる方法を知っている場合は、問題が修正されます。

私の要件は、文字列のリスト(たとえば、10K)をCanopyクラスタリングアルゴリズムに渡すことであり、T1とT2に基づいてサブリストを返す必要があります。

4

3 に答える 3

2

Canopy クラスタリングは、並列化の前処理ステップとして最も役立ちます。単一のノードでどれだけ得られるかはわかりません。実際のアルゴリズムをすぐに計算するか、M ツリーなどのインデックスを作成することもできます。

Canopy クラスタリングの強みは、多数のノードで独立して実行し、それらの結果を重ね合わせることができることです。

また、実際にアプローチと互換性があるかどうかも確認してください。キャノピーには、正しいメトリックプロパティが必要になる可能性があると考えています。弦の距離は適切な測定基準ですか (つまり、三角形の不等式)?

于 2012-11-08T07:16:44.040 に答える
1

ELKIのクラスタリング アルゴリズムを試してみてください。私が深く関わっているプロジェクトを恥知らずに宣伝して申し訳ありません。しかし、同等の方法で実装されているクラスタリングおよび外れ値検出アルゴリズムの最大のコレクションです。(一部のR パッケージで利用可能なすべてのクラスタリング アルゴリズムを使用すると、より多くのアルゴリズムが得られる可能性がありますが、実装の違いにより、それらは実際には比較できません)

また、ベンチマークでは、同じアルゴリズムの実装が異なると、速度が大幅に異なることが示されました。k-means などの単純なアルゴリズムでもパフォーマンスがどの程度変化するかについては、ベンチマークWeb サイトを参照してください。

Canopy Clustering はまだありません。その理由は、実際のクラスタリング アルゴリズムというよりは、前処理インデックスに近いからです。M ツリーまたは DBSCAN クラスタリングのプリミティブ バリアントのようなものです。ただし、そのような前処理ステップとして、提供されたキャノピー クラスタリングを確認したいと考えています。

文字列を処理する ELKI の能力も、これまでのところ少し制限されています。典型的な TF-IDF ベクトルを問題なく読み込むことができ、スパース ベクトル クラスと類似関数がいくらか最適化されています。ただし、彼らはまだ k-means のスパース性を完全に活用しておらず、球形の k-means もまだありません。しかし、スパース ベクトルの k-means の結果があまり意味のあるものであると期待できない理由はさまざまです。それはヒューリスティックです。

しかし、あなたの問題のためにそれを試してみて、あなたの経験を報告することができれば面白いでしょう. パフォーマンスは、実装とある程度競争力がありましたか? また、さらに最適化された類似度関数や球形の k-means バリアントなど、テキスト処理用のモジュールが提供されることを期待しています。

更新: ELKI には実際に CanopyClustering : CanopyPreClusteringが含まれるようになりました (0.6.0 の一部になります)。しかし、現時点では、これは別のクラスタリング アルゴリズムにすぎず、k-means などの他のアルゴリズムを高速化するためにまだ使用されていません。アルゴリズムを高速化するための何らかのインデックスとして最適に使用する方法を確認する必要があります。T1=epsilon および T2=0.5*T1 に設定すると、DBSCAN の高速化にも役立つと想像できます。CanopyClustering IMHO の大きな問題は、適切な半径を選択する方法です。

于 2012-12-31T14:56:05.653 に答える
1

10,000 個のデータ ポイントがあれば、標準の k-means では問題ありません。キャノピー クラスタリングを検討する前に、それを最適化することを検討します (これは実際には数百万または数十億の例向けに設計されています)。あなたが見逃したかもしれないいくつかのこと:

  • 各文字列の特徴ベクトルを事前に計算します。s_1 を s_2 と比較したり、s_1 をクラスターの重心と比較したりするたびに実行しないでください。
  • 要約統計をメモリに保持するだけで済みます。つまり、クラスターに割り当てられたすべてのポイントの合計と、クラスターに割り当てられたポイントの数です。反復が完了すると、合計が ns で除算され、新しい重心が得られます。
  • あなたの特徴空間の次元は何ですか?両方のベクトルがゼロである次元が影響を与えない距離メトリックを使用する必要があることに注意してください。そのため、ゼロ以外の次元についてのみ計算する必要があります。これを容易にするために、ポイントをスパース ベクトルとして保存します。

分析を行って、実装のボトルネックがどこにあるかを特定できますか? Mahout がプレーンな文字列で動作しないというあなたのコメントに、私は少し困惑しています。

于 2012-11-08T10:01:42.213 に答える