武汉SEO浏览器中搜索引擎算法公式,PR算法安装步骤及计算
能看到这篇文章的读者应该都使用过浏览器,但是你们有谁思考过浏览器中搜索引擎的运作模式?
说个我年轻时有意思的idea
每个用户输入搜索单词,百度就会记录下数据放进一个字典作为key值。然后给你展示一些相关网页,当你选择其中一个,这个选择会被记录为value值存入字典,相同类型越多,这个组合的位置上升地越高。
这么做现在想想也是可行,就是效率会特别低下。而且它有一个不足之处:它把多维关系进行了降维处理。
比如下图
A和B可以使一个key:value的关系,可是有时候B也可以是key值,这里就设计到一个权重问题。每一个网页都需要有一个权重值用来评估它的可靠性。
1998年之前的搜索引擎是通过时间顺序基于检索词进行检索。往往搜索结果网页质量不高,很多网页也会故意增加检索词频率,相当于现在的蹭热度。
比如你检索北京市某某中学,它会在下面弄一个友情链接:北京市教育局,公安局……这么做就是为了别人在搜索教育局和公安局的时候给自己增加权重。
为此谷歌的拉里佩奇提出了PageRank算法用来解决这一问题。PR直接翻译就是网页权重,指的是一个网页影响力等于所有入链集合的页面加权影响力之和。
具体公式如下
首先需要了解两个概念
出链:链接出去的链接
入链:链接进来的链接
PR算法还有两个问题
等级泄露:如果一个网页没有出链,就像黑洞一样吸收了其他网页的影响力,导致其他网页PR为0
等级沉没:如果一个网页只有出链,没有入链,迭代下来也会导致该网页PR为0(不存在分母v)
为此拉里佩奇一拍脑门,想出了一个阻尼因子d用来收敛PR算法模型。
具体公式如下
理论太枯燥,我们用实际案例来解释。
安装模块
左下角install package。
导入模块
创建有向关系
就是上面那个图片关系。
这里你会发现这是一个列表,其中里面的有向关系是以元组的形式存在的。
创建有向图
查看数据类型
networkx.classes.digraph.DiGraph
添加节点
查看个数/节点
run
求PR值
run
基础的说完了,接下来实践一个项目,说实话网上数据很多,但是有向的数据真不多。为了给读者一个福利,我好费劲才弄了一份。嘿嘿嘿……
导入模块
1和2就不介绍了
3是有向网络模型
4是防错字典模块
读取数据
run
AB列是人名,我用了加密技术转化为了字符串,C列是两个人交易的金额。
把数据放入列表
PR算法中的有向关系是用元组的形式存储的,C列数据用于绘制网络中的边长度。
运行结果
list1赋值给变量
为啥要另外赋值一次?
没啥原因:处女座!
创建有向图
防错字典
填充数据和边长
第一步:填充graph
第二步:填充edges_weights_temp
第二步看着有点复杂,理解了就简单了:假设一个元组不在edges_weights_temp中,则以该【元组】为key,C列为值,如果存在,则累加C列的值。
加个判断看一下效果
run
再把字典转化为列表
设置路径和权重
计算PR值
run
这就是每个人在这份数据中的交易权重。
设置节点属性
定义画图函数
1.判断语句为各种图形的类别
2.使用PR值设置节点大小
3.设置网络边长度
4.绘制图形的节点、边、标签
5.展示图片
运行结果
我们发现f362这个人与其他人都有着密切的交易关系,这是一只大佬啊。
打开数据验证一下,正向交易
验证fb2a
如果我们觉得图片中点太多,只要发现其中隐藏的大佬,我们可以用PR值剪枝。
设置阙值
复制网络图
剪掉低于阙值的节点
n和p_rank
画图
运行结果
重要角色都被选了出来,是不是很好玩?今天的内容有点多,好好消化一下。