美文网首页
PageRank 的随机浏览模型代码

PageRank 的随机浏览模型代码

作者: 程非池的小软 | 来源:发表于2022-03-25 22:51 被阅读0次

具体的概念网上均可搜到,仅展示代码实现

有向图.jpg
class Graph:
    def __init__(self):
        self.linked_node_map = {}  # 邻接表\
        self.linked_node_map_f ={}
        self.PR_map_1 = {}
        self.PR_map = {}  # 存储重要性

    def add_node(self, node_id):
        if node_id not in self.linked_node_map:
            self.linked_node_map[node_id] = set({})
        if node_id not in self.linked_node_map_f:
            self.linked_node_map_f[node_id] = set({})
        self.PR_map[node_id] = 0
        self.PR_map_1[node_id] = 0

        # else:
        #     print("此节点已存在")

    def add_link(self, node1, node2):
        if node1 not in self.linked_node_map:
            self.add_node(node1)
        if node2 not in self.linked_node_map:
            self.add_node(node2)
        self.linked_node_map[node1].add(node2)
        self.linked_node_map_f[node2].add(node1)

    # 计算pr
    def get_PR(self, epoch_num=100, d=0.85):
        L=len(self.linked_node_map)
        for j in range(epoch_num):
            if j == 0:
                for node in self.PR_map_1:
                    self.PR_map_1[node] = 1 / (len(self.linked_node_map))
            else:
                self.PR_map_1 = self.PR_map
            sum1 = 0
            for node in self.PR_map:
                list1 = list(self.linked_node_map_f[node])
                for i in list1:
                    sum1 += self.PR_map_1[i] / len(self.linked_node_map[i])
                self.PR_map[node] = ((1 - d) / L) + d * sum1
                sum1 = 0
        print(self.PR_map)



edges = [[1, 2], [1, 3], [1, 4], [2, 1], [2, 4], [3, 1], [4, 2], [4, 3]]


if __name__ == "__main__":
    graph = Graph()
    for edge in edges:
        graph.add_link(edge[0], edge[1])  # node1,node2
    print("邻接表:", graph.linked_node_map)
    print("表示入度的表:", graph.linked_node_map_f)
    graph.get_PR()


运行结果

运行结果1.png

对比networkx库中的 nx.pagerank(G, alpha=0.85,max_iter=100)方法

import networkx as nx

# 创建有向图
G = nx.DiGraph()
# 有向图之间边的关系
edges = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "A"), ("B", "D"), ("C", "A"), ("D", "B"), ("D", "C")]
for edge in edges:
    G.add_edge(edge[0], edge[1])

page_rank_list = nx.pagerank(G, alpha=0.85,max_iter=100)

print("page_rank value:", page_rank_list)

运行结果


运行结果2.png

相关文章

  • PageRank 的随机浏览模型代码

    具体的概念网上均可搜到,仅展示代码实现 运行结果 对比networkx库中的 nx.pagerank(G, alp...

  • Arxiv网络科学论文摘要21篇(2020-09-01)

    再探随机冲浪:泛化PageRank的远程传输模型; 信任与可靠的演化; 大规模异构学术网络中名称消歧的成对学习; ...

  • [ITSTAR]第三课:Hadoop的背景起源二:MapRedu

    MapReduce模型: MapReduce基础编程模型: PageRank(搜索排名): 详细内容:

  • Pagerank算法

    一. Pagerank介绍PageRank算法以前就是Google的网页排序算法。PageRank算法,对每个目标...

  • Arxiv网络科学论文摘要17篇(2018-12-27)

    基于PageRank的模糊社区推荐系统; 通过自注意网络学习动态图表示; 复杂网络中噪声诱导的去同步和随机均衡脱离...

  • 常用图算法实现--Hadoop

    PageRank 数据准备 边: 网页: 将这两个文件放入HDFS: 编写程序 PageRank PageRank...

  • JavaScript BOM/DOM

    一、BOM(1) 认识BOMBOM:浏览器对象模型JavaScript代码中访问和操作浏览器的各种信息的一系列特殊...

  • 任务队列、异步、函数节流

    浏览器的单线程模型 在浏览器中,JS 的代码执行是单线程模式。就是只有一个线程去处理 JS 代码,一旦当前队列中有...

  • 查看金融模型课件2跟书 随机过程 随机分析

  • 模型定义

    模型是什么,是随机变量之间的关系,比如下不下雨的随机变量直接影响地面的干湿程度的随机变量。对于模型来说,模型的概率...

网友评论

      本文标题:PageRank 的随机浏览模型代码

      本文链接:https://www.haomeiwen.com/subject/rtcjjrtx.html