当前位置: 首页 > news >正文

PageRank算法

一.定义-迭代算法

输入:含有 n n n个结点的有向图,转移矩阵 M M M,阻尼因子 d d d,初始向量 R 0 R_0 R0,计算精度 ϵ \epsilon ϵ

输出:有向图的PageRank向量 R R R

(1)令 t = 0 t=0 t=0

(2)计算
R t + 1 = d M R t + 1 − d n 1 R_{t+1} = dMR_t + \frac{ 1 - d }{ n} 1 Rt+1=dMRt+n1d1
(3)如果 R t + 1 R_{t+1} Rt+1 R t R_t Rt充分接近,令 R = R t + 1 R = R_{t+1} R=Rt+1,停止迭代。

(4)否则,令 t = t + 1 , 执行步骤 ( 2 ) t=t+1,执行步骤(2) t=t+1,执行步骤(2)

输入空间

n n n

M = ∣ 1 1 ⋯ 1 n ⋮ ⋮ ⋮ n 1 ⋯ n n ∣ M = \left| \begin{array}{cccc} 1_1 & \cdots & 1_n \\ \vdots & \vdots & \vdots\\ n_1 & \cdots & n_n \end{array} \right| M= 11n11nnn

d d d

R 0 = ∣ 1 1 ⋮ n 1 ∣ R_0 = \left| \begin{array}{cccc} 1_1 \\ \vdots \\ n_1 \end{array} \right| R0= 11n1

ϵ \epsilon ϵ

import numpy as np
n = 7  #有向图中一共有7个节点
M = np.array([[0, 1/4, 1/3, 0, 0, 1/2, 0],[1/4, 0, 0, 1/5, 0, 0, 0],[0, 1/4, 0, 1/5, 1/4, 0, 0],[0, 0, 1/3, 0, 1/4, 0, 0],[1/4, 0, 0, 1/5, 0, 0, 0],[1/4, 1/4, 0, 1/5, 1/4, 0, 0],[1/4, 1/4, 1/3, 1/5, 1/4, 1/2, 0]])  #根据有向图中各节点的连接情况写出转移矩阵
d = 0.85  #阻尼因子根据经验值确定,这里我们随意给一个值
R0 = np.full((7, 1), 1/7)  #设置初始向量R0,R0是一个7*1的列向量,因为有7个节点,我们把R0的每一个值都设为1/7
eps = 0.000001  #设置计算精度
np.shape(M)
np.shape(R0)

PageRank的迭代算法

R t + 1 = d M R t + 1 − d n 1 R_{t+1} = dMR_t + \frac{ 1 - d }{ n} 1 Rt+1=dMRt+n1d1

t = 0  #用来累计迭代次数
R = R0
judge = False  #用来判断是否继续迭代
while not judge:next_R = d * np.matmul(M, R) + (1 - d) / n * np.ones((7, 1))diff = np.linalg.norm(R - next_R)if diff < eps:judge = TrueR = next_Rt += 1
R = R / np.sum(R)
print('iter:', t)
print('PageRank: \n', R)

二.定义-幂法算法

输入:含有 n n n个结点的有向图,有向图的转移矩阵 M M M,系数 d d d,初始向量 x 0 x_0 x0,计算精度 ϵ \epsilon ϵ

输出:有向图的PageRank向量 R R R

(1)令 t = 0 , 选择初始向量 x 0 t=0,选择初始向量x_0 t=0,选择初始向量x0

(2)计算有向图的一般转移矩阵A
A = d M + 1 − d n E A = dM + \frac{ 1 - d }{ n} E A=dM+n1dE
(3)迭代并规范化结果向量

y t + 1 = A x t y_{t+1} = A_{xt} yt+1=Axt
x t + 1 = y t + 1 ∣ ∣ y t + 1 ∣ ∣ x_{t+1} = \frac{ y_{t+1} }{ ||y_{t+1}||} xt+1=∣∣yt+1∣∣yt+1
(4) 当 ∣ ∣ x t + 1 − x t ∣ ∣ < ϵ 时 , 令 R = x t , 停止迭代 当||x_{t+1}-x_t|| < \epsilon时,令R = x_t,停止迭代 ∣∣xt+1xt∣∣<ϵ,R=xt,停止迭代

(5)否则,令 t = t + 1 , 执行步骤 ( 3 ) t = t+1,执行步骤(3) t=t+1,执行步骤(3)

(6)对 R R R进行规范化处理,使其表示概率分布。

输入空间

n n n

M = ∣ 1 1 ⋯ 1 n ⋮ ⋮ ⋮ n 1 ⋯ n n ∣ M = \left| \begin{array}{cccc} 1_1 & \cdots & 1_n \\ \vdots & \vdots & \vdots\\ n_1 & \cdots & n_n \end{array} \right| M= 11n11nnn

d d d

