我正在编写一个小代码(顺序)来计算适度数据集的网页排名(尽管不是完全无关紧要)。
算法是这样的:
while ( not converged ) {
// Do a bunch of things to calculate PR
}
除了“收敛”标准外,我对算法很清楚。检查算法是否收敛的最佳方法是什么?我应该:
检查我是否从迭代中保留了所有单个节点的PR的副本,并在下一次迭代中检查所有节点的PR是否为相同的值?
这对我来说效率非常低。这是一个正确的方法吗?
答案 0 :(得分:5)
对于每个节点,取当前迭代与最后一个迭代之间的得分差异,如果此错误低于某个阈值,则图形已收敛。
TextRank的论文描述得非常好:
从分配给图中每个节点的任意值开始,计算迭代直到达到低于给定阈值的收敛。
当图表中任何顶点的错误率低于给定阈值时,实现收敛。顶点的错误率定义为顶点 S(Vi)的“实际”得分与迭代 k , S计算的得分之间的差异^ K(Vi)。由于实际得分不是先验的,因此该误差率用两次连续迭代计算得分之间的差值近似:S ^(k + 1)(Vi)+ S ^(k)(Vi)。