矩阵:如何使用矩阵操作进行 PageRank 计算?

内容选自《程序员的数学基础课》

你好,我是黄申。 今天我来说说矩阵。

矩阵由多个长度相等的向量组成,其中的每列或者每行就是一个向量。 从数据结构的角度来看,我们可以把向量看作一维数组,把矩阵看作二维数组。

具有了二维数组的特性,矩阵就可以表达二元关系了,例如图中结点的邻接关系,或者是用户对物品的评分关系。 而通过矩阵上的各种运算操作,我们就可以挖掘这些二元关系,在不同的应用场景下达到不同的目的。 今天我就从图的邻接矩阵出发,展示如何使用矩阵计算来实现 PageRank 算法。

回顾 PageRank 链接分析算法在讲马尔科夫模型的时候,我已经介绍了 PageRank 链接分析算法。 所以,在展示这个算法和矩阵操作的关系之前,我们快速回顾一下它的核心思想。

PageRank 是基于马尔科夫链的。 它假设了一个“随机冲浪者”模型,冲浪者从某张网页出发,根据 Web 图中的链接关系随机访问。 在每个步骤中,冲浪者都会从当前网页的链出网页中,随机选取一张作为下一步访问的目标。 此外,PageRank 还引入了随机的跳转操作,这意味着冲浪者不是按 Web 图的拓扑结构走下去,只是随机挑选了一张网页进行跳转。

基于之前的假设,PageRank 的公式定义如下:

其中,pi 表示第 i 张网页,Mi 是 pi 的入链接集合,pj 是 Mi 集合中的第 j 张网页。 PR(pj) 表示网页 pj 的 PageRank 得分,L(pj) 表示网页 pj 的出链接数量,1/L(pj) 就表示从网页 pj 跳转到 pi 的概率。 α是用户不进行随机跳转的概率,N 表示所有网页的数量。

PageRank 的计算是采样迭代法实现的:一开始所有网页结点的初始 PageRank 值都可以设置为某个相同的数,例如 1,然后我们通过上面这个公式,得到每个结点新的 PageRank 值。 每当一张网页的 PageRank 发生了改变,它也会影响它的出链接所指向的网页,因此我们可以再次使用这个公式,循环地修正每个网页结点的值。 由于这是一个马尔科夫过程,所以我们能从理论上证明,所有网页的 PageRank 最终会达到一个稳定的数值。 整个证明过程很复杂,这里我们只需要知道这个迭代计算的过程就行了。

简化 PageRank 公式

那么,这个计算公式和矩阵操作又有什么联系呢?为了把问题简化,我们暂时不考虑随机跳转的情况,而只考虑用户按照网页间链接进行随机冲浪。 那么 PageRank 的公式就简化为:

这个公式只包含了原公式中的Σ(PR(pj)/L(pj)) 部分。 我们再来对比看看矩阵点乘的计算公式。

以上两个公式在形式上是基本一致的。 因此,我们可以把Σ(PR(pj)/L(pj)) 的计算,分解为两个矩阵的点乘。 一个矩阵是当前每张网页的 PageRank 得分,另一个矩阵就是邻接矩阵。 所谓邻接矩阵,其实就是表示图结点相邻关系的矩阵。

假设 xi,j 是矩阵中第 i 行、第 j 列的元素,那么我们就可以使用 xi,j 表示从结点 i 到结点 j 的连接,放到 PageRank 的应用场景,xi,j 就表示网页 pi 到网页 pj 的链接。 最原始的邻接矩阵所包含的元素是 0 或 1,0 表示没有链接,而 1 表示有链接。

考虑到 PageRank 里乘积是 1/L(pj),我们可以对邻接矩阵的每一行进行归一化,用原始的值(0 或 1)除以 L(pj),而 L(pj) 表示有某张网页 pj 的出链接,正好是矩阵中 pj 这一行的和。 所以,我们可以对原始的邻接矩阵,进行基于行的归一化,这样就能得到每个元素为 1/L(pj) 的矩阵,其中 j 表示矩阵的第 j 行。 注意,这里的归一化是指让所有元素加起来的和为 1。

