大学精神文明建设专题网站,几年前我为客户建设网站,英文版wordpress,wordpress自定义顶部图神经网络 图神经网络图神经网络一、PageRank简介1.1互联网的图表示1.2PageRank算法概述1.3求解PageRank二、代码实战2.1引入库2.2加载数据#xff0c;并构建图2.3计算每个节点PageRank重要度2.4用节点尺寸可视化PageRank值一、PageRank简介
PageRank是Google最早的搜索引擎…图神经网络 图神经网络图神经网络一、PageRank简介1.1互联网的图表示1.2PageRank算法概述1.3求解PageRank二、代码实战2.1引入库2.2加载数据并构建图2.3计算每个节点PageRank重要度2.4用节点尺寸可视化PageRank值一、PageRank简介
PageRank是Google最早的搜索引擎算法。其基本逻辑是给每个网页重要度打分高分靠前。
1.1互联网的图表示
Web Pages表示为NodesHyperlinks表示为Edges把互联网当作一个整体的系统网页之间存在关联而不是孤立的个体网页可以表示成导航连接式网页无标度网络Scale-Free呈现幂律分布
1.2PageRank算法概述
PageRank使用连接信息计算节点的重要度理解PageRank的5个角度迭代求解线性方程组、迭代左乘M矩阵、矩阵的特征向量、随机游走、马尔可夫链迭代求解线性方程组重要节点引出的稀少链接权重更高迭代左乘M矩阵将重要度写成矩阵的形式左乘重要度矩阵通过不断地迭代左乘M矩阵矩阵会稳定收敛即得到M矩阵的主特征向量随机游走随机游走每个网页计数求和之后再归一化成每个网页的概率即PageRank值马尔可夫链每个节点表示一种状态节点之间的连接表示状态的转移根据状态转移矩阵可以计算下一个时刻的状态转移概率
1.3求解PageRank
推荐方式迭代左乘M矩阵幂迭代
二、代码实战
2.1引入库
import networkx as nx
import numpy as np
import random
import pandas as pd# 数据可视化
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus]False # 用来正常显示负号2.2加载数据并构建图
# 西游记人物数据集
df pd.read_csv(data/journey_to_the_west/triples.csv)
Copy to clipboardErrorCopied
edges [edge for edge in zip(df[head], df[tail])]G nx.DiGraph()
G.add_edges_from(edges)
Copy to clipboardErrorCopied
# 可视化
plt.figure(figsize(14,14))
pos nx.spring_layout(G, iterations3, seed5)
nx.draw(G, pos, with_labelsTrue)
plt.show()2.3计算每个节点PageRank重要度
pagerank nx.pagerank(G, # NetworkX graph 有向图如果是无向图则自动转为双向有向图alpha0.85, # Damping FactorpersonalizationNone, # 是否开启Personalized PageRank随机传送至指定节点集合的概率更高或更低max_iter100, # 最大迭代次数tol1e-06, # 判定收敛的误差nstartNone, # 每个节点初始PageRank值 danglingNone, # Dead End死胡同节点
)
Copy to clipboardErrorCopied
# 按PageRank值从高到低排序
pagerank_sorted_values sorted(pagerank.items(),keylambda x : x[1], reverseTrue)
Copy to clipboardErrorCopied
pagerank_sorted_values[:5]2.4用节点尺寸可视化PageRank值
# 节点尺寸
node_sizes (np.array(list(pagerank.values())) * 8000).astype(int)
Copy to clipboardErrorCopied
# 节点颜色
M G.number_of_edges()
edge_colors range(2, M 2)
Copy to clipboardErrorCopied
plt.figure(figsize(15,14))# 绘制节点
nodes nx.draw_networkx_nodes(G, pos, node_sizenode_sizes, node_colornode_sizes)# 绘制连接
edges nx.draw_networkx_edges(G,pos,node_sizenode_sizes, # 节点尺寸arrowstyle-, # 箭头样式arrowsize20, # 箭头尺寸edge_coloredge_colors, # 连接颜色edge_cmapplt.cm.plasma,# 连接配色方案可选plt.cm.Blueswidth4 # 连接线宽
)# 设置每个连接的透明度
edge_alphas [(5 i) / (M 4) for i in range(M)]
for i in range(M):edges[i].set_alpha(edge_alphas[i])# # 图例
# pc mpl.collections.PatchCollection(edges, cmapcmap)
# pc.set_array(edge_colors)
# plt.colorbar(pc)ax plt.gca()
ax.set_axis_off()
plt.show()