我是印第安纳大学布卢明顿分校计算机科学专业的研究生。对于我的一个研究项目,我正在为一个非常稀疏且死链接百分比很高的有向图计算 pageranks。
我所说的死链接是指出度为零的节点。有时,在具有大量死链接的图中,可能会出现蜘蛛陷阱。无论如何,我感兴趣的问题是在这种情况下找出 pageranks。
我正在使用 JUNG(Java 通用图形网络)计算网页排名。
当我使用正常程序时,
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,然后将它们的排名传播到死链接,直到它们收敛。?在后一种情况下,简化网络中的所有节点(outdegree != 0 )都将设置其先验,而死链接则不会。
我在这里遗漏了什么吗?
最佳答案
我认为 PageRankWithPriors
不是您想要的。
您使用的是哪个版本的 PageRank
? edu.uci.ics.jung.algorithms.importance.PageRank
或 edu.uci.ics.jung.algorithms.scoring.PageRank
类?在 Jung 2.0 Beta 中,前者已被弃用,取而代之的是后者。
他们似乎以不同方式对待出度 0 节点,这可能是您的问题。前者的规范说:
probability of going from node u to node v is equal to (1-alpha)[1/outdegree(u)] + alpha(1/|V|)
If u has no out-edges in the original graph then 0 is used instead of 1/outdegree(v).
这似乎是错误的,因为它会导致概率损失(通过某种方法离开 u 的总概率应该等于 1,但事实并非如此)。后者的做法不同:
If a vertex has no outgoing edges, then the probability of taking a random jump from that vertex is (by default) effectively 1
这应该保留您想要的概率。
关于algorithm - 计算具有高死链接百分比的稀疏有向图的 pageranks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669226/