PageRank学习

喜欢手写学习,记忆深刻(字丑勿喷!)。

计算过程的代码如下:

public class PageRank
{
	private static double m[][]={
		{   0        , 0.5 , 1 ,  0 },
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 , 0.5 , 0 ,  0 }
	};
	private static double v[]={0.25,0.25,0.25,0.25};
	private static double v1[]={0,0,0,0};
	public static void main(String[] argv)
	{
		for(int iterater=0;iterater<1000;iterater++)
		{
			for(int i=0;i<4;i++)
			{
				for(int j=0;j<4;j++)
				{
					v1[i]+=m[i][j]*v[j];
				}
			}
			for(int k=0;k<4;k++)
			{
				v[k]=v1[k];
				v1[k]=0;
			}
		}
		for(int k=0;k<4;k++)
		{
			System.out.println(v[k]);
		}
	}
}

  上面使用的图是一个没有太大缺陷的图,其实PageRank中海油很多问题需要处理,主要问题有:

1.终止点问题

上述上网者的行为是一个马尔科夫过程的实例,要满足收敛性,需要具备一个条件:

  • 图是强连通的,即从任意网页可以到达其他任意网页:

  互联网上的网页不满足强连通的特性,因为有一些网页不指向任何网页,如果按照上面的计算,上网者到达这样的网页后便走投无路、四顾茫然,导致前面累计得到的转移概率被清零,这样下去,最终的得到的概率分布向量所有元素几乎都为0。假设我们把上面图中C到A的链接丢掉,C变成了一个终止点,得到下面这个图:

         

  对应的转移矩阵为:

  

  连续迭代下去,最终所有元素都为0:  

  

代码如下:

public class PageRank
{
	private static double m[][]={
		{   0        , 0.5 , 0 ,  0 },
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 , 0.5 , 0 ,  0 }//第三列全为0
	};
	private static double v[]={0.25,0.25,0.25,0.25};
	private static double v1[]={0,0,0,0};
	public static void main(String[] argv)
	{
		for(int iterater=0;iterater<1000;iterater++)
		{
			for(int i=0;i<4;i++)
			{
				for(int j=0;j<4;j++)
				{
					v1[i]+=m[i][j]*v[j];
				}
			}
			for(int k=0;k<4;k++)
			{
				v[k]=v1[k];
				v1[k]=0;
			}
		}
		for(int k=0;k<4;k++)
		{
			System.out.println(v[k]);
		}
	}
}

2.陷阱问题

  另外一个问题就是陷阱问题,即有些网页不存在指向其他网页的链接,但存在指向自己的链接。比如下面这个图:

        

  上网者跑到C网页后,就像跳进了陷阱,陷入了漩涡,再也不能从C中出来,将最终导致概率分布值全部转移到C上来,这使得其他网页的概率分布值为0,从而整个网页排名就失去了意义。如果按照上面图对应的转移矩阵为: 

        

  不断的迭代下去,就变成了这样:

    

代码如下:

public class PageRank
{
	private static double m[][]={
		{   0        , 0.5 , 0 ,  0 },
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 ,  0  , 1 , 0.5},//此行第三列为1
		{0.333333333 , 0.5 , 0 ,  0 }
	};
	private static double v[]={0.25,0.25,0.25,0.25};
	private static double v1[]={0,0,0,0};
	public static void main(String[] argv)
	{
		for(int iterater=0;iterater<1000;iterater++)
		{
			for(int i=0;i<4;i++)
			{
				for(int j=0;j<4;j++)
				{
					v1[i]+=m[i][j]*v[j];
				}
			}
			for(int k=0;k<4;k++)
			{
				v[k]=v1[k];
				v1[k]=0;
			}
		}
		for(int k=0;k<4;k++)
		{
			System.out.println(v[k]);
		}
	}
}

解决终止点问题和陷阱问题

上面过程,我们忽略了一个问题,那就是上网者是一个悠闲的上网者,而不是一个愚蠢的上网者,我们的上网者是聪明而悠闲,他悠闲,漫无目的,总是随机的选择网页,他聪明,在走到一个终结网页或者一个陷阱网页(比如两个示例中的C),不会傻傻的干着急,他会在浏览器的地址随机输入一个地址,当然这个地址可能又是原来的网页,但这里给了他一个逃离的机会,让他离开这万丈深渊。模拟聪明而又悠闲的上网者,对算法进行改进,每一步,上网者可能都不想看当前网页了,不看当前网页也就不会点击上面的连接,而上悄悄地在地址栏输入另外一个地址,而在地址栏输入而跳转到各个网页的概率是1/n。假设上网者每一步查看当前网页的概率为a,那么他从浏览器地址栏跳转的概率为(1-a),于是原来的迭代公式转化为:

  现在我们来计算带陷阱的网页图的概率分布:

  重复迭代下去,得到:

  可以看到C虽然占了很大一部分pagerank值,但其他网页页获得的一些值,因此C的链接结构,它的权重确实应该会大些。

代码如下:

