PageRank 算法-Google 如何给网页排名

2023-12-11 12:10

本文主要是介绍PageRank 算法-Google 如何给网页排名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PageRank 算法-Google 如何给网页排名

 

在互联网早期,随着网络上的网页逐渐增多,如何从海量网页中检索出我们想要的页面,变得非常的重要。

当时著名的雅虎和其它互联网公司都试图解决这个问题,但都没能有一个很好的解决方案。

直到1998 年前后,两位斯坦福大学的博士生,拉里·佩奇和谢尔盖·布林一起发明了著名的 PageRank 算法,才完美的解决了网页排名的问题。也正是因为这个算法,诞生了伟大的 Google 公司。

在这里插入图片描述

(上图中:左为布林右为佩奇。)

 

1,PageRank 算法原理

PageRank 算法的核心原理是:在互联网中,如果一个网页被很多其它网页所链接,说明该网页非常的重要,那么它的排名就高

拉里·佩奇将整个互联网看成一张大的图,每个网站就像一个节点,而每个网页的链接就像一个弧。那么,互联网就可以用一个图或者矩阵来描述。

拉里·佩奇也因该算法在30 岁时当选为美国工程院院士。

假设目前有4 个网页,分别是 A,B,C,D,它们的链接关系如下:

在这里插入图片描述

我们规定有两种链:

  • 出链:从自身引出去的链。
  • 入链:从外部引入自身的链。

比如图中的C 网页,有两个入链,一个出链。

PageRank 的思想就是,一个网页的影响力就等于它的所有入链的影响力之和

用数学公式表示为:

在这里插入图片描述

其中(分值代表页面影响力):

  • PR(u) 是网页u 的分值。
  • Bu 是网页u 的入链集合。
  • 网页v 是网页u 的任意一个入链。
  • PR(v) 是网面v 的分值。
  • L(v) 是网页v 的出链数量。
  • 网页v 带给网页u 的分值就是 PR(v) / L(v)
  • 那么PR(u) 就等于所有的入链分值之和。

在上面的公式中,我们假设从一个页面v 到达它的所有的出链页面的概率是相等的

比如上图来说,页面A 有三个出链分别链接到了 B、C、D 上。那么当用户访问 A 的时候,就有跳转到 B、C 或者 D 的可能性,跳转概率均为 1/3

 

2,计算网页的分值

下面来看下如何计算网页的分值。

我们可以用一个表格,来表示上图中的网页的链接关系,及每个页面到其它页面的概率:

 ABCD
A0 A->A1/2 B->A1 C->A0 D->A
B1/3 A->B0 B->B0 C->B1/2 D->B
C1/3 A->C0 B->C0 C->C1/2 D->C
D1/3 A->D1/2 B->D0 C->D0 D->D

根据这个表格中的数字,可以将其转换成一个矩阵M

在这里插入图片描述

假设 A、B、C、D 四个页面的初始影响力都是相同的,都为 1/4,即:

在这里插入图片描述

经过第一次分值转移之后,可以得到 W<sub>1</sub>,如下:

在这里插入图片描述

同理可以得到W<sub>2</sub>W<sub>3</sub> 一直到 W<sub>n</sub>

  • W<sub>2</sub> = M * W<sub>1</sub>
  • W<sub>3</sub> = M * W<sub>2</sub>
  • W<sub>n</sub> = M * W<sub>n-1</sub>

那么什么时候计算终止呢?

佩奇和布林已经证明,不管网页的初识值选择多少(我们这假设都是1/4),最终都能保证网页的分值能够收敛到一个真实确定值。

也就是直到 W<sub>n</sub> 不再变化为止。

这就是网页分值的计算过程,还是比较好理解的。

 

3,PageRank 的两个问题

我们上文中介绍到的是PageRank 的基本原理,是简化版本。在实际应用中会出现等级泄露(RankLeak)和等级沉没(Rank Sink)的问题。

如果一个网页没有出链,就会吸收其它网页的分值不释放,最终会导致其它网页的分值为0,这种现象叫做等级泄露。如下图中的网页C

在这里插入图片描述

相反,如果一个网页没有入链,最终会导致该网页的分值为0,这种现象叫做等级沉没。如下图中的网页C

在这里插入图片描述

 

4,PageRank 的随机浏览模型

为了解决上面的问题,拉里·佩奇提出了随机浏览模型,即用户并不都是依靠网页链接来访问网页,也有可能用其它方式访问网址,比如输入网址。

因此,提出了阻尼因子的概念,这个因子代表用户按照跳转链接来上网的概率,而 1-d 则代表用户通过其它方式访问网页的概率。

所以,将上文中的公式改进为:

在这里插入图片描述

其中:

  • d 为阻尼因子,通常可以取0.85
  • N 为网页总数。

 

5,用代码计算网页分值

如何用代码来计算网页的PR 分值呢?(为了方便查看,我把上图放在这里)

在这里插入图片描述

 

我们可以看到,该图实际上就是数据结构中的有向图,因此我们可以通过构建有向图来构建 PageRank 算法。

NetworkX 是一个Python 工具包,其中集成了常用的图结构和网络分析算法

我们可以用 NetworkX 来构建上图中的网络结构。

首先引入模块:

import networkx as nx

用 DiGraph 类创建有向图:

G = nx.DiGraph()

将4 个网页的链接关系,用数组表示:

edges = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "A"), ("B", "D"), ("C", "A"), ("D", "B"), ("D", "C")]

数组中的元素作为有向图的边,并添加到图中:

for edge in edges:    G.add_edge(edge[0], edge[1])

使用pagerank 方法计算PR 分值:

# alpha 为阻尼因子
PRs = nx.pagerank(G, alpha=1)
print PRs 

输出每个网页的PR 值:

{'A': 0.33333396911621094, 'B': 0.22222201029459634, 'C': 0.22222201029459634, 'D': 0.22222201029459634}

最终,我们计算出了每个网页的PR 值。

 

6,画出网络图

NetworkX 包中还提供了画出网络图的方法:

import matplotlib.pyplot as plt# 画网络图
nx.draw_networkx(G)
plt.show()

如下:

在这里插入图片描述

我们还可以设置图的形状,节点的大小,边的长度等属性,具体可以点击这里查看。

更多关于 NetworkX 的内容可以参考其官方文档。

 

7,总结

PageRank 算法给了我们一个很重要的启发,权重在很多时候是一个非常重要的指标。

  • 比如在人际交往中,个人的影响力不仅取决于你的朋友的数量,而且朋友的质量非常重要,说明了圈子的重要性。
  • 比如在自媒体时代,粉丝数并不能真正的代表你的影响力,粉丝的质量也很重要。如果你的粉丝中有很多大V,那么将大大增加你影响力。

本篇文章主要介绍了:

  • PageRank 算法的原理。
  • 简化版的PageRank 算法遇到的问题,以及解决方案:
    • 等级泄露和等级沉没。
    • 引出随机浏览模型来解决这两个问题。
  • 如何用代码模拟PageRank 算法:
    • 使用了 NetworkX 模块。

(本节完。)

这篇关于PageRank 算法-Google 如何给网页排名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480633

相关文章

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费