美文网首页
PageRank---Google的民主表决式网页排名技术

PageRank---Google的民主表决式网页排名技术

作者: 有花落蝶 | 来源:发表于2018-04-24 23:30 被阅读0次

PageRank是[Google]专有的[算法],用于衡量特定网页相对于索引中的其他网页而言的重要程度。

不同的网页直接存在着引用的关系,就像一张图一样:


屏幕快照 2018-04-24 下午11.26.03.png

这个图也可以转化为矩阵表示,其中W[1][0]=0.3333表示从网页A到B的概率,其他它的也是同理:
[[ 0. 0.5 1. 0. ]
[ 0.33333333 0. 0. 0.5 ]
[ 0.33333333 0. 0. 0.5 ]
[ 0.33333333 0.5 0. 0. ]]
直接看代码,从其他地方拿过来直接改的:

from numpy import *  
import numpy as np  
a = array([[0, 1, 1, 0],  
           [1, 0, 0, 1],  
           [1, 0, 0, 1],  
           [1, 1, 0, 0]], dtype=float)  
  
  
def graphMove(a):  
    b = transpose(a)  #  
  c = zeros((a.shape), dtype=float)  
    for i in range(a.shape[0]):  
        for j in range(a.shape[1]):  
            c[i][j] = a[i][j] / max((b[j].sum()),1)  
    return c  
  
  
def firstPr(c):  
    pr = zeros((c.shape[0], 1), dtype=float)  
    for i in range(c.shape[0]):  
        pr[i] = float(1) / c.shape[0]  
    # print pr,"\n==================================================="  
  return pr  
  
  
def pageRank(p, m, v):  
    vv=v  
    while (sum((p * dot(m, v) + (1 - p) * v-v)**2)>1e-9):  
        print(sum(p * dot(m, v) + (1 - p) * v-v)**2)  
        v = p * dot(m, v) + (1 - p) * v  
        print (v)  
  
    return v  
  
  
if __name__ == "__main__":  
    M = graphMove(a)  
    print(M)  
    pr = firstPr(M)  
    print(pr)  
    p = 0.8  
  print pageRank(p, M, pr)

其中 m 和 v 分别为:
[[ 0. 0.5 1. 0. ]
[ 0.33333333 0. 0. 0.5 ]
[ 0.33333333 0. 0. 0.5 ]
[ 0.33333333 0.5 0. 0. ]]
[[ 0.25]
[ 0.25]
[ 0.25]
[ 0.25]]

运算结果如下:
3.08148791102e-33
[[ 0.333328]
[ 0.222224]
[ 0.222224]
[ 0.222224]]
看样子是和书中说得一样,下面我们修改m,及m对应的图如下(终止点问题):

 [[ 0.          0.5         0.          0.        ]
 [ 0.33333333  0.          0.          0.5       ]
 [ 0.33333333  0.          0.          0.5       ]
 [ 0.33333333  0.5         0.          0.        ]]
屏幕快照 2018-04-24 下午11.32.43.png

运算结果如下:
4.77908611974e-09
[[ 4.64238536e-05]
[ 6.76593827e-05]
[ 6.76593827e-05]
[ 6.76593827e-05]]
虽然收敛了,但是结果看着并不是我们想要的。
修改实现代码:

 def pageRank(p, m, v):  
    e=v  
    while (sum((p * dot(m, v) + (1 - p) * e-v)**2)>1e-9):  
        print(sum(p * dot(m, v) + (1 - p) * e-v)**2)  
        v = p * dot(m, v) + (1 - p) * e  
        print (v)  
  
    return v

运算结果如下:
4.58712913112e-09
[[ 0.10136897]
[ 0.12840406]
[ 0.12840406]
[ 0.12840406]]
修改m,以及m对应的图(陷阱问题):

 [[ 0.          0.5         0.          0.        ]
 [ 0.33333333  0.          0.          0.5       ]
 [ 0.33333333  0.          1.          0.5       ]
 [ 0.33333333  0.5         0.          0.        ]]
屏幕快照 2018-04-24 下午11.34.08.png

运算结果如下:
4.77908611974e-09
[[ 4.64238536e-05]
[ 6.76593827e-05]
[ 6.76593827e-05]
[ 6.76593827e-05]]

我的理解,既然是相对与其他网页的重要程度,那么就可以理解为:
SUM=p其他网页对该网页的引用数+q该网页对其他网页的引用数
对这个SUM进行排序。
实际在矩阵相乘中的作用就是如此,权重就在一定程度上代表了重要程度,所以这个计算最终一定是收敛的。
数学之美中公式记录如下:

屏幕快照 2018-04-25 上午12.00.08.png
屏幕快照 2018-04-25 上午12.01.06.png

相关文章

  • PageRank---Google的民主表决式网页排名技术

    PageRank是[Google]专有的[算法],用于衡量特定网页相对于索引中的其他网页而言的重要程度。 不同的网...

  • PageRank算法核心思想及数学支撑

    佩奇排名(PageRank),又称网页排名、谷歌左侧排名,是一种由搜索引擎根据网页之间相互的超链接计算的技术,而作...

  • 二十四. 异步加载

    1. 异步加载技术(AJAX) 异步加载技术是一种创建交互式网页应用的网页开发技术,异步JaaScript和XML...

  • vue的vuex

    AJAX即“AsynchronousJavascriptAndXML”,是指一种创建交互式网页应用的网页开发技术。...

  • vue的axios

    AJAX即“AsynchronousJavascriptAndXML”,是指一种创建交互式网页应用的网页开发技术。...

  • 古希腊的民主原来如此……

    民主国家是古希腊的发明。古希腊人发明的政府是以所有公民共同讨论、少数服从多数的投票表决方式来操作的。这是直接式的民...

  • Ajax学习笔记

    Ajax是什么 Ajax(异步的JavaScript和XML),是一种创建交互式网页应用的网页开发技术,该技术的核...

  • 一人一票是民主的根本

    论到民主,我认为最根本是要一人一票,用选票来表决。没有一人一票的所谓民主,都是打着民主的幌子在糊弄人。 但是,迄今...

  • 第10章 PageRank:网页排名技术

    以下内容学习、摘录自《数学之美》 搜索引擎应该从成千上万条结果中做好排序,让用户看到最想要的结果。这个技术很大程度...

  • 我们要用人民民主来实现和谐社会

    人民民主就是要通过公平竞争,用一人一票选举人民相信的社会精英,代表人民表决立法、管理政府、监督公务。 民主是以合理...

网友评论

      本文标题:PageRank---Google的民主表决式网页排名技术

      本文链接:https://www.haomeiwen.com/subject/dwgslftx.html