networkx 笔记:pagerank

理论部分可参考:李宏毅线性代数笔记 10: PageRank_UQI-LIUWJ的博客-CSDN博客

1  构造图

networkx相关部分可参考:python库整理:networkx 包_UQI-LIUWJ的博客-CSDN博客_networkx库

import networkx as nx

G=nx.DiGraph()
#创建有向图

edges = [("A", "B"), ("A", "C"), ("A", "D"), 
        ("B", "A"), ("B", "D"), ("C", "A"), 
        ("D", "B"), ("D", "C")]
#有向图边之间的关系


G.add_edges_from(edges)
#根据连边构造图


nx.draw(G,with_labels=True)
#画图

2 pagerank

pagerank_list=nx.pagerank(G,alpha=0.85)
pagerank_list
'''
{'A': 0.3245609358176831,
 'B': 0.22514635472743894,
 'C': 0.22514635472743894,
 'D': 0.22514635472743894}
'''

这里的alpha表示多少比例是根据连边选择link的,1-alpha表示随机选择link

所以alpha为0的时候是纯随机,每个link最终都是0.25

pagerank_list=nx.pagerank(G,alpha=0)
pagerank_list
'''
{'A': 0.25, 'B': 0.25, 'C': 0.25, 'D': 0.25}
'''

2.1 手动计算pagerank

pagerank_list=nx.pagerank(G,alpha=1)
pagerank_list.values()
'''
dict_values([0.33333396911621094, 0.22222201029459634, 0.22222201029459634, 0.22222201029459634])
'''

我们可以知道

\left\{\begin{matrix} X_A=\frac{1}{2}X_B+X_C\\ X_B=\frac{1}{3}X_A+\frac{1}{2}X_D\\ X_C=\frac{1}{3}X_A+\frac{1}{2}X_D\\ X_D=\frac{1}{3}X_A+\frac{1}{2}X_B \end{matrix}\right.

A=\begin{bmatrix} 0 & \frac{1}{2} & 1 & 0\\ \frac{1}{3} & 0 & 0 & \frac{1}{2}\\ \frac{1}{3} & 0 & 0 & \frac{1}{2}\\ \frac{1}{3} & \frac{1}{2} & 0 & 0 \end{bmatrix}, 结果应该是A的特征值1对应的特征向量:

计算特征向量可以参考:numpy笔记 linalg_UQI-LIUWJ的博客-CSDN博客

import numpy as np
a=np.array([[0,1/2,1,0],
           [1/3,0,0,1/2],
           [1/3,0,0,1/2],
           [1/3,1/2,0,0]])

np.linalg.eig(a)
'''
(array([-0.5,  1. ,  0. , -0.5]),
 array([[-0.8660254 ,  0.65465367,  0.70710678,  0.8660254 ],
        [ 0.28867513,  0.43643578, -0.47140452, -0.28867513],
        [ 0.28867513,  0.43643578,  0.23570226, -0.28867513],
        [ 0.28867513,  0.43643578, -0.47140452, -0.28867513]]))
'''

eig的结果返回两个对象,第一个是特征值,第二个矩阵每一列是对应的特征向量

然后pagerank的结果需要和为1,于是我们对第二列进行等比例放缩

np.linalg.eig(a)[1][:,1]/sum(np.linalg.eig(a)[1][:,1])
#array([0.33333333, 0.22222222, 0.22222222, 0.22222222])

可以看到,结果和networkx计算出来的是一样的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值