最近连续听到PageRank算法,久闻其名,不闻其详,心里虚得很,今儿补补课。

PageRank算法的网络资料非常全面,毕竟是将近二十年的经典算法,算法细节可以参考文末链接,这里简单说说我的理解。

PageRank要解决的问题是如何给网页排序,它的思路是,利用网页间的链接关系构造有向图,对有向图的所有节点做重要性排序。

重要性也可以理解为影响力,以一个分数的形式来表达,分数从高到低就构成了一个排序。

怎么定义影响力?从节点的流出和流入分别定义:对于节点A和B,如果指向A的节点多于指向B的节点,则A的分数更高;如果A的分数比B的分数更高,则A指向的节点比B指向的节点分数更高。

把上面的原则转化为迭代规则,以概率值表示分数,就可以把各节点的分数计算过程建模为一个Markov链的收敛过程,实现了这个收敛过程就计算出了图中各节点的分数。

当然,实际问题中要处理的细节还有很多,比如没有外链的网页如何处理,证明该模型是Markov过程等等,可以参考文末链接。

本质上讲,PageRank是给有向图的节点做重要性排序,比网页链接更常见的有向图是社交关系图,所以PageRank拿来做社交网络的节点排序应当也是可以的。

PageRank是工程思维的典型代表,建模思路简洁易懂,代码实现也几乎没有难度,唯一有深度的部分是Markov链的证明,这其实是随机过程中最常见最基础的证明题。

你瞧,就是这样一个简洁实用的算法,孵化出了一家伟大的公司,改变了世界。

这就是简洁的力量,工程的美。

参考文献:

https://www.cnblogs.com/rubinorth/p/5799848.html

http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf (提出PageRank算法的论文)

补课:PageRank的更多相关文章

  1. 【十大经典数据挖掘算法】PageRank

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...

  2. PageRank的java实现

    一个网络(有向带权图)中节点u的PageRank的计算公式: PR(u)表示节点u的PageRank值,d为衰减因子(damping factor)或阻尼系数,一般取d=0.85,N为网络中的节点总数 ...

  3. 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码

    在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...

  4. 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍

    考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...

  5. pagerank

    http://jung.sourceforge.net/ https://github.com/louridas/pagerank/blob/aeb9b17ada1f925bb525961574f6d ...

  6. PageRank理论与实践及用户评分应用PeopleRank算法

    PageRank,网页排名,又称网页级别.Google左侧排名或佩奇排名,是一种由根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一. Google用它来体现网页的相关性和重要性,在搜索引擎 ...

  7. 张洋:浅析PageRank算法

    本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...

  8. 第十章 PageRank——Google的民主表决式网页排名技术

    搜索引擎的结果取决于两组信息:网页的质量信息,这个查询与每个网页的相关性信息.这里,我们介绍前一个. 1.PageRank算法原理 算法的原理很简单,在互联网上,如果一个网页被很多其他网页所链接,说明 ...

  9. PageRank算法简介及Map-Reduce实现

    PageRank对网页排名的算法,曾是Google发家致富的法宝.以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理. 一.什么是pagerank Pag ...

随机推荐

  1. Android修改默认SharedPreferences文件的路径,SharedPreferences常用工具类

    import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; ...

  2. C++ 类的头文件、实现、使用

    再次吐槽下C++Primer这本书,啰哩啰嗦,废话太多.如果我来翻译的话,绝对删减一堆没用的---仅限于发牢骚. 不知道是否经典的做法 类中的成员声明在头文件中,定义(我更喜欢叫实现)在源文件中,使用 ...

  3. C#多播委托/多播代理

    定义:委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针.理解委托的一种方式可以把委托的作用当作是给方法签名指定名称.委托的定义类似于方法的定义,但没有方法体,定义的委托名前要加上关 ...

  4. c# 异步编程demo (async await)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  5. EF中修改对象的值的问题。。。(字段超级多的时候)

    一般EF中修改单个对象的值,我是这样处理的. 如:DBEntities db=new DBEntities(); student stu = db.student.firstOrdefault(m=& ...

  6. oracle当前月添加一列显示前几个月的累计值

    create table test_leiji(rpt_month_id number(8),                        current_month NUMBER(12,2)); ...

  7. 【Graphlab】

    https://dato.com/ graphlab

  8. 详解MathType引用公式编号功能

    在论文创作期间,如果需要在文本中删除大量的公式,手动编号删除的工作量是比较大的,使用MathType引用公式编号功能就可以节约大量的时间,提供很大的方便.本教程将详解MathType引用公式编号功能. ...

  9. mac 开发环境安装使用 记录

    常用命令 1 查找文件位置: $locate php-fpm 软件变动的话更新locate本地库,可能比较耗时. $sudo /usr/libexec/locate.updatedb 2 查找运行文件 ...

  10. ubuntu13.10更换源

    Ubuntu13.10更新源 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就行),选择最快的源可以节省大批下载时间. 首先备份源列表: sudo cp /et ...