网页排名图(graph)算法PageRank
关键问题
设计思想: 被优质网页所链接网页,多半也是优质的。 PR值与链接网页数量与质量方面成正比。
简化矩阵模型
PageRank值计算公式
- ,Bi为所有链接到网页i的集合,Lj为网页j的对外链接。
- 理解:对于j网页,将其Rank值均分为Lj份,给它指向的值;该算法是个迭代过程,对于i节点而言,从指向它的节点处获取rank值,又将自己当前的rank值分给它指向的节点,维持动态平衡。
eigenvalue:特征值
- 达到 R = HR状态,即动态平衡。
- 存在问题
- 设计思想:对于上网者而言,每一次所打开网页的操作都是随机的,既可能通过当前网页链接跳转,也可能直接输入网页地址进行浏览,考虑用户浏览行为。
- 图表示:
- 红色概率(1-p)用户随机跳转,蓝色概率p通过当前网页链接跳转
[设计思想其实很有意思,之前做FGSM算法时,曾了解过DI2-FGSM算法,其所进行的改进为:在样本输入模型之前,以一定概率p对其进行随机resize,padding操作,可以提高白盒攻击成功率]
- 矩阵表示
- H’ = dH + (1-d)[1/N] [d为阻尼因子,通常设置为0.85]
- 同理,要找到一个 R = H’R [R为列向量,代表PageRank值]
- PageRank公式
1-d为随机跳转到一个新网页的概率,d为按照超链接浏览概率
MapReduce实现PageRank[课设可用,重点]
迭代终止条件:
- PR值不改变
- 排序不改变
-
Phase1:GraphBuilder
数据集:每行一个网页名,以及其所链接的全部网页名。
- Target:建立各网页之间的链接关系
- Map:输出
, PR_init为该网页的初始值 -
Phase2: PageRankIter
迭代计算PR值。该循环写在作业提交外层,即在单机上进行判断
- Map:产生两种
对 - Rank值分发: for each u in link_list, emit
- 维护图结构:emit
- Rank值分发: for each u in link_list, emit
- Reduce
为当前URL的出度点 - 计算
之和,并乘上d,加上(1-d)/N,得到new_rank - emit (url, (new_rank, url_list))
再把该reduce值重新拿回PageRankiter进行迭代,传url_list的目的是为了符合PageRankiter的输入
- 伪代码
Phase3: RankViewer
输出排序结果。排序可通过框架自身的排序处理,重载key的比较函数。