2017-01-12 26 views
-1

ランダムでスケールフリーなネットワークをどうやって比較できるのだろうと思います。これらの2つのタイプのネットワーク(クラスタリングなど)とそれらを特徴付けるパラメータ(スケールフリーネットワークの場合はガンマ、ノードのn- nbの場合はk - ランダムネットワークのエッジの数)の違いになりました。しかし、もし、2つのネットワークにどのように情報が広がっているのかを比較したいのであれば、ガンマとkを選んで比較可能な「セットアップ」を得るにはどうすればいいですか?私は同じネットワーク(私は彼らが異なるプロパティを持っていることを知っている)を取得したくないだけで、それらを効率的に比較することができます。スケールフリーとランダムネットワークを比較するには?

ガンマ= 2の10,000スケールのネットワークから得た平均リンク数を使用し、それに応じてランダムネットワークのkを選択することを考えていました。それは理にかなっていますか?

ps:Networkxを使用してネットワークを生成しています。

答えて

0

私は(「ネットワークの効率性は、それが情報を交換する方法を効率的の尺度である」)の情報が、これらの二つのネットワークそのために

に広がるか、あなたはefficiencyを使用することができます比較したいです。 これはnetworkxで1/Lとして計算できます.Lはaverage shortest path lengthです。

以下のコードでは、Gはスケールフリーグラフ(scale_free_graphで生成)、Hはランダムグラフ(gnp_random_graphで生成)です。両方のグラフのノード数は同じです(200)。このように、彼らはより匹敵します。

import networkx as nx 

G = nx.scale_free_graph(200) 
H = nx.gnp_random_graph(200, 0.5) 
print("Efficiency for G:", 1.0/nx.average_shortest_path_length(G)) 
print("Efficiency for H:", 1.0/nx.average_shortest_path_length(H)) 

以下の出力は、コードを実行するたびに(グラフはランダムに生成されます)、それぞれ異なります。複数のスケールフリー/ランダムグラフを作成し、その平均効率を求めて値を比較することができます。

Efficiency for G: 3.67192545437771 
Efficiency for H: 0.6666890013065765 

グラフを比較するときにはもちろん、他のネットワーク指標、たとえばaverage clusteringなど

あなたのタイトルに質問があります。

スケールフリーとランダムネットワークの比較方法を教えてください。

スケールフリーとランダムネットワークの違いを示す最も直感的な方法は、(ランク/ソートされた)ノードの度数をプロットすることです。

以下の画像から、スケールフリーでランダムネットワークをすぐに推測できます。

enter image description here

Iは、次のコード(G及びHは、以前からのグラフである)を用いて画像を得ました。

import matplotlib.pyplot as plt 

degree_sequence = sorted(nx.degree(G).values(), reverse=True) 
plt.plot(degree_sequence, 'b-') 

degree_sequence = sorted(nx.degree(H).values(), reverse=True) 
plt.plot(degree_sequence, 'r-') 

plt.ylabel("degree") 
plt.xlabel("rank") 
plt.show() 

ノード度(degree_sequence)がランダムに生成グラフに依存するので、もちろん、わずかに異なる画像を取得します。

最後のヒント:複数のスケールフリーグラフをプロットする場合は、ログログプロットの使用を検討してください。

関連する問題