数据分析实战45讲
陈旸
清华大学计算机博士
立即订阅
17314 人已学习
课程目录
已完结 48 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你为什么需要数据分析能力?
免费
第一模块:数据分析基础篇 (16讲)
01丨数据分析全景图及修炼指南
02丨学习数据挖掘的最佳路径是什么?
03丨Python基础语法:开始你的Python之旅
04丨Python科学计算:用NumPy快速处理数据
05丨Python科学计算:Pandas
06 | 学数据分析要掌握哪些基本概念?
07 | 用户画像:标签化就是数据的抽象能力
08 | 数据采集:如何自动化采集数据?
09丨数据采集:如何用八爪鱼采集微博上的“D&G”评论
10丨Python爬虫:如何自动化下载王祖贤海报?
11 | 数据科学家80%时间都花费在了这些清洗任务上?
免费
12 | 数据集成:这些大号一共20亿粉丝?
13 | 数据变换:考试成绩要求正态分布合理么?
14丨数据可视化:掌握数据领域的万金油技能
15丨一次学会Python数据可视化的10种技能
16丨数据分析基础篇答疑
第二模块:数据分析算法篇 (20讲)
17 丨决策树(上):要不要去打篮球?决策树来告诉你
18丨决策树(中):CART,一棵是回归树,另一棵是分类树
19丨决策树(下):泰坦尼克乘客生存预测
20丨朴素贝叶斯分类(上):如何让机器判断男女?
21丨朴素贝叶斯分类(下):如何对文档进行分类?
22丨SVM(上):如何用一根棍子将蓝红两色球分开?
23丨SVM(下):如何进行乳腺癌检测?
24丨KNN(上):如何根据打斗和接吻次数来划分电影类型?
25丨KNN(下):如何对手写数字进行识别?
26丨K-Means(上):如何给20支亚洲球队做聚类?
27丨K-Means(下):如何使用K-Means对图像进行分割?
28丨EM聚类(上):如何将一份菜等分给两个人?
29丨EM聚类(下):用EM算法对王者荣耀英雄进行划分
30丨关联规则挖掘(上):如何用Apriori发现用户购物规则?
31丨关联规则挖掘(下):导演如何选择演员?
32丨PageRank(上):搞懂Google的PageRank算法
33丨PageRank(下):分析希拉里邮件中的人物关系
34丨AdaBoost(上):如何使用AdaBoost提升分类器性能?
35丨AdaBoost(下):如何使用AdaBoost对房价进行预测?
36丨数据分析算法篇答疑
第三模块:数据分析实战篇 (7讲)
37丨数据采集实战:如何自动化运营微博?
38丨数据可视化实战:如何给毛不易的歌曲做词云展示?
39丨数据挖掘实战(1):信用卡违约率分析
40丨数据挖掘实战(2):信用卡诈骗分析
41丨数据挖掘实战(3):如何对比特币走势进行预测?
42丨当我们谈深度学习的时候,我们都在谈什么?
43丨深度学习(下):如何用Keras搭建深度学习网络做手写数字识别?
第四模块:数据分析工作篇 (2讲)
44丨如何培养你的数据分析思维?
45丨求职简历中没有相关项目经验,怎么办?
加餐 (1讲)
加餐丨在社交网络上刷粉刷量,技术上是如何实现的?
结束语 (1讲)
结束语丨当大家都在讲知识和工具的时候,我更希望你重视思维和实战
数据分析实战45讲
登录|注册

32丨PageRank(上):搞懂Google的PageRank算法

陈旸 2019-02-25
互联网发展到现在,搜索引擎已经非常好用,基本上输入关键词,都能找到匹配的内容,质量还不错。但在 1998 年之前,搜索引擎的体验并不好。早期的搜索引擎,会遇到下面的两类问题:
返回结果质量不高:搜索结果不考虑网页的质量,而是通过时间顺序进行检索;
容易被人钻空子:搜索引擎是基于检索词进行检索的,页面中检索词出现的频次越高,匹配度越高,这样就会出现网页作弊的情况。有些网页为了增加搜索引擎的排名,故意增加某个检索词的频率。
基于这些缺陷,当时 Google 的创始人拉里·佩奇提出了 PageRank 算法,目的就是要找到优质的网页,这样 Google 的排序结果不仅能找到用户想要的内容,而且还会从众多网页中筛选出权重高的呈现给用户。
Google 的两位创始人都是斯坦福大学的博士生,他们提出的 PageRank 算法受到了论文影响力因子的评价启发。当一篇论文被引用的次数越多,证明这篇论文的影响力越大。正是这个想法解决了当时网页检索质量不高的问题。

PageRank 的简化模型

