2

私は最近、約 50 万のノードと 120 万のエッジを持つネットワークの PageRank (および HITS とさまざまな中心性スコア) を計算するプロジェクトを行いました。Networkx python パッケージを使用して PageRank スコアを計算し、かなり信頼できる外部データ ソースに対して線形回帰でテストしました。重み付けされていないスコアは外部データと密接に相関していましたが、重み付けされた PageRank スコアは、グラフのエッジにどのように重み付けしたかに関係なく、すべて同じ値 (高精度の浮動小数点数) であることがわかり、混乱しました。それらは相関しませんでした。外部データとまったく一緒です。コードに気付かなかったエッジを追加する際にエラーが発生したかどうか、または十分な回数の反復後にエッジの重みに関係なく PageRank が実際に同じ値に収束する可能性があるかどうかを把握しようとしています。

実行ごとにエッジの重み付けが異なっていても、PageRank は同じ値を生成した可能性はありますか? または、ネットワーク エッジで何か問題が発生していますか?

ありがとうございました。

編集:他の PageRank の質問は、すべての発信重みを正規化する必要があることを説明しているようですが、私は間違いなくそうしませんでした。私の重みはすべて 4、10、15 などの整数です。これは問題でしょうか?

4

1 に答える 1

2

多分これですか?

networkx.pagerank() 関数のデフォルトの呼び出し引数は、アルゴリズムが「重み」属性を使用する必要があることを指定します。エッジに「重み」属性があり、それを無視したい場合は、weight=None を選択します。例えば

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_edge(1,2,weight=7.0)

In [4]: G.add_edge(1,3,weight=70.0)

In [5]: nx.pagerank(G)
Out[5]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685}

In [6]: nx.pagerank(G,weight=None)
Out[6]: {1: 0.259740259292235, 2: 0.3701298703538825, 3: 0.3701298703538825}

In [7]: nx.pagerank(G,weight='weight')
Out[7]: {1: 0.259740259292235, 2: 0.27981109766708, 3: 0.460448643040685}
于 2013-07-31T20:54:52.467 に答える