これは、現在igraphに実装されているコミュニティ検出アルゴリズムに関する簡単な要約です。
edge.betweenness.community
は、エッジ間スコア(つまり、特定のエッジを通過する最短パスの数)の降順でエッジが削除される階層分解プロセスです。これは、多くの場合、あるグループから別のグループに移動する唯一のオプションであるという理由だけで、異なるグループを接続するエッジが複数の最短パスに含まれる可能性が高いという事実によって動機付けられています。この方法では良好な結果が得られますが、エッジ間の計算が複雑であり、エッジを削除するたびに中間スコアを再計算する必要があるため、非常に時間がかかります。頂点が約700、エッジが約3500のグラフは、このアプローチで分析できるグラフのサイズの上限に近づいています。もう1つの欠点はedge.betweenness.community
完全な樹状図を作成し、最終的なグループを取得するために樹状図をどこでカットするかについてのガイダンスを提供しないため、他の測定値を使用して決定する必要があります(たとえば、各レベルのパーティションのモジュール性スコア樹状図)。
fastgreedy.community
別の階層的アプローチですが、トップダウンではなくボトムアップです。モジュール性と呼ばれる品質関数を貪欲に最適化しようとします。最初は、すべての頂点が個別のコミュニティに属し、各マージがローカルで最適になるようにコミュニティが繰り返しマージされます(つまり、モジュール性の現在の値が最大に増加します)。モジュール性を高めることができなくなるとアルゴリズムが停止するため、樹状図だけでなくグループ化も可能になります。この方法は高速であり、調整するパラメーターがないため、通常は最初の近似として試行される方法です。ただし、解像度の制限に悩まされることが知られています。つまり、指定されたサイズのしきい値を下回るコミュニティ(正しく覚えている場合はノードとエッジの数によって異なります)は、常に隣接するコミュニティとマージされます。
walktrap.community
ランダムウォークに基づくアプローチです。一般的な考え方は、グラフ上でランダムウォークを実行すると、特定のコミュニティの外側につながるエッジがわずかしかないため、ウォークが同じコミュニティ内にとどまる可能性が高くなるということです。Walktrapは、3-4-5ステップの短いランダムウォークを実行し(パラメーターの1つに応じて)、これらのランダムウォークの結果を使用して、のようにボトムアップ方式で個別のコミュニティをマージしますfastgreedy.community
。ここでも、モジュール性スコアを使用して、樹状図を切り取る場所を選択できます。これは、高速の欲張りアプローチよりも少し遅いですが、(元の出版物によると)少し正確でもあります。
spinglass.community
は、いわゆるポッツモデルに基づく統計物理学からのアプローチです。このモデルでは、各粒子(つまり頂点)はc個のスピン状態の1つになり、粒子間の相互作用(つまりグラフのエッジ)は、どの頂点のペアが同じスピン状態に留まりたいかを指定します。異なるスピン状態を持つことを好む。次に、モデルは指定されたステップ数でシミュレーションされ、最終的に粒子のスピン状態がコミュニティを定義します。結果は次のとおりです。1)cを200まで設定できますが、最終的にはcを超えるコミュニティは存在しません。これは、目的には十分である可能性があります。2)c未満の場合がありますいくつかのスピン状態が空になる可能性があるため、最終的にはコミュニティ。3)ネットワークの完全に離れた(または接続されていない)部分のノードが異なるスピン状態を持つことは保証されません。これは、切断されたグラフでのみ問題になる可能性が高いので、心配する必要はありません。この方法は、(シミュレーション自体のために)特に高速で決定論的ではありませんが、クラスターサイズを決定する調整可能な解像度パラメーターを備えています。スピングラス法の変形では、ネガティブリンク(つまり、エンドポイントが異なるコミュニティにあることを好むリンク)も考慮に入れることができます。
leading.eigenvector.community
モジュール性機能を再び最適化するトップダウンの階層的アプローチです。各ステップで、グラフは2つの部分に分割され、分離自体によってモジュール性が大幅に向上します。分割は、いわゆるモジュラリティ行列の主要な固有ベクトルを評価することによって決定されます。また、密に接続されたグループがさらに分割されるのを防ぐ停止条件もあります。固有ベクトルの計算が含まれるため、ARPACK固有ベクトルソルバーが不安定な縮退グラフでは機能しない場合があります。非縮退グラフでは、少し遅くなりますが、高速欲張り法よりも高いモジュール性スコアが得られる可能性があります。
label.propagation.community
は、すべてのノードにk個のラベルの1つが割り当てられる単純なアプローチです。次に、このメソッドは繰り返し進行し、各ノードが隣接ノードの最も頻繁なラベルを同期的に取得するように、ラベルをノードに再割り当てします。各ノードのラベルがその近隣で最も頻繁なラベルの1つになると、メソッドは停止します。これは非常に高速ですが、初期構成(ランダムに決定される)に基づいて異なる結果が得られるため、メソッドを何度も実行してから(たとえば、グラフの場合は1000回)、コンセンサスラベルを作成する必要があります。退屈です。
igraph 0.6には、情報理論の原則に基づく最先端のInfomapコミュニティ検出アルゴリズムも含まれます。グラフ上のランダムウォークの最短の記述長を提供するグループを構築しようとします。記述長は、ランダムウォークのパスをエンコードするために必要な頂点あたりの予想ビット数によって測定されます。
とにかく、私はおそらく最初の近似として、fastgreedy.community
またはwalktrap.community
最初の近似として、これら2つが何らかの理由で特定の問題に適していないことが判明したときに、他の方法を評価します。