複数のアルゴリズムの動的な表示を実装するこのPythonライブラリは、ネットワークグラフのコミュニティ構造を発見するのに役立ちます。

複数のアルゴリズムの動的な表示を実装するこのPythonライブラリは、ネットワークグラフのコミュニティ構造を発見するのに役立ちます。

[[382977]]

コミュニティ発見アルゴリズムに精通しているなら、この Python ライブラリを見逃すことはできません。 LouvainアルゴリズムやGirvan-Newmanアルゴリズムなどのさまざまなコミュニティ発見アルゴリズムをカバーし、可視化機能も備えています。

ネットワークは、密接に接続された多数のノードで構成されており、異なるノード間の接続の程度に応じて、ネットワークは異なるクラスターで構成されていると考えることもできます。クラスター内のノードはより密接に接続されていますが、異なるクラスター間の接続は比較的疎です。このようなクラスターは、ネットワーク内のコミュニティ構造と呼ばれます。

これから派生したコミュニティ検出アルゴリズムは、ネットワーク内のコミュニティ構造を検出するために使用されます。このようなアルゴリズムには、Louvain アルゴリズム、Girvan-Newman アルゴリズム、Bron-Kerbosch アルゴリズムなどがあります。

最近、Machine Heart は、グラフ内のコミュニティ構造を検出できる、communities という Python ライブラリを GitHub で発見しました。このライブラリは、ソフトウェア エンジニアの Jonathan Shobrook によって作成されました。

プロジェクトアドレス: https://github.com/shobrook/communities

まず、ライブラリは次のコミュニティ検出アルゴリズムを実装できます。

  • ルーヴァンアルゴリズム
  • ガーバン・ニューマンアルゴリズム
  • 階層的クラスタリング
  • スペクトルクラスタリング
  • ブロン・ケルボッシュアルゴリズム

次に、ユーザーはコミュニティ ライブラリを使用して、上記のアルゴリズムを視覚化することもできます。次の図は、Zachary の空手クラブ ネットワークにおける Louvain アルゴリズムの視覚化結果を示しています。

このライブラリのインストール方法も非常に簡単です。コミュニティをインストールするには、pip を使用します。コードは次のとおりです。

  1. $ pip インストールコミュニティ

多くのネットユーザーがこの Python ライブラリを高く評価し、試してみると述べました。

アルゴリズムの詳細な説明

ルーヴァンアルゴリズム

  1. louvain_method(adj_matrix: numpy.ndarray, n: int = None) -> リスト

このアルゴリズムは、「大規模ネットワークにおけるコミュニティの高速展開」という記事 (略称 Louvian) から引用したものです。

モジュール性に基づくコミュニティ発見アルゴリズムとして、Louvain アルゴリズムは効率性と有効性の面で比較的優れたパフォーマンスを発揮し、階層的なコミュニティ構造を発見することができます。その最適化目標は、グラフ属性構造 (コミュニティ ネットワーク) 全体のモジュール性を最大化することです。

Louvain アルゴリズムは、グラフのモジュール性を最大化するコミュニティを貪欲に検索します。グラフのグループ内エッジの密度が高く、グループ間エッジの密度が低い場合、そのグラフはモジュール グラフと呼ばれます。

サンプルコードは次のとおりです。

  1. community.algorithms から louvain_methodadをインポートします
  2. j_matrix = [...]
  3. コミュニティ、_ = louvain_method(adj_matrix)

ガーバン・ニューマンアルゴリズム

  1. girvan_newman(adj_matrix: numpy.ndarray, n: int = None) -> リスト

このアルゴリズムは、「社会的および生物学的ネットワークにおけるコミュニティ構造」という記事から引用したものです。

Girvan-Newman アルゴリズムは、エッジを繰り返し削除して、より接続されたコンポーネントを作成します。各コンポーネントはコミュニティとして扱われ、モジュール性をこれ以上増加できなくなった時点でアルゴリズムはエッジの削除を停止します。

サンプルコードは次のとおりです。

  1. community.algorithms から girvan_newmanをインポートします
  2. adj_matrix = [...]
  3. コミュニティ、_ = girvan_newman(adj_matrix)

階層的クラスタリング

  1. hierarchical_clustering(adj_matrix: numpy.ndarray、metric: str = "cosine" 、linkage: str = "single" 、n: int = None) -> list

階層的クラスタリングは、ボトムアップの階層的クラスタリング アルゴリズムを実装します。各ノードは独自のコミュニティから始まり、階層が構築されるにつれて、最も類似したコミュニティが統合されます。モジュール化がこれ以上進展しなくなるまで、コミュニティは統合されます。

サンプルコードは次のとおりです。

  1. community.algorithms から hierarchical_clusteringをインポートします
  2. adj_matrix = [...]
  3. コミュニティ = hierarchical_clustering(adj_matrix、メトリック = "ユークリッド" 、リンク = "完全" )

スペクトルクラスタリング

  1. spectral_clustering (adj_matrix: numpy.ndarray, k: int ) -> リスト

このタイプのアルゴリズムでは、隣接行列の固有値にコミュニティ構造に関する情報が含まれていると想定しています。

