一口气
开始别憋气
终于Tex调好了 刚好最近又多次提及PageRank 于是~
目测这一系列 有个两三篇blog
PageRank 是 由佩奇(Larry Page)
等人提出 的 Google 最为有名的技术之一
我 乔治 甘拜下风
PageRank 是一种基于随机游走 的 评价网站权值的算法
言而总之 PageRank是一种十分重要的算法 不管在学术界 还是在产业界
Node Similarity & Proximity
在介绍PageRank 需要先来提一下 什么叫节点相似
假设在一个有向图集合G(V, E)中研究两个节点u, v之间的相关性
上图, 我们可以从感性的认识上判断u, v之间的相似高要比u, w之间的相似度要高
那如何来具体定义相似度呢
Common neighbor
我们很容易可以想到 好像 一个节点的邻居集合可以表征这个节点的周围结构
实际上这就是CN算法(common neighbor)
规定 C N ( u , v ) = n e i ( u ) ∩ n e i ( v ) CN(u, v)=nei(u)\cap nei(v) CN(u,v)=nei(u)∩nei(v)
Jaccard
单纯的数值对于估计一个节点的相似度 可能存在标准不统一的情况
故jaccard在CN的基础上做了一个归一化的处理
得到 J a c c a r d = C N ( u , v ) n e i ( u ) ∪ n e i ( v ) Jaccard=\dfrac{CN(u, v)}{nei(u)\cup nei(v)} Jaccard=nei(u)∪nei(v)CN(u,v)
Adamic-Adar Index
A d a m i c − A d a r I n d e x = ∑ 1 l o g N ( v ) Adamic-Adar Index=\sum \dfrac{1}{logN(v)} Adamic−AdarIndex=∑logN(v)1
当然还可以按计算时用到部分点还是全部点来进行分类
local
- Common Neighbors(CN), Jaccard, Adamic-Adar Index
grobal
- Personalized PageRank(PPR), SimRank, Katz
事实上 节点相似度在生产过程中有极强的落地场景
尤其是和社交网络分析相关的好友推荐
另外 还可以运用在Top-k的关系发现当中
传言王者荣耀的好友推荐 就是用PPR做的
最后需要提一句 N o d e S i m i l a r i t y ̸ = N o d e P r o x i m i t y Node Similarity\not = Node Proximity NodeSimilarity̸=NodeProximity
一般而言, s i m ( u , v ) = s i m ( v , u ) sim(u, v) = sim(v, u) sim(u,v)=sim(v,u), 但 p ( u , v ) ̸ = p ( v , u ) p(u, v) \not = p(v, u) p(u,v)̸=p(v,u)
Naive PageRank
P R ( u ) = ∑ v ∈ N i n ( u ) N 1 N o u t ( v ) P R ( v ) PR(u)=\sum\limits_{v \in N_{in}(u)}^N \dfrac{1}{N_{out}(v)}PR(v) PR(u)=v∈Nin(u)∑NNout(v)1PR(v)
S.t. P R ( u ) ≥ 0 PR(u) \ge 0 PR(u)≥0, ∑ P R = 1 \sum PR = 1 ∑PR=1
直观上看PR值的计算是一个迭代的过程,通过出度把PR值分配给下游节点
但Naive PageRank在计算的过程中会出现一些问题
P R ⃗ = P T ⋅ P R ⃗ \vec {PR} = P^T \cdot\vec{PR} PR=PT