📜  在Python使用Random Walk方法实现页面排名

📅  最后修改于: 2021-04-17 11:44:37             🧑  作者: Mango

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

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

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

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

  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,