为了方便你理解,我用下面这个拓扑图作为例子给你详细解释。

基于上面这个图,原始矩阵为:

其中第 i 行、第 j 列的元素值表示从结点 i 到 j 是不是存在链接。 如果是,那么这个值为 1;否则就为 0。

按照每一行的和,分别对每一行进行归一化之后的矩阵就变为:

有了上述这个邻接矩阵,我们就可以开始最简单的 PageRank 计算。 PageRank 的计算是采样迭代法实现的。 这里我把初始值都设为 1,并把第一次计算的结果列在这里。

好了,我们已经成功迈出了第一步,但是还需要考虑随机跳转的可能性。

考虑随机跳转经过上面的步骤,我们已经求得Σ(PR(pj)/L(pj)) 部分。 不过,PageRank 引入了随机跳转的机制。 这一部分其实也是可以通过矩阵的点乘来实现的。 我们把Σ(PR(pj)/L(pj)) 部分用 A 表示,那么完整的 PageRank 公式就可以表示为:

于是,我们可以把上述公式分解为如下两个矩阵的点乘:

我们仍然使用前面的例子,来看看经过随机跳转之后,PageRank 值变成了多少。 这里α取 0.9。

我们前面提到,PageRank 算法需要迭代式计算。 为了避免计算后的数值越来越大甚至溢出,我们可以进行归一化处理,保证所有结点的数值之和为 1。 经过这个处理之后,我们得到第一轮的 PageRank 数值,也就是下面这个行向量:

[0.37027027 0.24864865 0.37027027 0.00540541 0.00540541]

接下来,我们只需要再重复之前的步骤,直到每个结点的值趋于稳定就可以了。

使用 Python 进行实现说到这里,我已经把如何把整个 PageRank 的计算,转换成多个矩阵的点乘这个过程讲完了。 这样一来,我们就可以利用 Python 等科学计算语言提供的库,来完成基于 PageRank 的链接分析。 为了展示具体的代码,我以之前的拓扑图为例,给你详细讲述每一步。

首先,我们要进行一些初始化工作,包括设置结点数量、确定随机跳转概率的α、代表拓扑图的邻接矩阵以及存放所有结点 PageRank 值的数组。 下面是一段示例代码,在代码中我提供了注释供你参考。

复制代码

import numpy as np # 设置确定随机跳转概率的 alpha、网页结点数alpha = 0.9N = 5 # 初始化随机跳转概率的矩阵jump = np.full([2,1], [[alpha], [1-alpha]], dtype=float) # 邻接矩阵的构建adj = np.full([N,N], [[0,0,1,0,0],[1,0,1,0,0],[1,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0]], dtype=float) # 对邻接矩阵进行归一化row_sums = adj.sum(axis=1) # 对每一行求和row_sums[row_sums == 0] = 0.1 # 防止由于分母出现 0 而导致的 Nanadj = adj / row_sums[:, np.newaxis] # 除以每行之和的归一化 # 初始的 PageRank 值,通常是设置所有值为 1.0pr = np.full([1,N], 1, dtype=float)之后,我们就能采用迭代法来计算 PageRank 值。 一般我们通过比较每个结点最近两次计算的值是否足够接近,来确定数值是不是已经稳定,以及是不是需要结束迭代。 这里为简便起见,我使用了固定次数的循环来实现。 如果你的拓扑图比较复杂,需要更多次迭代,我把示例代码和注释列在这里。

复制代码

