Расчет PageRanks для редкого направленного графа с высоким процентом долков

StackOverflow https://stackoverflow.com/questions/3669226

Вопрос

Я аспирант в области компьютерных наук в Университете Индиана Блумингтон. Для одного из моих исследовательских проектов я работаю над расчетом PageRanks для направленного графика, который очень редкий и имеет высокий процент домиков.

Потяжек я имею в виду узлы, которые имеют ноль прерывания. Иногда, в графе с большим количеством заболеваний, могут возникнуть ловушки паука. В любом случае, проблема, которую мне интересует, вы узнаете PageRanks в этом сценарии.

И я использую Jung (Java Universal Graph Network) для расчета PageRanks.

Когда я использую нормальную процедуру,

Graph<String, String> jungGraph = new DirectedSparseGraph<String, String>();
PageRank<String, String> pagerank = new PageRank<String,String>(jungGraph, 0.2);
pagerank.setMaxIterations(20);
pagerank.setTolerance(0.000001);
pagerank.evaluate();

Я получаю более или менее те же значения PageRank для всех узлов, когда я четко знаю, что не должно быть так. Поскольку некоторые узлы на графике имеют большое количество исходящих узлов и сильно взаимосвязаны.

Какой предложенный подход в этом случае. Я знаю, что есть этот класс PagerankwithPriors. Должен ли я сначала извлечь сеть бездействующих, рассчитайте их PageRanks для них, а затем распространять свой ранг до смертных знаков, пока они не сходится. В последнем случае все узлы в пониженной сети (прерывают! = 0) будут установлены своими приорами, тогда как поэтапники не будут.

Я здесь ничего не пропускаю?

Это было полезно?

Решение

Я не думаю PageRankWithPriors это то, что вы хотите.

Какая версия PageRank ты используешь? Класс edu.uci.ics.jung.algorithms.importance.PageRank или edu.uci.ics.jung.algorithms.scoring.PageRank? Первый был устарел в пользу последнего в бета-версии Юнга 2.0.

Кажется, они по-разному относятся к прерыванию 0 узлов, что может быть вашим вопросом. Первый спецификация говорит:

Вероятность перехода от узла U на узел V равно (1-альфа)1 / readegree (u)] + альфа(1 / | V |)

Если у вас нет по краям в исходном графике, то 0 используется вместо 1 / прерыванного (V).

Это, кажется, неправильно, так как это приводит к потере вероятности (общая вероятность выхода из некоторых методом должна равняться 1, и это не). Последнее делает это по-другому:

Если вершина не имеет исходящих краев, то вероятность получения случайного скачка из этой вершины (по умолчанию) эффективно 1

Это должно сохранить вероятность, которая вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top