私は、Neo4j で保持しているいくつかのグラフ データベース (友人ネットワーク、購入履歴など) を持っています。Girvan Newmanなどのコミュニティ検出アルゴリズムを使用してこれらを分析する予定です。これらのアルゴリズムは通常、ネットワーク全体から個々のノードへのグラフの分割を表すデンドログラムを返します。これらの結果をどのように維持できるか疑問に思っています。別のグラフとして保存できると思いますが、グラフ自体に保存する方法はありますか? そうする際の私の懸念は、グループを表すノードを作成する必要があることです。これは避けたいことです。
2 に答える
ほとんどのコミュニティ検出アルゴリズムは、グラフ内の既存のエッジに沿ってコミュニティを凝集させることによって機能します。Girvan-Newman は、刃先で機能するという点で少し変わっています。いずれにせよ、デンドログラムは、グラフの端での操作の順序を示していると見なすことができます。したがって、デンドログラムを別のオブジェクトとして保存する代わりに、マージ/カットする順序を示すプロパティをエッジ (関係) に添付できます。私の Neo4j に関する知識は非常に限られているため、詳細はお任せします。
通常、複数の同等のエッジが存在し、それぞれがコミュニティ内の異なる頂点をリンクしてマージするため、マージにはいくつかの複雑さがあります。基本的には、リンクされたコミュニティをエッジから把握できる戦略を選択するだけです.
デンドログラムを表現する 1 つの方法は、n 要素の (n-1) ペアを含むペアのリストです。ペアの左側の要素が、コミュニティ内のすべての要素を参照するために ID が保持されている要素であると仮定すると、樹形図のサンプルは次のようになります。
[[0,1],[2,3],[0,2]]
そのため、別のノードにマージされるタイム ステップの各ノードに格納することもできます (以前にマージされたすべてのノードと一緒に)。
したがって、(0:0) を 1 に、(1:2) を 3 に、(2:0) を 2 (timestep:new 'name' of node) に接続します。
編集: 具体的には、これは「merge_timestep」と「merge_into」などの 2 つの整数値属性を各 Neo4J ノード オブジェクトにアタッチすることを意味する場合があります。