当前位置: 首页 > 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…...

实战指南:构建高性能离线语音识别系统的完整方案

实战指南&#xff1a;构建高性能离线语音识别系统的完整方案 【免费下载链接】whisper-base.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-base.en 在数据隐私日益受到重视的今天&#xff0c;本地化语音识别技术为处理敏感语音内容提供了安全可靠的…...

别再乱用Adam了!PyTorch中AdamW优化器的正确打开方式(附代码示例)

别再乱用Adam了&#xff01;PyTorch中AdamW优化器的正确打开方式&#xff08;附代码示例&#xff09; 当你盯着训练曲线发呆&#xff0c;发现验证集表现始终不如预期时&#xff0c;或许该检查一下优化器的选择了。很多开发者习惯性地在PyTorch脚本里写下optim.Adam(model.para…...

浏览器指纹追踪:为什么网站能一眼认出你?

很多人都有过这种经历&#xff1a;明明把浏览器Cookie全清了、开了无痕模式&#xff0c;甚至换了个新账号登录&#xff0c;结果广告推送还是老样子&#xff0c;风控验证直接弹出来。感觉自己被网站“记住”了&#xff0c;却又说不清是怎么回事。其实&#xff0c;这里面很大一部…...

别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程)

别再手动录单了&#xff01;手把手教你用U9C OpenAPI打通钉钉审批流&#xff08;含完整配置流程&#xff09; 当财务部的张经理第17次因为手工录入错误被审计部门退回单据时&#xff0c;他摔掉键盘的冲动都有了。这场景在很多企业司空见惯——U9C系统承载着核心业务数据&#…...

Python多解释器不是“未来技术”——它已在金融高频交易系统稳定运行417天(附完整监控看板截图)

第一章&#xff1a;Python多解释器的核心机制与历史演进Python长期以来以全局解释器锁&#xff08;GIL&#xff09;为标志性设计&#xff0c;单解释器模型主导了其执行范式。然而&#xff0c;随着多核硬件普及与异步编程兴起&#xff0c;对真正并行执行、内存隔离及轻量级运行时…...

springboot-vue基于web的智慧校园学生信息管理平台设计和实现

目录技术栈选择系统模块划分开发流程规划关键代码示例&#xff08;后端&#xff09;部署方案扩展性考虑注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Spring Boot框架&#xff0c;提供RESTful AP…...

OpenClaw定时任务专家:用Qwen3-32B镜像实现凌晨自动备份与报表生成

OpenClaw定时任务专家&#xff1a;用Qwen3-32B镜像实现凌晨自动备份与报表生成 1. 为什么需要定时任务自动化 作为一个经常需要处理数据库和报表的开发者&#xff0c;我发现自己总是在重复同样的工作&#xff1a;每天凌晨备份数据库、生成统计报表、然后发送给相关同事。这种…...

RP2040离线语音唤醒SDK:轻量级关键词检测实战指南

1. 项目概述DSpotterSDK_Maker_RP2040 是专为 Arduino Nano RP2040 Connect 开发板设计的离线语音唤醒与指令识别 SDK&#xff0c;面向嵌入式开发者提供轻量级、低功耗、免联网的本地语音交互能力。该 SDK 并非通用 ASR&#xff08;自动语音识别&#xff09;引擎&#xff0c;而…...

颠覆式创新交互:桌面虚拟助手如何提升你的工作效率

颠覆式创新交互&#xff1a;桌面虚拟助手如何提升你的工作效率 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 桌面虚拟助…...

Python AI用例生成全链路实践(含12个工业级代码片段+GPT-4/Claude/Llama3对比基准)

第一章&#xff1a;Python AI用例生成全链路实践概览AI用例生成是将业务需求快速转化为可执行AI解决方案的关键环节&#xff0c;涵盖从问题定义、数据准备、模型选型、提示工程、评估验证到部署集成的完整闭环。本章聚焦基于Python生态的端到端实践路径&#xff0c;强调可复现性…...