📜  在Python使用随机游走方法实现 Page Rank

📅  最后修改于: 2021-09-07 05:20:49             🧑  作者: Mango

先决条件:页面排名算法和实现,随机游走

在社交网络页面排名是一个非常重要的话题。基本上,页面排名只不过是根据网页的重要性和搜索相关性对网页进行排名的方式。所有搜索引擎都使用页面排名。 Google 是使用网络图使用页面排名的最佳示例。

随机游走方法——在随机游走方法中,我们将从图中均匀地随机选择 1 个节点。选择节点后,我们将查看其邻居并随机均匀地选择一个邻居并继续这些迭代,直到达到收敛。在 N 次迭代后,会出现一个点,之后每个节点的点都不会发生变化。这种情况称为收敛。

算法:以下是实现随机游走方法的步骤。

  1. 创建一个有 N 个节点的有向图。
  2. 现在执行随机游走。
  3. 现在在随机游走期间根据点获取排序节点。
  4. 最后,将其与内置的 PageRank 方法进行比较。

下面是实现点分布算法的Python代码。

Python3
import networkx as nx
import random
import numpy as np
  
# Add directed edges in graph
def add_edges(g, pr):
    for each in g.nodes():
        for each1 in g.nodes():
            if (each != each1):
                ra = random.random()
                if (ra < pr):
                    g.add_edge(each, each1)
                else:
                    continue
    return g
  
# Sort the nodes
def nodes_sorted(g, points):
    t = np.array(points)
    t = np.argsort(-t)
    return t
  
# Distribute points randomly in a graph
def random_Walk(g):
    rwp = [0 for i in range(g.number_of_nodes())]
    nodes = list(g.nodes())
    r = random.choice(nodes)
    rwp[r] += 1
    neigh = list(g.out_edges(r))
    z = 0
      
    while (z != 10000):
        if (len(neigh) == 0):
            focus = random.choice(nodes)
        else:
            r1 = random.choice(neigh)
            focus = r1[1]
        rwp[focus] += 1
        neigh = list(g.out_edges(focus))
        z += 1
    return rwp
  
  
# Main
# 1. Create a directed graph with N nodes
g = nx.DiGraph()
N = 15
g.add_nodes_from(range(N))
  
# 2. Add directed edges in graph
g = add_edges(g, 0.4)
  
# 3. perform a random walk
points = random_Walk(g)
  
# 4. Get nodes rank according to their random walk points
sorted_by_points = nodes_sorted(g, points)
print("PageRank using Random Walk Method")
print(sorted_by_points)
  
# p_dict is dictionary of tuples
p_dict = nx.pagerank(g)
p_sort = sorted(p_dict.items(), key=lambda x: x[1], reverse=True)
  
print("PageRank using inbuilt pagerank method")
for i in p_sort:
    print(i[0], end=", ")


输出:

PageRank using Random Walk Method
[ 9 10  4  6  3  8 13 14  0  7  1  2  5 12 11]
PageRank using inbuilt pagerank method
9, 10, 6, 3, 4, 8, 13, 0, 14, 7, 1, 2, 5, 12, 11,