サンプルコードは次のとおりです。

  1. community.algorithms から spectral_clusteringをインポートします
  2. adj_matrix = [...]
  3. コミュニティ = スペクトルクラスタリング(adj_matrix, k= 5 )

ブロン・ケルボッシュアルゴリズム

  1. bron_kerbosch(adj_matrix: numpy.ndarray、pivot: bool = False) -> リスト

最大クリーク検出のための Bron-Kerbosch アルゴリズムの実装。グラフ内の最大クリークは、完全なグラフを形成するノードのサブセットであり、このサブセットにノードを追加すると、完全ではなくなります。クリークはグラフ内で最も密接に接続されたノードのグループであるため、最大のクリークをコミュニティと見なすのが妥当です。ノードは複数のコミュニティのメンバーになることができるため、アルゴリズムは重複するコミュニティを識別することがあります。

サンプルコードは次のとおりです。

  1. community.algorithms から bron_kerboschをインポート
  2. adj_matrix = [...]
  3. コミュニティ = bron_kerbosch(adj_matrix, pivot=True)

視覚化

描画

  1. draw_communities(adj_matrix: numpy.ndarray、コミュニティ: リスト、dark: bool = False、ファイル名: str = None、シード: int = 1 )

グラフを視覚化し、ノードを所属するコミュニティごとにグループ化し、色分けします。プロットを表す matplotlib.axes.Axes を返します。サンプルコードは次のとおりです。

  1. community.algorithms から louvain_methodをインポートします
  2. community.visualization から draw_communitiesをインポートします
  3. adj_matrix = [...]
  4. コミュニティ、フレーム = louvain_method(adj_matrix)
  5. draw_communities(adj_matrix、コミュニティ)

視覚化は次のようになります。

ルーヴァンアルゴリズムのアニメーションイラスト

  1. louvain_animation(adj_matrix: numpy.ndarray、フレーム: リスト、dark: bool = False、duration: int = 15 、filename: str = None、dpi: int = None、seed: int = 2 )

グラフに Louvain アルゴリズムを適用すると、アニメーション化されたグラフィック表示を実装できます。各ノードの色は、そのノードが属するコミュニティを表し、同じコミュニティ内のノードはクラスター化されます。

サンプルコードは次のとおりです。

  1. community.algorithms から louvain_methodをインポートします
  2. community.visualization から louvain_animationをインポート
  3. adj_matrix = [...]
  4. コミュニティ、フレーム = louvain_method(adj_matrix)
  5. louvain_animation(adj_matrix、フレーム)

アニメーション画像を以下に示します。

<<:  世界を驚かせたNASAの火星無人機はどのように設計されたのか?

>>:  AI面接官はこんなに簡単に騙される!本棚の写真を動画の背景として使用すると好感度が 15% 上昇します

ブログ    
ブログ    

推薦する

「トランスフォーマー」は5年でクレイジーなCNNに取って代わりました!トランスフォーマーは人工知能を支配するのでしょうか?

AI業界では今や誰もが知る名前となったTransformerが、これほど短期間でなぜこれほど人気を...

AI + リアルタイム監視技術が公共サービスを改善する10の方法

石油やガスの価格変動、運用コストの増加、サイバー/物理的な脅威の増大により、公益事業会社はセキュリテ...

いくつかの単純な負荷分散アルゴリズムとそのJavaコード実装

1. 負荷分散とは何ですか?負荷分散(英語名は Load Balance)とは、複数のサーバーを対称...

...

人工知能に対する期待と不安

AI は世界を変えようとしていますが、問題は、それがどのように起こるか誰も予測できないことです。過去...

人工知能と機械学習の購入者ガイド

B2B ソフトウェアの営業およびマーケティング チームは、「人工知能 (AI)」という用語を好んで使...

ディープニューラルネットワークはディープフェイクを検出できる

開発者がディープフェイクのパンドラの箱を開けたことで、本物と区別がつかないほどリアルな写真を偽造する...

...

機械学習と感度分析を組み合わせてビジネス戦略を策定するにはどうすればよいでしょうか?

数え切れないほど多くの企業が、意思決定を支援するために機械学習 (ML) を日常的に使用しています。...

PyTorch と TensorFlow のベンチマーク: どちらのプラットフォームが NLP モデル推論をより速く実行しますか?

PyTorch と TensorFlow のどちらが優れているかという議論は、決して終わることはあ...

ラマ2 ビッグバン!バークレーは実機テストで8位、iPhoneでローカル実行可能、多数のアプリが無料でプレイ可能、ルカンも夢中

昨日、Meta は Llama 2 の無料商用バージョンをリリースし、再びオープンソース コミュニテ...

ナレッジグラフはどのようにして「人工知能」をよりスマートにするのでしょうか?

この記事では、人工知能がインテリジェントでない領域と、ナレッジ グラフに基づく認知知能がインテリジェ...

顔認証決済を使用する理由は何ですか?顔認証決済は安全ですか?

顔認証決済に顔認識を使用する理由は何ですか? [[439417]]外で何かを買いたいのに、財布を持っ...

...

...