zoukankan      html  css  js  c++  java
  • < 链接分析算法

    < 链接分析算法 - PageRank算法 >

    背景

    • Google 的两位创始人拉里佩奇&谢尔盖布林都是斯坦福大学的博士生,他们提出的 PageRank 算法受到了论文影响力因子的评价启发。当一篇论文被引用的次数越多,证明这篇论文的影响力越大。正是这个想法解决了当时网页检索质量不高的问题。

    • 核心思想是:

      • 如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是pagerank值会相对较高;

      • 如果一个pagerank值很高的网页链接到一个其他的网页,那么被链接到的网页的pagerank值会相应地因此而提高。

    PageRank - 简化模型

    • 网页之间会形成一个网络,是我们的互联网,论文之间也存在着相互引用的关系,可以说我们所处的环境就是各种网络的集合。只要是有网络的地方,就存在出链和入链,就会有 PR 权重的计算,也就可以运用我们今天讲的 PageRank 算法。

    • PageRank计算:

      • (PR(u) = Σ frac{PR(v)}{L(v)})u为待评估页面,v为页面u的入链集合,PR(*)为页面影响力,L(*)为页面的出链数量(也就是跳转频率)。简单来说就是一个网页的影响力 = 所有入链集合页面的加权影响力之和,每个页面又把影响力平均分配给了出链页面。

      • 假设(w)为影响力,有(N)个页面,上式可以用Markov链的转移概率矩阵表示为(w^{k}=L cdot w^{k-1})(L _ {N cdot N})为转移矩阵(跳转频率)。初始化影响力(w^{0}),利用上式迭代直至收敛不再发生变化。

    • 算法证明: PageRank算法--从原理到实现

    • 实际面临问题:

      1. Rank Leak 等级泄露:如果一个网页只有入链没有出链,吸收其他网页影响力而不释放,收敛最后会导致其他网页PR值为0

      2. Rank Sink等级沉没:如果有一个网页只有出链没有入链,释放自己的影响力而不吸收,收敛最后会导致该网页PR值为0

    PageRank - 随机浏览模型

    • 随机浏览模型假设场景是:用户并不是都按照跳转链接的方式来上网,还有一种可能是不论当前处于哪个页面,都有概率访问到其他任意的页面(比如说直接输入网址访问),相当于跳转链接而言随机概率较小。

    • PageRank计算:

      • (PR(u)=frac{1-d}{N} + d cdot Σ frac{PR(v)}{L(v)})damping factor阻尼因子(d)代表了用户按照跳转链接来上网的概率,通常定义值为0.85(N)为网页总数。

      • 因为加入了阻尼因子的存在,一定程度上解决了等级泄露和等级沉没的问题,可以通过数学推导证明最终PageRank随机浏览模型是可以收敛的,每个网页可以得到一个稳定正常的PR值。

    • 其他方面:

      • PageRank时间复杂度为(O(t(varepsilon )n^{2}))(n)是网络节点数,(t(varepsilon ))是迭代次数,与收敛的阈值(varepsilon)有关。对大型网络而言,迭代次数与边的关系是接近线性的(logN)

      • PageRank主要缺点是

        • 对新网页不友好,旧页面等级会比新页面高,因为即使是非常好的新页面也不会有很多的外链。

        • 没有过滤广告链接和功能链接。这些链接通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。

        • 没有区分站内导航链接。很多网站的首页都有很多对站内其他页面的链接,称为站内导航链接。这些链接与不同网站之间的链接相比,肯定是后者更能体现PageRank值的传递关系。

      • PageRank主要挑战是来自海量的数据。

      • 后续多为HITS, TrustRank替代。

    PageRank - 算法实现

    • 使用NetworkX实现计算网页的PR
    import networkx as nx
    
    # 创建有向图
    
    G = nx.DiGraph()
    
    # 有向图之间边的关系
    
    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_list = nx.pagerank(G, alpha=1)
    
    print("pagerank 值是:", pagerank_list)
    
  • 相关阅读:
    博客园背景页面动态特效
    windows7 VirtualBox 安装docker异常:looks like something went wrong in step ‘looking for vboxmanage.exe’
    VUE 封装axios 接口
    实时显示系统当前时间时间
    Git 命令执行
    从模型训练中认知拟合现象
    ModernRNN
    Fundamentals of Recurrent Neural Network
    Language Model & Data Sampling
    Text Preprocessing
  • 原文地址:https://www.cnblogs.com/ymjun/p/12403671.html
Copyright © 2011-2022 走看看