【经典 PageRank 】01/2 PageRank的基本原理

news2024/10/6 22:33:26

一、说明

         PageRank是Google搜索算法中使用的一种算法,用于确定页面的重要性和排名。 它是通过对网页间的链接关系进行评估来计算的,具有较高的链接权重的网页将获得较高的PageRank值。 PageRank是一个0到10的指标,其中10是最高级别,表示网页是高质量,受欢迎且有价值的。虽然Google对PageRank的重要性逐渐下降,但它仍然是搜索引擎排名因素之一,特别是在SEO优化领域中。        

二、PageRank算法的启发因素

2.1 算法兴起

        PageRank (PR) 是 Google 搜索使用的一种算法,用于在其搜索引擎结果中对网页进行排名。1996 年由Page和Brin提出,它以“网页”一词和联合创始人拉里佩奇的名字命名。 PageRank 是一种衡量网站页面重要性的方法。这个算法后被NLP采用,作为词热度的算法如TextRank,本篇专门研究这个算法。

        PageRank 可以定义在任意有向图上,而与之类似的问题都可以用此模型,因而被应用到社会影响力分析、文本摘要等多个问题,成了越来越被关注的经典算法。

2.2 算法的理论依据

        PageRank算法的基本想法是在有向图上定义一个随机游走模型,即一阶马尔可夫链,描述随机游走者沿着有向图随机访问各个结点的行为。在一定条件下,极限情况访问每个结点的概率收敛到平稳分布,这时各个结点的平稳概率值就是其PageRank值,表示结点的重要度。PageRank 是递归定义的,PageRank 的计算可以通过迭代算法进行。

2.3 关于网页热度的假设

        网页的热度究竟如何定义才算好?其实很朴素的理由决定了一个大的作d为。

        历史上,PageRank算法作为计算互联网网页重要度的算法被提出。PageRank是定义在网页集合上的一个函数,它对每个网页给出一个正实数,表示网页的重要程度,整体构成一个向量,PageRank值越高,网页就越重要,在互联网搜索的排序中可能就被排在前面。

        也就是大白话:

  •         人家访问我,给我增加热度,人家热度不变;
  •         我访问人家,给人家增加热度。我的热度不变

2.4 有向图的崛起

        AI研究者应该对有向图敏感起来,对于许多类网络模型,实际上都有意义。

        在实际应用中许多数据都以图(graph)的形式存在,比如,互联网、社交网络都可以看作是一个图。图数据上的机器学习具有理论与应用上的重要意义。 PageRank 算 法是图的链接分析(link analysis)的代表性算法,属于图数据上的无监督学习方法。

三、PageRank算法描述

        设计本算法用到的概念是:有向图、节点出度和入度、转移矩阵、递归;

        算法:下面是实现随机漫步方法的步骤。

  • 创建一个具有N个节点的有向图。
  • 现在进行随机漫步。
  • 现在,在随机行走过程中根据点对节点进行排序。
  • 最后,将其与内置的PageRank方法进行了比较。

3.1 构建一个网络有向图

        假如一个局域网的网络环境,随着业务进行,有如下访问网络有向图。 网络可以像有向图一样表示,其中节点表示网页,边在它们之间形成链接。通常,如果节点(网页)i链接到节点j,则意味着i指的是j。

图1 五个节点的网络环境

 3.2 知名度模型

        我们必须定义什么是网页的重要性。作为第一种方法,我们可以说是指引用它的网页的总数。如果我们停止使用这个标准,那么引用它的这些网页的重要性就不会被考虑在内。换句话说,一个重要的网页和一个不太重要的网页具有相同的权重。另一种方法是假设一个网页将其重要性平均分配给它链接到的所有网页。通过这样做,我们可以定义节点j的分数如下:、

        其中rᵢ是节点i和的分数,dᵢ是i节点的出度。Σ是所有节点i,其中对j节点有出度,我们可以写出这个线性系统:

        通过把这个线性系统的右边代入左边,我们得到了一个新的线性系统,我们可以用高斯消去法求解。但这种解决方案仅限于小型图。事实上,由于这类图是稀疏的,并且高斯消去法在执行其运算时会修改矩阵,因此我们会失去矩阵的稀疏性,并占用更多的内存空间。在最坏的情况下,不能再存储矩阵。

 3.3 构成一维马尔可夫链和(Markov Chain)

        由于马尔可夫链是由初始分布和转移矩阵定义的,因此上图可以被视为具有以下转移矩阵的马尔可夫链:

        与我们的示例相对应的转换矩阵,我们注意到P转置是行随机的,这是应用马尔可夫链定理的一个条件。对于初始分布,让我们考虑它等于:

        其中n是节点的总数。这意味着随机行走器将随机选择它可以到达所有其他节点的初始节点。

        在每一步,随机行者都会根据转移矩阵跳到另一个节点。然后计算每个步骤的概率分布。这个分布告诉我们,经过一定数量的步骤后,随机游走者可能会在哪里。概率分布使用以下公式计算:

        马尔可夫链的平稳分布是π=Pπ的概率分布π。这意味着一步之后分布不会改变。需要注意的是,并不是所有的马尔可夫链都允许平稳分布。

        如果马尔可夫链是强连通的,这意味着任何节点都可以从任何其他节点到达,那么它允许平稳分布。我们的问题就是这样。因此,经过无限长的步行,我们知道概率分布将收敛到平稳分布π。