x 0 = ∣ 1 1 ⋮ n 1 ∣ x_0 = \left| \begin{array}{cccc} 1_1 \\ \vdots \\ n_1 \end{array} \right| x0= 11n1

ϵ \epsilon ϵ

n = 7  #有向图中一共有7个节点
M = np.array([[0, 1/4, 1/3, 0, 0, 1/2, 0],[1/4, 0, 0, 1/5, 0, 0, 0],[0, 1/4, 0, 1/5, 1/4, 0, 0],[0, 0, 1/3, 0, 1/4, 0, 0],[1/4, 0, 0, 1/5, 0, 0, 0],[1/4, 1/4, 0, 1/5, 1/4, 0, 0],[1/4, 1/4, 1/3, 1/5, 1/4, 1/2, 0]])  #根据有向图中各节点的连接情况写出转移矩阵
d = 0.85  #阻尼因子根据经验值确定,这里我们随意给一个值
x_0 = np.full((7, 1), 1/7) #对x向量进行初始化
eps = 0.000001  #设置计算精度
np.shape(M)
np.shape(x_0)

PageRank的幂法算法

A = d M + 1 − d n E A = dM + \frac{ 1 - d }{ n} E A=dM+n1dE
y t + 1 = A x t y_{t+1} = A_{xt} yt+1=Axt
x t + 1 = y t + 1 ∣ ∣ y t + 1 ∣ ∣ x_{t+1} = \frac{ y_{t+1} }{ ||y_{t+1}||} xt+1=∣∣yt+1∣∣yt+1

t = 0  #用来累计迭代次数
judge = False  #用来判断是否继续迭代
A = d * M + (1 - d) / n * np.eye(n)  #计算A矩阵,其中np.eye(n)用来创建n阶单位阵E
while not judge:next_y = np.matmul(A, x_0)  #计算新的y向量next_x = next_y / np.linalg.norm(next_y)  #对新的y向量规范化得到新的x向量diff = np.linalg.norm(x_0 - next_x)  #计算新的x向量与之前的x向量之间的距离,这里采用的是欧氏距离if diff < eps:  #若两向量之间的距离足够小judge = True  #则停止迭代R = x_0  #得到R向量x_0 = next_x  #更新x向量t += 1  #迭代次数加一
R = R / np.sum(R)  #对R向量进行规范化,保证其总和为1,表示各节点的概率分布
print('iter:', t)
print('PageRank: \n', R)

相关文章:

PageRank算法

一.定义-迭代算法 输入:含有 n n n个结点的有向图,转移矩阵 M M M,阻尼因子 d d d,初始向量 R 0 R_0 R0​,计算精度 ϵ \epsilon ϵ 输出:有向图的PageRank向量 R R R (1)令 t 0 t0 t0 (2)计算 R t 1 d M R t 1 − d n 1 R_{t1} dMR_t \frac{ 1 - d }{ n} 1 Rt1​dMRt​…...

YOLOv8改进 | 模块缝合 | C2f 融合Self-Calibrated Convolutions丰富特征图【CVPR2020】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…...

跨境反向代购淘宝京东商品系统的商品价格详情等数据如何轻松自动化获取?

在跨境电商领域&#xff0c;反向代购系统逐渐成为连接国内外市场的重要桥梁。随着技术的不断发展和市场的日益成熟&#xff0c;如何高效、准确地自动化获取淘宝、京东等电商平台的商品价格、详情等数据&#xff0c;成为跨境反向代购系统开发者必须面对的重要课题。本文将详细介…...

初始爬虫5

响应码&#xff1a; 数据处理&#xff1a; re模块&#xff08;正则表达式&#xff09; re模块是Python中用于正则表达式操作的标准库。它提供了一些功能强大的方法来执行模式匹配和文本处理。以下是re模块的一些常见用法及其详细说明&#xff1a; 1. 基本用法 1.1 匹配模式 …...

深度盘点:2024年企业最喜欢用的WMS仓库管理系统有哪些?

本文将列举国内外知名的仓库管理系统&#xff0c;从每个系统的适用范围、核心功能、特点来为大家解读。为企业选型提供参考&#xff01; WMS系统是Warehouse Management System&#xff08;仓库管理系统&#xff09;的简称&#xff0c;它是一个帮助企业和仓库管理者高效管理仓库…...

qt如何通过特定字符将字符串拆分写入输入?

在Qt中&#xff0c;处理字符串并基于特定字符拆分字符串然后将其写入&#xff08;比如输入控件、文件等&#xff09;是一项常见的任务。Qt提供了丰富的字符串处理功能&#xff0c;其中最常用的类是QString。以下是一个简单的示例&#xff0c;展示如何使用Qt和QString类基于特定…...

结构体实现位段

目录 1.什么是位段 2.位段的计算 3. 位段的内存分配 4.位段的跨平台问题 5.位段的应⽤ 6.位段使⽤的注意事项 1.什么是位段 段位的声明和结构体是类似的&#xff0c;但有两个不同之处&#xff1a; 1. 位段的成员必须是 int &#xff0c;unsigned int&#xff0c;或 sign…...