# PageRank 算法本身是采样迭代方式进行的,当最终的取值趋于稳定后结束。 for i in range(0, 20): # 进行点乘,计算Σ(PR(pj)/L(pj)) pr = np.dot(pr, adj) # 转置保存Σ(PR(pj)/L(pj)) 结果的矩阵,并增加长度为 N 的列向量,其中每个元素的值为 1/N,便于下一步的点乘。 pr_jump = np.full([N, 2], [[0, 1/N]]) pr_jump[:,:-1] = pr.transpose() # 进行点乘,计算α(Σ(PR(pj)/L(pj))) + (1-α)/N) pr = np.dot(pr_jump, jump) # 归一化 PageRank 得分 pr = pr.transpose() pr = pr / pr.sum() print("round", i + 1, pr)如果成功运行了上述两段代码,你就能看到每个结点最终获得的 PageRank 分数是多少。

Python 中还有一些很不错的库,提供了直接构建拓扑图和计算 PageRank 的功能,例如networkx。 你可以尝试使用这种库,构建样例拓扑图并计算每个结点的 PageRank 得分,最后和上述代码所计算的 PageRank 得分进行比较,验证一下上述代码的结果是不是合理。

总结我们可以把向量看作一维数组,把矩阵看作二维数组。 矩阵的点乘,是由若干个向量的点乘组成的,所以我们可以通过矩阵的点乘操作,挖掘多组向量两两之间的关系。

今天我们讲了矩阵的点乘操作在 PageRank 算法中的应用。 通过表示网页的邻接二元关系,我们可以使用矩阵来计算 PageRank 的得分。 在这个应用场景下,矩阵点乘体现了多个马尔科夫过程中的状态转移。

矩阵点乘和其他运算操作,还可以运用在很多其他的领域。 例如,我在上一节介绍 K 均值聚类算法时,就提到了需要计算某个数据点向量、其他数据点向量之间的距离或者相似度,以及使用多个数据点向量的平均值来获得质心点的向量,这些都可以通过矩阵操作来完成。

另外,在协同过滤的推荐中,我们可以使用矩阵点乘,来实现多个用户或者物品之间的相似程度,以及聚集后的相似程度所导致的最终推荐结果。 下一节,我会使用矩阵来表示用户和物品的二元关系,并通过矩阵来计算协同过滤的结果。

猜你感兴趣
网购被骗怎么办(网购被骗怎么办不能退钱)

网购被骗怎么办(网购被骗怎么办不能退钱)

1、可以起诉网络交易平台2、消费者可以要求商家赔偿经验步骤:1可以起诉网络交易平台。该条款规定了电商平台的信息披露义务,给了消费者维权的新武器,这正是先进制度设计对消费者权益保护作用的良好体现,消费者应充分利用法律,维护好自己的合法权益...

精选综合 2023-05-12
哪些银行信用卡好办额度又高(哪些银行信用卡好批额度高)

哪些银行信用卡好办额度又高(哪些银行信用卡好批额度高)

银行信用卡审核主要看申请人的资信条件,资信条件越好,办信用卡越容易,额度也越高。如果申请人资信条件相同,选择以下银行信用卡好办额度又高:1、工商银行信用卡比较适合与工行有业务往来的人,在工行有资产,那么,办卡容易,且额度高,卡均额度有4...

精选综合 2023-05-12
磁铁衣服扣子对人体有害吗?(磁铁衣服扣子对人体有害吗)

磁铁衣服扣子对人体有害吗?(磁铁衣服扣子对人体有害吗)

磁铁衣服扣子对人体没有害。因为磁铁衣服扣子比较小,对身体是没有影响的。磁铁的成分是铁、钴、镍等原子,其原子的内部结构比较特殊,本身就具有磁矩。磁铁能够产生磁场,具有吸引铁磁性物质如铁、镍、钴等金属的特性。...

精选综合 2023-05-12
吃灵芝孢子粉大便发黑正常吗?

吃灵芝孢子粉大便发黑正常吗?