我们先来看下 PageRank 是如何计算的。
我假设一共有 4 个网页 A、B、C、D。它们之间的链接信息如图所示:
这里有两个概念你需要了解一下。
出链指的是链接出去的链接。入链指的是链接进来的链接。比如图中 A 有 2 个入链,3 个出链。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《数据分析实战45讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

  • 滨滨
    pagerank算法就是通过你的邻居的影响力来评判你的影响力,当然然无法通过邻居来访问你,并不代表你没有影响力,因为可以直接访问你,所以引入阻尼因子的概念。现实生活中,顾客比较多的店铺质量比较好,但是要看看顾客是不是托。

    编辑回复: 这个应用例子也很有趣,让顾客来投票。

    2019-04-14
    6
  • third
    作业
    1.原理
    1)基础:网页影响力=所有入链集合的页面的加权影响力之和

    2)拉里佩奇加入随机访问模型,即有概率用户通过输入网址访问
    网页影响力=阻尼影响力+所有入链集合页面的加权影响力之和

    2.应用场景:
    评估某个新行业怎么样,通过计算涌入这个行业的人的智力和数量。
    如果这个行业,正在有大量的聪明人涌入,说明这是一个正在上升的行业。

    作业及问题
    转移矩阵
    第一列是A的出链的概率
    A0B1/3C1/3D1/3
    第二列是B的的出链的概率
    A1/2B0C0D1/2
    第三列是C的出链概率
    A1B0C0D0
    第四列是D的出链概率
    A0B1/2C1/2D0

    等级泄露的转移矩阵应该是
    M=[0 0 1/2 0]
         [1 0 0 0]
         [0 0 1/2 0]
         [0 1 0 0]

    还是
    M=[0 0 0 1/2]
         [1 0 0 0 ]
         [0 0 0 1/2]
         [0 1 0 0 ]

    假设概率相同,都为1/4
    进行第一次转移之后,会发现,后面的
    W1=[1/8]
    [1/4]
    [1/8]
    [1/4]

    总和已经小于1了,在不断转移的过程中,会使得所有PR为0

    等级沉没的转移矩阵怎么写?
    M=[0 0 1 0]
         [1 0 0 0]
         [0 0 0 0]
         [0 1 0 0]

    编辑回复: 应用场景这个举例很有趣,回答你的问题:
    对应文章中的例子,等级泄露的转移矩阵:
    M=[0 0 0 1/2] 
         [1 0 0 0 ]
         [0 0 0 1/2]
         [0 1 0 0 ]
    等级沉没的转移矩阵
    M=[0 0 1/2 1] 
         [1 0 0 0 ]
         [0 0 0 0]
         [0 1 1/2 0 ]

    2019-02-25
    4
  • 李沛欣
    有人的地方,就有入世和出世
    有网络和地方,就有入链和出链

    入世的人,链接的大牛越多,越有影响力,
    对网站而言,链接出去的网页越多,说明网站影响力越大,但是越多链接进来你这里的网页,也直接影响到网站的价值。

    出链太多,如同出世一样,耗散内力,排名等级越来越低,最终江湖再见。
    入链太多,就可能成为流量黑洞,如同涉世太深的人一样走火入魔。

    谷歌创始人拉里佩奇则力图破解等级泄露和等级沉没困境,创造了随机浏览模型。

    编辑回复: 这个总结和分析很不错。当遇到了一些问题,有时候不是直接解决它,而是跳脱出来提出了“随机浏览模型”反而把之前的等级泄露和等级沉没问题解决了。

    2019-03-01
    2
  • third
    复习感悟:
    1.PageRank算法,有点像
    海纳百川有容乃大(网页影响力=所有入链集合的页面的加权影响力之和)
    像我汇聚的东西,越多,我就越厉害。

    2.随机访问模型
    有点像下雨。
    海洋除了有河流流经,还有雨水,但是下雨是随机的(网页影响力=阻尼影响力+所有入链集合页面的加权影响力之和)

    编辑回复: 这个比喻不错~ 河流之间是有入链和出链的,但是也可能遇到等级泄露和等级沉没的问题,下雨就类似是随机浏览模型,给每个节点提供补充。

    2019-02-26
    2
  • 白夜
    1.把影响力转化为每日使用时间考虑。
    在感兴趣的人或事身上投入了相对多的时间。对其相关的人事物也会投入一定的时间。
    那个人或事,被关注的越多,它的影响力/受众也就越大。而每个人的时间有限,一般来说最多与150人保持联系,相当于最多有150个出链。
    其中,一部分人,没人关注,只有出链没有入链,他们就需要社会最低限度的关照,这个就是社会福利(阻尼)。
    2.矩阵以前学了一直不知道在哪里可以应用,今天学了用处感觉还蛮爽的。

    编辑回复: 矩阵在推导的过程中还是有用的,现在很多函数都封装好了,可以直接使用,所以矩阵接触的就少了。自己能跑通了确实会比较爽。

    2019-02-25
    2
  • 王彬成
    一、学完今天的内容,你不妨说说 PageRank 的算法原理?
    1、PageRank 的算法原理核心思想:
    -如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是PageRank值会相对较高;
    -如果一个PageRank值很高的网页链接到一个其他的网页,那么被链接到的网页的PageRank值会相应地因此而提高。
    2、公式
    PR(u)=PR(v1)/N1+PR(v2)/N2+……
    其中PR(u), PR(v1) 为页面影响力。N1, N2是v1, v2页面对应的出链总数。
    3、算法过程
    1)给每个页面分配相同的PR值,比如PR(u)=PR(v1)=PR(v2)=……=1
    2)按照每个页面的PR影响力计算公式,给每个页面的PR值重新计算一遍
    3)重复步骤2,迭代结束的收敛条件:比如上次迭代结果与本次迭代结果小于某个误差,我们结束程序运行;或者比如还可以设置最大循环次数。

    二、你还能说一些 PageRank 都有哪些应用场景吗?
    引用链接:https://36kr.com/p/214680.html
    1、研究某段时间最重要的文学作品
    2、研究与遗传有关的肿瘤基因
    3、图书馆图书推荐

    编辑回复: 最有影响力的文学作品,肿瘤基因,图书推荐 这几个场景不错。

    2019-02-25
    2
  • 白色纯度
    转移矩阵用到了Marcov过程的部分知识,转移概率矩阵并不一定收敛,需满足条件:不可约,平稳(可逆)。等级泄露和等级沉没都是破坏了不可约的情况,使得马氏矩阵不具备平稳概率。而解决该问题的思想又与朴素贝叶斯的平滑处理相似,浅见,若老师有时间还望指正。
    2019-06-18
    1
  • 听妈妈的话
    有个人博客的人互互相交换友链,也是为了提高搜索引擎收录的rank吗?
    2019-03-23
    1
  • sunny
    这个计算PR权重的时候,是计算对象的每个入链的权重除以出链数量的之和,那从一开始计算的时候每个页面需要有个原始的权重值才行,这个原始权重是否就是1

    编辑回复: 针对节点的初始权重:如果N个节点的总权重是1,那么可以设置每个节点的权重为1/N

    2019-02-27
    1
  • Ling
    其实提出阻尼系数,还是为了解决某些网站明明存在大量出链(入链),但是影响力却非常大的情形。比如说 www.hao123.com 一样的导航网页,这种网页就完全是导航页,存在极其多出链;还有各种搜索引擎,比如 www.baidu.com、www.google.com 这种网站,基本不存在出链,但是入链可能非常多。这两种网站的影响力其实非常大。

    作者回复: 更符合人们实际浏览网页的场景

    2019-11-21
  • William~Zhang
    老师,在计算一个网页u的影响力的时候,用到v的影响力,这是怎么得到的?
    2019-11-14
  • S.Mona
    PageRank和机器学习和数据分析的关系是怎样的?

    作者回复: PageRank是基于图论的影响力模型,也是机器学习,数据分析的10大算法之一。机器学习和数据分析 很多时候概念有重叠,两者都是用数据解决问题,使用到很多模型,比如PageRank

    2019-10-16
  • FeiFei
    PageRank原理:
    通过聚合入链和出链的权重,来判断自身的排序。
    因为可能没有入链或者外链,因此加入阻尼因子d,来将这种情况规避。
    2019-08-27
  • 吃饭睡觉打窦窦
    为啥等级泄露,我的代码跑出来4个点的pr值没有出现0的情况

    编辑回复: 先检查下等级泄露的矩阵,这里设置的是:
    M=[0 0 0 1/2] 
         [1 0 0 0 ]
         [0 0 0 1/2]
         [0 1 0 0 ]
    然后看下你迭代的次数。参考代码:
    import numpy as np
    a_leak = np.array([[0, 0, 0, 1/2],
    [1, 0, 0, 0],
    [0, 0, 0, 1/2],
    [0, 1, 0, 0]])
    b = np.array([1/4, 1/4, 1/4, 1/4])
    w = b
    print(a1)
    for i in range(100):
    w = np.dot(a_leak, w)
    print(w)

    2019-07-06
    1
  • lipan
    最后图解。早期搜索引擎问题,写的是k-means算法的流程。
    2019-06-12
收起评论
15
返回
顶部