public class PageRank
{
	private static double m[][]={
		{   0        , 0.5 , 0 ,  0 },
		{0.333333333 ,  0  , 0 , 0.5},
		{0.333333333 ,  0  , 1 , 0.5},
		{0.333333333 , 0.5 , 0 ,  0 }
	};
	private static double v[]={0.25,0.25,0.25,0.25};
	private static double v1[]={0,0,0,0};
	public static void main(String[] argv)
	{
		for(int iterater=0;iterater<1000;iterater++)
		{
			for(int i=0;i<4;i++)
			{
				for(int j=0;j<4;j++)
				{
					v1[i]+=m[i][j]*v[j];
				}
			}
			for(int k=0;k<4;k++)
			{
				v[k]=0.8*v1[k]+0.2*0.25;//此处0.2乘的一直都是v[]的初始值
				v1[k]=0;
			}
		}
		for(int k=0;k<4;k++)
		{
			System.out.println(v[k]);
		}
	}
}

  

时间: 2024-08-28 23:59:56

PageRank学习的相关文章

PageRank算法学习与整理

PageRank 算法学习与整理 由于最近在研究图计算框架的相关问题,决定复习整理一下它的测试算法PageRank,不足之处请大家批评指正! 一. PageRank 相关背景 PageRank 的创始人拉里佩奇(Larry Page)和谢尔盖.布林(Sergey Brin),在1998年提出了该算法,并应用在Google搜索引擎的检索结果排序上,该技术也是Google早期的核心技术之一,是Google用来衡量一个网站好坏的标准. 二. Google搜索引擎工作流程 首先看一下Google搜索网页

学习日志---基于hadoop实现PageRank

PageRank简单介绍: 其值是通过其他值得指向值所决定,具体例子如下: 对应于每个mapReduce的计算: 由mapper算出每个点所指节点的分值,由reduce整个key相同的,由公式算出. 三角号表示的是迭代两次之间计算的差值,若小于某个值则计算完成,求的每个点的pagerank值. 自我实现的代码:如下 输入的数据分为: input1.txt A,B,DB,CC,A,BD,B,C 表示每行第一个点所指向的节点,在reducer的setup会用到,构建hashmap供使用. input

大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式2.1.2 GraphX 存储模式2.2 vertices.edges 以及 triplets2.2.1 vertices2.2.2 edges2.2.3 triplets2.3 图的构建2.3.1 构建图的方法2.3.2 构建图的过程2.4 计算模式2.4.1 BSP 计算模式2.4.2 图操作一

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总结 引言 1 Hadoop 和 Spark 的关系 Spark 系统架构 1 spark 运行原理 RDD 初识 shuffle 和 stage 性能优化 1 缓存机制和 cache 的意义 2 shuffle 的优化 3 资源参数调优 4 小结 本地搭建 Spark 开发环境 1 Spark-Scal

Spark学习笔记总结-入门资料精化

Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用.减少了延时处理,提高性能效率实用灵活性.也可以与hadoop切实相互结合. spark核心部分分为RDD.Spark SQL.Spark Streaming.MLlib.GraphX.Spark R等核心组件解决了很多的大数据问题,其完美的框架日受欢迎.其相应的生态环境包括zepplin等可视化方面,正日益壮大.大型公

Hama学习总结

Hama学习笔记 1.       Hama定义 Hama是基于HDFS上的BSP模型实现,其运行不需要MapReduce.例证如下: 在单点调试的Hama系统上,只运行NameNode.DataNode.BSPMasterRunner.GroomServerRunner和 ZooKeeperRunner进程,即可运行PageRank程序. 2.      MapReduce与BSP区别 执行机制:MapReduce是一个数据流模型,每个任务只是对输入数据进行处理,产生的输出数据作为另一个任务的

Massive Data Mining学习记录

第一周: 学习PageRank, 知识点:每个节点的权值由其他节点的投票决定,所有节点的权值和为1 当节点很多时候必须转换成矩阵运算来计算节点的最终值,由马尔可夫链可以证明,这个值可以迭代得到 问题:可能出现无出度节点,导致总体失衡 解决办法:每个节点的入读权值矩阵M' = 0.8*M + 0.2*1/n,以0.2的概率跳出当前节点 模拟代码: (ns myclojure.core (:use [incanter core stats charts io])) (def M (matrix [[

Social Network Analysis的Centrality总结,以及networkx实现EigenCentrality,PageRank和KatzCentrality的对比

本文主要总结近期学习的Social Network Analysis(SNA)中的各种Centrality度量,我暂且翻译为中心度.本文主要是实战,理论方面几乎没有,因为对于庞大的SNA,我可能连门都没有入,但是我觉得这不影响我理解原理后使用他们. 本文为原创,如有不小心侵权的问题出现,请联系本人删除.本文不允许任何形式的转载!!! 一.Centrality的定义 在SNA领域的centrality是用于衡量图中节点的重要度,不同的centrlity算法会对同一节点给出差异很大的centrali

海量数据挖掘——第1讲.MapReduce and PageRank

本栏目(数据挖掘)下海量数据挖掘专题是个人对Coursera公开课海量数据挖掘(2015)的学习心得与笔记.所有内容均来自Coursera公开课Mining Massive Datasets中Jure Leskovec, Anand Rajaraman以及Jeff Ullman老师的讲解.(https://class.coursera.org/mmds-002/lecture) 第1讲-------MapReduce and PageRank 一.Distributed File System