吃完灵芝孢子粉之后大便发黑在我们的日常生活中非常常见,实际上每个人吃完灵芝孢子粉之后,身上都会出现类似的现象,这正是表示起了效果,对人的身体健康没有其他的不良影响,灵芝孢子粉本身就是黑色的,就像吃了黑芝麻胡之后大便发黑一样,吃了灵芝孢子粉...

精选综合 2023-05-12
月见草的养殖方法和注意事项(月见草的种植方法和注意事项)

月见草的养殖方法和注意事项(月见草的种植方法和注意事项)

1、月见草的养殖方法:月见草喜光,适合栽培在庭院通风敞亮处,也可以养殖在阳台上,每天吸收太阳光照射。生长期间,每个月施1—2次液肥,生长期施肥以氮肥为主,孕蕾期以磷钾肥为主。2、月见草比较耐旱,但不耐涝,土壤表层见干时要及时浇水,每次...

精选综合 2023-05-12
注塑机调气纹的技巧有哪些

注塑机调气纹的技巧有哪些

注塑机调气纹的技巧有以下:1、模具透明法此法是将射胶时间一秒一秒增加,每增加一秒啤一啤,然后将每一啤未走齐的啤件按顺序排列起来,这样就可以很清楚地看到熔胶的充型过程,直到充满型腔为止。2、定位射胶法此法是将后一级的慢速和压力全部调整为零...

精选综合 2023-05-12
充分必要条件的口诀是什么(判断充分必要条件的口诀)

充分必要条件的口诀是什么(判断充分必要条件的口诀)

充分必要条件的口诀是:正推成立是充分,反推成立是必要。若有A推到B,则B为必要条件,即被推导出来的就是必要条件,不需要把两个一次性全部分辨出来。只要记准那个是必要条件就行了,因为另一个肯定就是充分条件。充分必要条件也即充要条件,意思...

精选综合 2023-05-12
为什么一般两年换手机(QQ为什么换手机登录不上去了)

为什么一般两年换手机(QQ为什么换手机登录不上去了)

原因:随着APP的功能越来越多,需要手机拥有更强大的性能才能流畅使用这些软件,因此需要定期更换手机才能获得最佳的使用体验。手机使用技巧:1、华为p30Pro具有抬手亮屏功能,打开华为p30Pro的系统设置页面,点击智能辅助――手势控制―...

精选综合 2023-05-12
肇事者不报警是全责吗?

肇事者不报警是全责吗?

肇事者不报警不一定是全责,交通事故的责任认定是由交警部门根据交通事故现场勘验、检查、调查情况和有关的检验、鉴定结论进行的。《道路交通安全法》第七十三条规定,公安机关交通管理部门应当根据交通事故现场勘验、检查、调查情况和有关的检验、鉴定结...

精选综合 2023-05-12
道姑的入观条件是什么

道姑的入观条件是什么

一般按要求需要高中以上文凭,但各地收容不一,需要准备身份证原件,当地派出所出具的无案底证明,自己写的出家自愿申请书及父母同意出家的同意书。一般出家考察期3年,如果合格出家,三年后师父会束发,冠巾等等才算是正规道士,正一本身就是散居道人,...

精选综合 2023-05-12
瑞虎5x电池型号是多少(瑞虎5x手动变速箱型号)

瑞虎5x电池型号是多少(瑞虎5x手动变速箱型号)

奇瑞瑞虎5x的电瓶型号有12V,60Ah(常规型号)和12V,70Ah(蓝驱车型)两种,类型为免维护式。汽车电瓶即为我们常说的蓄电池,瑞虎先前车型上的电瓶品牌有风帆的,也有选用骆驼品牌的电瓶。瑞虎5x的电瓶同大多数车型一样位于发动机舱...

精选综合 2023-05-12
中国银行周日上班吗?(中国银行周日上班吗?)

中国银行周日上班吗?(中国银行周日上班吗?)

