2014-10-19 6 views
0

Я столкнулся с той же проблемой, что и в этой ссылке (Networkx PageRank - Equal Ranks with Different Weights).Вычисление pagerank на взвешенном графике с абсолютными весами

По существу, я использую networkx для вычисления столбца на графике. Так как вычисление pagerank сначала преобразует граф в правую стохастическую матрицу (все исходящие кромки нормированы на единицу).

Что мне нужно - это способ не нормализовать вес ребер. Итак, если один узел как только один исходящий край с весом 0,1, а другой имеет только один исходящий край с весом 0,05, я хочу, чтобы эта информация использовалась при вычислении pagerank (а не нормализовалась до 1 каждый).

Кто-нибудь знает, что может быть правильным способом изменения Pagerank для достижения этого.

заранее спасибо, Amit

+0

Я пытался добавить фиктивный узел с оставшимся весом края, но тогда pagerank не сходится. –

ответ

-1

У меня есть график, который не является правильным стохастический (т.е. краевые веса являются абсолютными и последовательно по всем узлам). Я изменил реализацию pagerank networkx, чтобы избежать преобразования исходной матрицы в правую стохастическую матрицу, давая мне правильный ответ. Однако это означает, что pagerank не сходится, как иногда общая сумма ребер> 1, но обычно ранжирование довольно последовательное после 30-40 итераций.

В сущности, убрав эту строку из NetworkX кода (алгоритмы/link_analysis/pagerank_alg.py) сделал работу: -

W = x.stochastic_graph (D, вес = вес)

2

Может быть, вы думаете о том, что называют Ларри и Сергей «персонализированный PageRank»? Вы можете настроить взвешивание узлов в части случайного перехода алгоритма, чтобы создать смещение. Например.

In [1]: import networkx as nx 

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

In [3]: G.add_path([1,2,3,4]) 

In [4]: nx.pagerank_numpy(G) 
Out[4]: 
{1: 0.11615582303660349, 
2: 0.2148882726177166, 
3: 0.29881085476166286, 
4: 0.370145049584017} 

In [5]: nx.pagerank_numpy(G,personalization={1:1,2:10,3:1,4:1}) 
Out[5]: 
{1: 0.031484535189871404, 
2: 0.341607206810105, 
3: 0.3218506609784609, 
4: 0.3050575970215628} 

См, например, обсуждение здесь http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

+0

Привет, Арик, спасибо за помощь. Я действительно использую персонализированный pagerank для повышения определенных узлов. Однако проблема, с которой я столкнулась, несколько отличается. У меня есть график, который не является правильным стохастическим (т. Е. Предельные веса являются абсолютными и согласованными между узлами). Я изменил реализацию pagerank networkx, чтобы избежать преобразования исходной матрицы в правую стохастическую матрицу, давая мне правильный ответ. Однако это означает, что pagerank не сходится, как иногда общая сумма ребер> 1, но обычно ранжирование довольно последовательное после 30-40 итераций. –