効率的なグラフクラスタリングアルゴリズム


20

大きなグラフ(約5000の頂点と10000のエッジを持つ)でクラスターを見つけるための効率的なアルゴリズムを探しています。

これまでは、JUNG javaライブラリに実装されたGirvan–Newmanアルゴリズムを使用していますが、多くのエッジを削除しようとすると非常に遅くなります。

大きなグラフのより良い代替案を提案してもらえますか?


k-meansを見ましたか?
-Oded

グラフでそれを使用する方法について学ぶための参考資料を教えてください。
マリオサンジョルジョ


VoltageClustererのJUNG実装に切り替えましたが、間違いなく高速です。jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…– mariosangiorgio 12
1

1
< cs.stackexchange.com >には、ソフトウェアエンジニアよりもコンピューターサイエンスに関するものなので、これはより適切ではないでしょうか。
ウーフコックペンテアーノ

回答:


13

私は個人的にマルコフクラスタリングを提案しています。過去に何度か使用して、良い結果を得ています。

アフィニティ伝播は別の実行可能なオプションですが、マルコフクラスタリングよりも一貫性が低いようです。

他にもさまざまなオプションがありますが、これらの2つはそのまま使用でき、グラフのクラスタリング(スパース行列として表示できる)の特定の問題に適しています。使用している距離測定も考慮事項です。適切なメトリックを使用している場合、あなたの人生は楽になります。

パフォーマンスベンチマークを探しているときにこの論文を見つけました。これは主題の良い調査です。


おかげで、私はあなたが提案したすべてのアルゴリズムを見ていきます。
マリオサンジョルジョ

修正:これらのアルゴリズムは、距離ではなく類似性を反映する入力重みとして必要です。メトリックプロパティ(三角形の不等式)は含まれません。ここで説明されている(ピアソン)相関関係(micans.org/mcl/man/clmprotocols.html#array)や、ここで説明されているBLAST E値(たとえばmicans.org/mcl/man/clmprotocols.html#blast)。
ミカン

10

階層的クラスタリング

これは友人から勧められました。ウィキペディアによると:

この方法では、ノードペア間の(通常はトポロジ的な)タイプの類似性を定量化する類似性尺度を定義します。一般的に使用される尺度には、コサイン類似度、Jaccardインデックス、および隣接行列の行間のハミング距離が含まれます。次に、この測定に従って、類似のノードをコミュニティにグループ化します。グループ化を実行するためのいくつかの一般的なスキームがあり、2つの最も単純な単一リンククラスタリングは、異なるグループのノードのすべてのペアが特定のしきい値よりも低い類似性を持ち、完全なリンケージクラスタリングである場合にのみ、2つのグループを個別のコミュニティと見なします、すべてのグループ内のすべてのノードの類似度がしきい値を超えています。

マルコフクラスター

これは私があなたの状況で使用するものです。これは非常に便利なアルゴリズムです。アルゴリズムに関する素晴らしいPDFへリンクを見つけました。これは優れたアルゴリズムであり、より良い用語がないため、非常に「強力」です。試してみてください。


5

ここでの問題については、頂点エッジを各頂点の座標セットにマッピングする方法を考える必要があると思います。これを行うより良い方法があるかどうかはわかりません。しかし、各頂点をディメンションとして表すことから始めて、特定の頂点のエッジ値がその特定のディメンションで作業する必要がある値になると思います。その後、単純なユークリッド距離を実行し、それを使用できます。


1
少し読んだ後、私はこれをここで見つけました、そして、あなたが見ておくべきだと思います。
viki.omega9
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.