algorithm - 计算具有高死链接百分比的稀疏有向图的 pageranks

标签 algorithm graph machine-learning pagerank jung

我是印第安纳大学布卢明顿分校计算机科学专业的研究生。对于我的一个研究项目,我正在为一个非常稀疏且死链接百分比很高的有向图计算 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 不是您想要的。

您使用的是哪个版本的 PageRankedu.uci.ics.jung.algorithms.importance.PageRankedu.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/

相关文章:

python - 使用三元搜索查找范围内的所有元素?

c++ - 在给定数组中找到每个元素出现两次的距离最长的元素?

c++ - 需要帮助为我的算法中的缺陷提出优雅的修复

algorithm - 如何将二分匹配转换为独立集

machine-learning - 如何计算拉格朗日乘数以用 QP 训练 SVM

python - 为什么经过多次在线训练后识别率会下降?

algorithm - p = B^E 的复杂度是多少?

algorithm - hackerrank偶数树解法讲解(偶数节点的森林)

python - 基于一些数据使用节点和顶点构建图

python - XGBoost: AttributeError: 'DataFrame' 对象没有属性 'feature_names'