刷题DAY35

判断回文数 题目&#xff1a;MM们都爱美&#xff0c;“回文”就是一种非常美的特殊的数或者文字短语&#xff0c;他们无论是顺读还是倒读&#xff0c;结果都一样。例如&#xff1a;12321&#xff0c; 55555&#xff0c;45554。如果GG们动不动来一段回文向MM们表达一下&#xf…...

LVS--负载均衡调度器

文章目录 集群和分布式集群分布式 LVS介绍LVS特点LVS工作原理LVS集群架构 LVS集群中的术语CIPVIPRSDIPRIP LVS集群的工作模式NAT模式DR模式DR的工作原理DR的特点:DR的网络配置1.配置负载均衡器2.配置后端服务器lo接口的作用 3.测试连接&#xff1a; DR的典型应用场景 TUN模式 L…...

windows@共享网络共享打印机@局域网内远程调用打印机打印

文章目录 abstract流程简述预备工作启动服务&#x1f388;启用网络发现和共享开关检查共享密码保护(可选) 相关概念通过GUI设置局域网共享打印机使用开始菜单直接跳转到打印机设置逐步操作 命令行配置方式使用net命令共享打印机使用powershell相关模块配置 使用PowerShell 配置…...

sql格式化工具

1.在线格式化工具:https://www.qianbo.com.cn/Tool/Beautify/Sql-Formatter.html 2. 格式化后用拼接 string sql " SELECT rack.rackRow,rack.rackColumn,rack.rackLayer FROM rack LEFT JOIN TaskListON rack.rackColumn TaskList.Unload_ColAND rack.rackRow TaskL…...

[Python办公]常用Python数据采集爬虫技术对比

常用的数据采集技术可以分为以下几种&#xff1a; 1.网页抓取&#xff08;Web Scraping&#xff09; 网页抓取是通过模拟浏览器行为或直接发送请求来获取网页内容的技术。其核心目标是从 HTML 网页中提取有价值的数据。 常用工具&#xff1a;requests、BeautifulSoup、Selen…...

相机光学(三十七)——自动对焦原理

1.自动对焦的三种方式 目前在手机上采用的自动对焦系统包括反差对焦、相位对焦和激光对焦三种方案&#xff0c;下面我们来看一下它们的工作原理和相互之间的区别是什么。 1.1反差对焦【CDAF】- Contrast Detection Auto Focus 反差对焦是目前普及率最高、使用最广泛、成本相对…...

Go语言现代web开发05 指针和结构体

指针 Pointers are complex data types that store the memory address of value. Simply put, if we have a value stored in the memory address as 100 and a pointer to that value, the pointer value will be 100. The default value for a pointer is nil. Nil pointer…...

Postgresql 删除数组中的元素

extra为 {“a”: [null, 3, null],“b”: 111} 使用sql 将extra中a中的null移除 第一步&#xff1a; 首先先把[null, 3, null]移除&#xff0c; select json_agg(elem) filter ( where elem ! null ) from (select jsonb_array_elements([null,3,null]::jsonb) as elem) t;这…...

docker 多服务只暴露一个客户端

业务场景 docker部署多个服务时候,当为了安全考虑 部署了多个服务,数据库,缓存库,文件服务器啥的,如果全都暴露的话可能会增加资源侵入的风险,所以只需要挂载一个客户端端口给外部访问即可,其他服务均在内网,保障资源安全 docker 网络 可以把容器们都放在同一网络下,由于docke…...

DFS算法专题(二)——穷举vs暴搜vs深搜vs回溯vs剪枝【OF决策树】

目录 1、决策树 2、算法实战应用【leetcode】 2.1 题一&#xff1a;全排列 2.2.1 算法原理 2.2.2 算法代码 2.2 题二&#xff1a;子集 2.2.1 算法原理【策略一】 2.2.2 算法代码【策略一】 2.2.3 算法原理【策略二&#xff0c;推荐】 2.2.4 算法代码【策略二&#x…...

Spring Security 快速开始

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> 一、认证 1、从数据中读数据完成认证 Service public class MyUserDetailsService implements UserDeta…...

Lua5.3 参考手册

《Lua 5.3 参考手册》是对 Lua 5.3 版本语言的官方定义。这份手册详细描述了 Lua 语言的语法、语义以及标准库和 C API。它是由巴西里约热内卢 Pontifical Catholic 大学的 PUC-Rio 团队开发的&#xff0c;并且是一个自由软件&#xff0c;广泛应用于世界各地的产品和项目中【9†…...

Centos如何配置阿里云的yum仓库作为yum源?

背景 Centos在国内访问官方yum源慢&#xff0c;可以用国内的yum源&#xff0c;本文以阿里云yum源为例说明。 快速命令 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.a…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...