Yo, yo, check it out. 保证看完不晕倒...

如果公式让你脑瓜疼,请忽略公式,或者忽略脑瓜。

Kagging咖金:推荐系统之关联规则(附实践代码)​zhuanlan.zhihu.com

继上一个十大经典算法Ariori关联规则算法,今天的主角是曾经撑起Google帝国的PageRank算法。1998年,Stanford大学博士生Larry Page和Sergey Brin创立了Google,使用PageRank对海量的网页进行重要性分析。

Stanford大学博士生Larry Page

PageRank算法是参照论文引用影响力的算法,是属于图论的影响力模型(基于图论的还有经常被用于用户画像的社区发现系列如LPA算法,另写文章)。先上一张图,看这几个网页的影响力图

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)

[output] pagerank值是: {'A': 0.333, 'B': 0.222, 'C': 0.222, 'D': 0.222}

这样就量化了各个网页的影响力,是不是很Cool

我们通过手推来理解下PageRank简化模型的原理:

两个概念
出链:链接出去的链接。
入链:链接进来的链接。

一个网页u的影响力 = 所有入链集合的页面的加权影响力之和,来看下全文只出现一次的公式

(u:待评估的页面,Bu为u的入链集合)

Lv不是名牌包包,是节点v的初恋个数。。。

转移矩阵:统计网页对于其他网页的跳转概率
因为出链会给被链接的页面赋予影响力,关键在于统计他们出链的数量

假装能看懂的矩阵

看第一列,分别是A>A, A>B, A>C, A>D的转移表示。
这是一个不自恋的人和三个人的初恋的故事:
A对A的没有出链,那叫不自恋的A。A对BCD都有出链,A对BCD都有初恋。
所以表示成,前面第一个是0,后面三个都是1/3。

PageRank实现过程:

Step1,假设A、B、C、D的初始影响力相同

Step2,进行第一次转移之后,页面的影响力变成:

假装能看懂的矩阵运算

Step3,进行n次迭代后,直到页面的影响力不再发生变化,也就是影响力收敛=>最终影响力

对数学公式运算不感冒,没关系,我们还有人见人恨的手推代码。

import numpy as np
a = np.array([[0, 1/2, 1, 0], [1/3, 0, 0, 1/2],[1/3, 0, 0, 1/2],[1/3, 1/2, 0, 0]])
b = np.array([1/4, 1/4, 1/4, 1/4])

让表哥给你把a和b转成你爱看的样子:

接下来是关键代码,看好了

结合step1-3对照完整代码再看一下

import numpy as np
a = np.array([[0, 1/2, 1, 0], [1/3, 0, 0, 1/2],[1/3, 0, 0, 1/2],[1/3, 1/2, 0, 0]])
w = np.array([1/4, 1/4, 1/4, 1/4])
for i in range(100):w = np.dot(a, w)

就这么几步,这PageRank真是骨骼清奇啊

然而鹅鹅鹅:简化版的模型在实际应用中是不Work的

因为不是所有人都初恋过,也不是所有的节点都满足既有出链,又有入链。

有些网页只有进没有出,就像A这样

有些只有出没有进,就像这个A这样

看到这里,配齐崩溃了

拉里-佩奇的PageRank优化:

Larry Page提出了PageRank的随机浏览模型,假设用户并不都是按照跳转链接的方式来上网,还有一种可能是不论当前处于哪个页面,都有概率访问到其他任意的页面。引入阻尼因子d,通常取值为0.85(默认)。

简洁而优美的随机浏览模式,一如优雅的赫本
假装你看不见的优化版公式,d是阻尼因子,N是总页面数
# PageRank的随机浏览模型
def random_work(a, w, n):d = 0.85for i in range(100):w = (1-d)/n + d*np.dot(a, w)print(w)

PageRank的模型使用场景还是比较广的:

社交网络领域:

  • 如何计算博主影响力(粉丝数=影响力么?)
  • 如何计算职场影响力(脉脉的影响力计算)

生物领域:

  • 基因、蛋白研究,通过PageRank确定七个与遗传有关的肿瘤基因

推荐系统:

  • 将用户行为转化为图的形式,对用户u进行推荐,转化为计算用户u和与所有物品i之间的相关性,取与用户没有直接边相连的物品,按照相关性的高低生成推荐列表

交通网络:

  • 预测城市的交通流量和人流动向

这个模型还可以有很多运用场景,因为节点可以是任何事物:words, sentences, images, users...

是的,它比六环少一环,但它比四环多一环。。。

接下来跟着佩奇进行PageRank实战

数据集

希拉里邮件数据集,513个人名,9306封邮件,人名存在别名的情况
目标:计算不同的人在邮件数据集中的权重,筛选重要的人物,绘制网络图

  1. 整个数据集由三个文件组成:Aliaes.csv, Email.csv和Person.csv,其中Email文件记录了所有公开邮件的内容,发送者和接受者的信息。Persons这个文件统计了邮件中所有人的姓名以及对应的ID。
  2. 因为姓名存在别名的情况,为了将邮件中的人物进行统一,我们还需要使用Aliases文件来查询别名和人物的对应关系。
  3. 整个数据集中包括9306封邮件和513个人名,数据集还是比较大的。不过这一次我们不需要对邮件的内容进行分析,只需要通过邮件的发送者和接收者(对应的Emails.csv文件中的MetadataForm和MetadataTo字段)来绘制整个关系网络。