中国银行周末上班,营业时间一般为8:00(或9:00)-16:30(或17:30),看各地的政府规定及本地城市的大小,自助银行是24小时营业;个人业务周末是不休息的(除了基金和银证业务以及个人贷款业务外),对公业务周末休息。具体到某一家...

精选综合 2023-05-12
洗衣机能放倒来运输吗?(波轮洗衣机能放倒运输吗)

洗衣机能放倒来运输吗?(波轮洗衣机能放倒运输吗)

1、洗衣机能放倒来运输吗?不能。2、因为这样对于缸筒或者滚筒都有伤害的。由于洗衣机有避震器,等于有软连接,所以,放倒后,缸筒会和外壳接触。对于滚筒来说,虽然有运输固定螺丝,但是内筒配重块非常重,而且一端固定在外壳,一端固定在缸筒外壳...

精选综合 2023-05-12
腊肉长蛆虫了还能吃吗?(腊肉长蛆虫了还能吃吗)

腊肉长蛆虫了还能吃吗?(腊肉长蛆虫了还能吃吗)

腊肉里长蛆虫了是不可以吃的,说明腊肉没有处理好,造成有虫卵遗留在腊肉中。腊肉里面长蛆虫说明里面已经可以适应寄生虫的生长环境,若吃了自然也会把寄生虫吃到肚子内造成寄生虫类疾病。...

精选综合 2023-05-12
黑金信用卡额度一般是多少(黑金信用卡要什么条件)

黑金信用卡额度一般是多少(黑金信用卡要什么条件)

黑金信用卡额度一般在200万到1000万之间。很多人认为,黑金信用卡额度没有上限,其实是误解,黑金信用卡的额度一般都在几百万元,而且可以根据持卡人的需求智能调节,但是黑金信用卡额度只能用于合理消费用途,不能作为企业流动资金。另外,有的...

精选综合 2023-05-12
芋艿发青了还能吃吗?(芋艿发黑了还能吃吗)

芋艿发青了还能吃吗?(芋艿发黑了还能吃吗)

芋艿发青了不要吃,因为芋艿发青的青色部分可能含有毒素,所以不能食用。正常成色的芋艿富含蛋白质、钙、磷、铁、钾、镁、钠、胡萝卜素、烟酸、维生素B1、维生素B2、皂角甙等多种成分。...

精选综合 2023-05-12
关于诚信交友的名言名句(关于诚信的名言名句大全)

关于诚信交友的名言名句(关于诚信的名言名句大全)

言必信,行必果。与朋友交,言而有信。人与人之间最大的信任就是关于进言的信任。学而不思则罔,思而不学则殆。人之相识,贵在相知,人之相知,贵在知心。...

精选综合 2023-05-12
转网不换号怎么办理(异地转网不换号怎么办理)

转网不换号怎么办理(异地转网不换号怎么办理)

1、拿起你的手机通过短信在线查询携转资格(短信编辑CCXZ#用户名#证件号码,发送至归属运营商,移动10086,联通10010,电信10001)。2、用户通过短信申请授权码(短信指令:SQXZ#用户名#证件号码,发送至归属运营商,移动1...

精选综合 2023-05-12
铁棍山药麻嘴能吃吗?(铁棍山药麻嘴能吃吗)

铁棍山药麻嘴能吃吗?(铁棍山药麻嘴能吃吗)

铁棍山药麻嘴是可以吃的,只要把山药表面的皮去掉,然后洗干净就是没问题的。铁棍山药中含少量的植物碱,对人身也是有好处的,但有些过敏体质的人会对这种碱性物质过敏,导致食用后嘴里发麻。...

精选综合 2023-05-12
藏南人民用哪国身份证

藏南人民用哪国身份证

藏南人民以实际控制线为界一边用印度的身份证,一边用中国的身份证。事实上,尽管多年来中印边界从未正式划定,但两国人民在长期和平友好相处过程中,按照双方的行政管辖范围,已经形成了一条为两国人民都尊重的传统习惯线。...

精选综合 2023-05-12