3.4 计算方法

        (以上我们已经清楚知道这个模型的设计方法,其它就是个算法问题了) 

        我们注意到π是特征值为1的矩阵P的特征向量。我们使用Frobenius-Perron定理,而不是计算P的所有特征向量并选择对应于特征值1的特征向量。

        根据Frobenius-Perron定理,如果矩阵a是一个平方正矩阵(它的所有项都是正的),则它有一个正的特征值r,如|λ|<r,其中λ是a的特征值。具有特征值r的A的特征向量v是正的,并且是唯一的正特征向量。

        在我们的例子中,矩阵P是正的和平方的。平稳分布π必然是正的,因为它是一个概率分布。我们得出π是P的主特征向量,其主特征值为1。

        为了计算π,我们使用幂法迭代,这是一种计算给定矩阵a的主特征向量的迭代方法。从可以随机初始化的主特征向量b的初始近似开始,该算法将使用以下算法更新它直到收敛:

四、实验代码

1)对一个具体图的迭代算法。此为原理性伪代码。

2)更正规的代码,对任意有向图进行迭代收敛:见本文title的上传资源(80行python)。

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=", ")

五、后记

        以上代码是属于原理验证,真实的实用算法将包含网络、服务器、数据库等大规模编程。除了兼顾准确还要兼顾效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正点原子嵌入式linux驱动开发——Linux并发与竞争

Linux是一个多任务操作系统&#xff0c;肯定会存在多个任务共同操作同一段内存或者设备的情况&#xff0c;多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护&#xff0c;也就是要处理对共享资源的并发访问。在Linux驱动编写过程中对于并发控制…

前端TypeScript学习day05-索引签名、映射与类型声明文件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 索引签名类型 映射类型 索引查询&#xff08;访问&#xff09;类型 基本使用 同时查询多个索引的类型…

2023天猫双十一活动时间表 天猫淘宝双11预售几号开始付定金

双十一购物节是生活不可或缺的一部分&#xff0c;不论是满足基本需求还是享受生活乐趣&#xff0c;都需要购物。因此&#xff0c;双十一绝对是一个不容错过的绝佳机会&#xff0c;希望大家能善用这个机会&#xff0c;因为错过了就得再等一整年。 每日领红包&#xff1a;红包有…

基于袋獾优化的BP神经网络(分类应用) - 附代码

基于袋獾优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于袋獾优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.袋獾优化BP神经网络3.1 BP神经网络参数设置3.2 袋獾算法应用 4.测试结果&#xff1a;5.M…

MYSQL第一章节DDL数据定义语言的操作(DDL-数据库操作,DDL-操作表-查询,DDL-操作表-修改,数据库的基本类型)

c知识点合集已经完成欢迎前往主页查看&#xff0c;点点赞点点关注不迷路哦 点我进入c第一章知识点合集 MYSQL第一章节DDL数据定义语言的操作 目录 DDL-数据库操作 查询所有数据库 查询当前数据库 创建数据库 删除数据库 DDL-操作表-查询 查询当前数据库中的所有表 查询表结构…

基于斑马优化的BP神经网络(分类应用) - 附代码

基于斑马优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于斑马优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.斑马优化BP神经网络3.1 BP神经网络参数设置3.2 斑马算法应用 4.测试结果&#xff1a;5.M…

【iOS】MVC模式

MVC&#xff08;Model-View-Controller&#xff0c;模型-视图-控制器&#xff09;模式是相当古老的设计模式之一&#xff0c;ta最早出现在SmallTalk语言中。现在&#xff0c;很多计算机语言和架构都采用了MVC模式。 MVC模式概述 MVC模式是一种设计模式&#xff0c;由3部分组成…