因为涉及到的人物很多,因此我们需要通过PageRank算法计算每个人物在邮件关系网络中的权重,最后筛选出来最有价值的人物来进行关系网络图的绘制。

中心状网络图
圆桌状网络图

PageRank不仅仅是一个算法,而是一种思想,这一系列算法还有:

  1. TextRank算法,一种用于文本的基于图的排序算法,根据词之间的共现关系构造网络
  2. EdgeRank算法,2017年底,微博采用了类似FaceBook的EdgeRank算法
  3. PersonalRank算法,在推荐场景中,从用户u对应的节点开始游走,改成以(1-d)的概率固定从u重新开始,当收敛的时候,计算item节点影响力排名,即为用户u感兴趣的item

文章收录于【机器学习从入门到奖牌】专栏,如何使用PageRank算法实战,实践代码我放Github。

Yo, yo, Check it out. Data if Kagging now...

pagerank数据集_机器学习十大经典算法-PageRank(附实践代码)相关推荐

  1. pca各个向量之间的相关度_机器学习十大经典算法之PCA主成分分析

    PCA主成分分析法简介 主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数 ...

  2. matlab 最小二乘法拟合_机器学习十大经典算法之最小二乘法

    点击上方"计算机视觉cv"即可"进入公众号" 重磅干货第一时间送达 最小二乘法概述 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找 ...

  3. 机器学习十大经典算法之岭回归和LASSO回归

    机器学习十大经典算法之岭回归和LASSO回归(学习笔记整理:https://blog.csdn.net/weixin_43374551/article/details/83688913

  4. 机器学习十大经典算法:深入浅出聊贝叶斯决策(贝叶斯公式,最小风险贝叶斯,最小错误贝叶斯)

    前言    常听人说,在学习一个东西时,如果能够深入浅出的讲给别人听,才算是真的懂了.最近正好在学模式识别,于是就用它来练笔了.贝叶斯决策(Bayes Decision) 是十大经典机器学习算法之一, ...

  5. 机器学习十大经典算法之决策树

    机器学习经典十大算法 机器学习/人工智能的子领域在过去几年越来越受欢迎.目前大数据在科技行业已经炙手可热,而基于大量数据来进行预测或者得出建议的机器学习无疑是非常强大的.一些最常见的机器学习例子,比如 ...

  6. 机器学习十大经典算法之KNN最近邻算法

    KNN简介 KNN(K-NearestNeighbor)是机器学习入门级的分类算法,非常简单.它实现将距离近的样本点划为同一类别:KNN中的K指的是近邻个数,也就是最近的K个点 :根据它距离最近的K个 ...

  7. 机器学习十大经典算法之随机森林

    随机森林简介 随机森林是机器学习一种常用的方法.它是以决策树为基础,用随机的方式排列建立的,森林里每个决策树之间都是没有关联的. 在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策 ...

  8. 机器学习十大经典算法之K-Means聚类算法

    聚类介绍 聚类在机器学习,数据挖掘,模式识别,图像分析以及生物信息等领域有广泛的应用.聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都 ...

  9. 机器学习十大经典算法

    本文介绍了机器学习新手需要了解的 10 大算法,包括线性回归.Logistic 回归.朴素贝叶斯.K 近邻算法等. 在机器学习中,有一种叫做「没有免费的午餐」的定理.简而言之,它指出没有任何一种算法对 ...

最新文章

  1. 文本分类入门(二)文本分类的方法
  2. java 装饰器模式
  3. SpringCloud Greenwich(六)集成dubbo与openfeign的feignTargeter报错,cannot access its superinterface Targeter
  4. Flume1.5.0的安装、部署、简单应用(含伪分布式、与hadoop2.2.0、hbase0.96的案例)
  5. 【cornerstone】撤销标注点位(通过ctrl+z)
  6. Visual C++ 2008入门经典 第十章标准模板库(二)
  7. Python_命名空间和作用域_25
  8. 配置RedisTemplate、JedisPoolConfig、JedisConnectionFactory+自定义序列化 (xml+java方式)+使用...
  9. Java常用类和方法重点总结
  10. 聊一聊自来水营业收费系统
  11. 这 IDEA超全个性化设置,实用,属实装逼!
  12. Tensorflow概念详解
  13. 原生JS实现FlappyBird游戏 超详细解析 快来做一个自己玩吧
  14. C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)
  15. 第二周学习前端总结与感悟(一)
  16. 关于错误提示:could not find a part of path “X:\”的解决办法
  17. 逗号表达式--------问号表达式
  18. 6.easyui+ztree案例:zTree树
  19. 不同分辨率对应的像素输出时钟以及同步信号参数的整理
  20. 无锡做大做强“中国芯” 华虹功不可没

热门文章

  1. iOS获取label的高度模仿博友
  2. 给已经做好的GHO文件添加密码
  3. 蓝桥杯2020国赛太原理工学子成绩大跃进
  4. Bailian4115 鸣人和佐助【BFS】
  5. HashMap(HashSet)的实现
  6. 古人与古代(他们和他们的时代)
  7. Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫
  8. matlab 可视化 —— axis
  9. 面向对象 —— 类设计(十)—— 成员函数
  10. hadoop 命令行相关操作