图论05-【无权无向】-图的广度优先遍历-路径问题/检测环/二分图/最短路径问题

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 联通分量5. 环检测5.1 思路5.2 主要代码 6. 二分图检测6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 判断相邻两点的颜色是否一致 7. 最短路径问题7.1 思路7.2 代码 1. 代码…

基于SSM的物业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

AdaBoost:增强机器学习的力量

一、介绍 机器学习已成为现代技术的基石&#xff0c;为从推荐系统到自动驾驶汽车的一切提供动力。在众多机器学习算法中&#xff0c;AdaBoost&#xff08;自适应增强的缩写&#xff09;作为一种强大的集成方法脱颖而出&#xff0c;为该领域的成功做出了重大贡献。AdaBoost 是一…

数据分析案例-顾客购物数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

今年阿里云双十一服务器优惠价格讨论_看看大家怎么说?

2023阿里云双十一云服务器大概会降到什么区间&#xff1f;阿里云服务器网认为会在当前的优惠价格基础上&#xff0c;降价10%左右&#xff0c;可以在阿里云CLUB中心领券&#xff1a;aliyun.club 云服务器专用满减优惠券。阿里云服务器网从各个渠道了解到大家对今年阿里云双十一服…

在用visualstudio连接数据库显示已存在以及此版本的SQLServer不支持用户实例登录解决

在写.NET实验时用visualstudio连接数据库显示”此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“&#xff0c;我是开始在数据库已经导入了这个mbf文件的。然后就去网上找一堆办法。 失败经历&#xff1a; 按照教程操作后代码语句运行显示数据库已存在。按照网上的…

王道计算机考研 操作系统学习笔记 + 完整思维导图篇章四: 文件管理

目录 文件管理 文件的逻辑结构 无结构文件 有结构文件 顺序文件 索引文件 索引顺序文件 文件目录 文件控制块&#xff08;FCB&#xff09; 目录结构分类 单级目录结构 两级目录结构 多级目录结构 &#xff08;树形目录结构&#xff09; 无环图目录结构 索引节点 文件的物理结构…

【经典PageRank 】02/2 算法和线性代数

系列前文&#xff1a;【经典 PageRank 】01/2 PageRank的基本原理-CSDN博客 一、说明 并非所有连接都同样重要&#xff01; 该算法由 Sergey 和 Lawrence 开发&#xff0c;用于在 Google 搜索中对网页进行排名。基本原则是重要或值得信赖的网页更有可能链接到其他重要网页。例…

2023.10.21 关于 阻塞队列

目录 阻塞队列 优先级队列&#xff08;Priority Queue&#xff09; 阻塞队列&#xff08;Blocking Queue&#xff09; 消息队列&#xff08;Message Queue&#xff09; 生产者消费者模型 生产者消费者模型的两个好处 标准库阻塞队列使用 实现一个简单 生产者消费者模型…

【网络编程】基于epoll的ET模式下的Reactor

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Reactor介绍 二、基于epoll的ET模式下的Reactor计算器代码 1、Tcp…

C++之构造函数、析构函数、拷贝构造函数终极指南:玩转对象的诞生、生命周期与复制

W...Y的主页 代码片段分享 前言&#xff1a; 在上篇内容里&#xff0c;我们初识了C中的类与对象&#xff0c;了解了类的定义、类的实例化、 类的作用域等等&#xff0c;今天我们将继续深入了解类与对象的相关内容&#xff0c;学习构造函数、析构函数与拷贝构造函数&#xff…

WebGL笔记:图形转面的原理与实现

1 &#xff09;回顾 WebGL 三种面的适应场景 TRIANGLES 单独三角形TRIANGLE_STRIP 三角带TRIANGLE_FAN 三角扇备注 在实际的引擎开发中&#xff0c;TRIANGLES 是用得最多的TRIANGLES 的优势是可以绘制任意模型&#xff0c;缺点是比较费点 2 &#xff09;适合 TRIANGLES 单独…

Apache JMeter 安装教程

下载&#xff1a; 注意事项&#xff1a;使用JMeter前需要配置JDK环境 下载地址 下载安装以后&#xff0c;打开安装的bin目录 D:\software\apache-jmeter-5.4.1\apache-jmeter-5.4.1\bin&#xff0c;找到jmeter.bat&#xff0c;双击打开 打开后的样子 语言设置&#xff1a; 1…